Autor Beitrag
burli
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mo 08.09.03 01:46 
Hi,
ich hab folgendes Problem: ich möchte einen längeren Text aus einem Memo in einem Blob oder Text Feld ablegen. Dazu hab ich mit in einer Tabelle (MySQL) ein entsprechendes Feld definiert und auf das Forumular ein DBMemo gelegt.
Wenn ich einen neuen Datensatz anlege bekomme ich immer die Fehlermeldung

user defined image

Der Datensatz wird aber gespeichert. Ich kann aber über DBNav in der Tabelle herumblättern und es wird auch alles im Memofeld angezeigt und ich kann auch problemlos bestehende Datensätze editieren. Der Fehler tritt wirklich nur beim Anlegen eines neuen Datensatzes und nur in Verbindung mit Blob's auf.

Ich verwende die BDE, ODBC und MySQL jeweils in einer aktuellen Version

Irgend eine Idee was das sein könnte?

Gruß
Markus

PS: Die Einstellung von Table.FieldDefs.DataType auf ftMemo oder ftFmtMemo (Default war ftBlob) hat auch nichts gebracht
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Di 09.09.03 11:44 
Hm, hat keiner ne Idee? Ich komme hier nämlich nicht mehr weiter. Ich habe sogar ne neue DB mit nur einer Tabelle mit einem int und einem Blob Field angelegt und ein Programm erstellt das nichts anderes enthält als nen DBNav, ein DBEdit und ein DBMemo.
Aber jedesmal beim Erstellen bekomme ich oben genannte Fehlermeldung
Bin für jede Hilfe dankbar
Gruß
Markus
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Di 09.09.03 12:19 
Ich bin grad nen Schritt weitergekommen. Es muß an der Tabelle liegen. Bei einer anderen Tabelle, die auch ein Blob Feld enthält, tritt der Fehler nicht auf.
Der einzigen Unterschied den ich bisher finden konnte liegt darin, das die eine Tabelle in Access erstellt und über ODBC in die MySQL DB exprotiert wurde (da gehts) und die andere Tabelle hab ich mit MySQL CC erstellt (da gehts nicht)
Gibt es noch irgendwelche Parameter die von MySQL CC nicht angezeigt werden?
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Di 09.09.03 13:29 
So, ich hab das Problem zwar jetzt gelöst, verstehen tu ich es aber nicht.
Wenn ich eine Tabelle mit MySQL CC erstelle die eine Blob Spalte enthält und ich versucht von Delphi aus darauf zuzugreifen taucht obenstehehendes Problem auf.

Wenn ich die Tabelle mit Access erstelle (mit Memo Spalte) und über ODBC in MySQL exportiere funktioniert es. In der Tabelle steht die Spalte dann auch als Blob und ich kann zu der anderen Variante keinen Unterschied feststellen.

Wenn ich die mit MySQL CC Tabelle über ODBC in Access importiere wird aus der Blob Spalte ein OLE-Objekt. Ändere ich das in Memo und exportiere die Tabelle wieder gehts.

Warum funktioniert der "reguläre" Weg nicht sondern nur der Umweg über Access und ODBC? Ändert ODBC irgendwie die Daten eines Blob um? Kann sonst noch jemand das nachvollziehn?

Gruß
Markus
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 10:22 
Warum nimmst Du nicht einfach ein Feld vom Typ "TEXT"?

_________________
Ha! Es compiliert! Wir können ausliefern!
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 10.09.03 10:38 
Weil da genau das gleiche passiert. Text ist vom Format her auch ein Blob
Mittlerweile habe ich den MyODBC Treiber im Verdacht. :evil:
Ich vermute, der ändert irgend eine Kleinigkeit um. Es macht zumindest diesen Eindruck.
Zumindest gibt es einen Unterschied zwischen dem Erstellen einer Tabelle ohne ODBC und mit ODBC
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 12:20 
Wie meinst Du das? Text kann eigentlich kein BLOB-Format haben. Was für ein Text ist das denn?

_________________
Ha! Es compiliert! Wir können ausliefern!
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 10.09.03 12:27 
Normale Char, Varchar oder andere Textfelder können meines Wissens nur maximal 256 Zeichen haben. Für das Feld braucht ich aber mehr, und da bleibt nur Blob oder Text. Und das ist im Prinzip das gleiche. Nur der Typ heißt anders
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 12:58 
Nein, ist es nicht. TEXT unterscheidet sich ganz gewaltig von BLOB...

Es gibt zwar Datenbanken, wo das dasselbe ist, bei mySQL ist es das aber nicht.

Und den Text liest Du einfach ein, indem Du ihn in einen umgebrochenen String konvertierst und dann mit

Table1.FieldByName('feldname').AsString := Variable

zuweist.

Viele Grüße,

Matthias

_________________
Ha! Es compiliert! Wir können ausliefern!
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 10.09.03 13:59 
Ja, aber es geht mir im moment nicht um den Typ sondern um die Art und Weise in der die Daten gespeichert werden. Und da sind sich Blob und Text ähnlich.
Es war auch egal ob ich Blob oder Text für die Spalte verwendet habe, es kam immer der oben beschriebene Fehler
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 14:53 
Dann poste mal den Quellcode, wie Du den BLOB übertragen hast.

_________________
Ha! Es compiliert! Wir können ausliefern!
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 15:00 
Ach so, und die Tabellenstruktur wäre noch wichtig.

_________________
Ha! Es compiliert! Wir können ausliefern!
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 10.09.03 15:02 
Da gibts keinen Quellcode. Ich habe die Tabelle entweder mit MySQL CC oder mit Access über MyODBC erstellt.
Zum Auslesen hab ich lediglich ein DBMemo genommen
Zum Testen hab ich eine Tabelle angelegt die nichts anderes enthält als die Blob Spalte
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 15:08 
Ist die Blob-Spalte als NOT NULL oder KEY definiert?

_________________
Ha! Es compiliert! Wir können ausliefern!
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 10.09.03 15:09 
Hab ich alles durchprobiert
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 15:12 
Also ich habs jetzt bei mir mit Feldtyp "TEXT" auf einer 3.23 probiert. Funktioniert einwandfrei.

_________________
Ha! Es compiliert! Wir können ausliefern!
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 10.09.03 15:29 
Zu den Versionen: Ich hab eine 4er MySQL DB (weiß grad nicht genau welche), MyODBC 3.51, Delphi7 Ent und WinXP
Ich hab alles was vom mir kommt auf ein Minimum reduziert um Fehlerquellen auszuschließen. Von mir stammt eigentlich nur eine Tabelle mit einer Spalte (Blob) und ein Delphi Projekt in dem es nur je eine DBTable, DBDataSource und DBMemo gibt. Sourecode habe ich keinen dazugefügt und die Möglichen Einstellungen im Objektmanager müsste ich auch schon alle ausprobiert haben.
Fakt ist, das das oben beschriebene Verhalten bei mir nachvollziehbar ist.
Blob Feld mit MySQL CC erstellen und Auslesen in ein DBMemo führt zu obrigem Fehler, Erstellen des Blob Feldes in Access und export über MyODBC funktioniert
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.09.03 15:30 
Probier mal das Feld mit myAdmin (www.myadmin.org) zu füllen.

Wenn das nicht geht, liegts an der mySQL 4, wenns geht, liegts am myODBC.

_________________
Ha! Es compiliert! Wir können ausliefern!
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 10.09.03 16:36 
Lies mal die Fehlermeldung genau: "Für diese Operation ist eine Nicht-BLOB-SPalte in der Tabelle erforderlich"
Vielleicht solltest Du diesem Hinweis mal Folge leisten und z.B. einen Primary Key einbauen?
burli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Mi 10.09.03 16:44 
Ich hatte auch schon Tabellen mit Key.
Für mich ist der Fall eigentlich klar. MyODBC scheint hier irgendwas nicht 100% umzusetzen. Ich sehe sonst keine andere Möglichkeit. Hab sonst schon alles andere ausgeschlossen was mir eingefallen ist