AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird: String-Feld in Blob umwandeln
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird: String-Feld in Blob umwandeln

Ein Thema von Der Jan · begonnen am 14. Dez 2006 · letzter Beitrag vom 17. Dez 2006
Antwort Antwort
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#1

Firebird: String-Feld in Blob umwandeln

  Alt 14. Dez 2006, 12:28
Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus
Hallo,

ich habe in einer DB-Tabelle ein Feld VARCHAR(255), dies möchte ich gerne in einen BLOB SUB_TYPE TEXT umwandeln. Wie kann ich das tun? "Einfaches" Umwandeln, z.B. im IBExpert geht nicht, da dadurch die interne Struktur mächtig beschädigt wird. Drum habe ich mir ein Script gebastelt:

SQL-Code:
ALTER TABLE AUFTRAG ADD GC2 T_TEXTBLOB;
UPDATE AUFTRAG A SET A.GC2=A.GARANTIECOMMENT; /* GARANTIECOMMENT ist VARCHAR(255) */

/* diverse Trigger auf GARANTIECOMMENT deaktivieren, lasse ich hier weg */ 

ALTER TABLE AUFTRAG DROP GARANTIECOMMENT;
ALTER TABLE AUFTRAG ALTER GC2 TO GARANTIECOMMENT;

/* diverse Trigger auf GARANTIECOMMENT aktivieren, lasse ich hier weg*/ 

COMMIT;
Das läuft auch, ich kann auf das "neue" Feld lesend zugreifen, aber sobald ich etwas schreiben möchte kommt als Fehler Meldung "Data conversion Error from Field BLOB" (oder ähnlich).

Wie kann ich diese Änderung "richtig" durchführen ? Das einfache Kopieren tut es hier wohl nicht
Gruß, Jan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Firebird: String-Feld in Blob umwandeln

  Alt 14. Dez 2006, 12:47
Blobs sind nicht Teil der eigentlichen Tabelle, sondern werden in einem eigenen Bereich der Datenbank gespeichert. Im Datensatz selber wird nur die BLOB_ID gespeichert. Über diese man dann einen Stream zum Blob Öffnen kann.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#3

Re: Firebird: String-Feld in Blob umwandeln

  Alt 14. Dez 2006, 20:45
Hallo,

ich weiß, daher rühren ja vermutlich die Probleme. Meine Frage ist halt, wie kann ich mein Vorhaben trotzdem realisieren?
Wäre es vielleicht möglich, die Tabellenstruktur in eine neue Tabelle zu "klonen", lediglich das entsprechende Feld als BLob zu definieren und dann den Inhalt der Originaltabelle zu kopieren, dann Original löschen und Klon umbenennen (also im Prinzip, so wie ich es in dem Script oben mit dem Feld gemacht habe, nur halt mit der ganzen Tabelle).
Ich frage, bevor ich es versuche, weil es ziemlich arg aufwendig wäre, dies zu tun, und ich immer noch Hoffnung auf eine einfache Lösung habe....
Gruß, Jan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Firebird: String-Feld in Blob umwandeln

  Alt 14. Dez 2006, 20:55
In einem Aufwasch (einer Updateanweisung) wird das wohl nicht gehen. Versuch mal die Tabelle Ds für DS durchzugehen und den Feldinhalt zu Kopieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#5

Re: Firebird: String-Feld in Blob umwandeln

  Alt 14. Dez 2006, 21:44
Hmmm. Ds für Ds wird nix werden, diese Tabelle ist eine der "Haupttabellen" der DB, und die ist gut in Benutzung.
Aber vielleicht geht das ganze ja mit ner StoredProc?? Da kann ich ja im Prinzip jeden Eintrag einzeln durchgehn.... Und da könnte das sogar von Feld zu Feld gehen, hast recht
Werd ich morgen mal an der Test-DB ausprobieren und wenns klappt, dann ist morgen nacht das Live-System fällig
Gruß, Jan
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Firebird: String-Feld in Blob umwandeln

  Alt 15. Dez 2006, 10:27
Hi,

ich update blobs ach öfter mit Varchar und habe keine Probleme.
Hat den die Domain T_TEXTBLOB ein Character Set?

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
rider

Registriert seit: 12. Aug 2006
90 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Firebird: String-Feld in Blob umwandeln

  Alt 15. Dez 2006, 10:34
Zitat von Der Jan:
ich habe in einer DB-Tabelle ein Feld VARCHAR(255), dies möchte ich gerne in einen BLOB SUB_TYPE TEXT umwandeln. Wie kann ich das tun?
Für diesen Zweck nutze ich die Funktion StrBlob aus der FreeUDFLib.
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
679 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Firebird: String-Feld in Blob umwandeln

  Alt 17. Dez 2006, 22:47
Zitat von mkinzler:
Blobs sind nicht Teil der eigentlichen Tabelle, sondern werden in einem eigenen Bereich der Datenbank gespeichert. Im Datensatz selber wird nur die BLOB_ID gespeichert. Über diese man dann einen Stream zum Blob Öffnen kann.
stimmt teilweise. wenn der blobinhalt noch in die selbe datenpage passt landet der inhalt auch darin. wenn nicht, dann werden die daten in komplett neue pages gepackt. ist vorteilhaft wenn man kleine blobinhalte hat.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz