Hallo zusammen!
Ich bin nun schon seit Tage an einem Problem und finde leider keine Lösung. Ich hoffe, dass von Euch jemand helfen kann.
Ich habe ein MySQL-Tabelle der Form:
Auf diese Tabelle möchte ich mit den ADO-Komponenten zugreifen. Das Problem dabei ist, dass TADOTable das Blob-Feld nicht erkennt:
Table.FieldByName('Daten').IsBlob liefert immer false.
Ich möchte eigentlich nur einen Stream in das Blob-Feld speichern. Scheinbar gibt es dafür n+1 Möglichkeiten (ADOTable, Recordsets, ADOQuery etc.). Ich habe wirklich alle im Netz gefunden Lösungsansätze probiert und nicht einer funktioniert.
Hier der Lösungsansatz, der mit am logischsten erscheint: es wird an eine Prozedur "SaveData" ein Pointer auf einen MemoryStream übergeben. Die Methode soll nun den Inhalt dieses Streams in die Tabelle "TableTest" ins Feld "Daten" speichern --- so der Plan...
Beim der Zeile
TBlobField(Table.Fields.FieldByName('Daten')).Load FromStream(TMemoryStream(Data^));
steigt mir das Programm mit der Exception "ungültige Typumwandlung" aus.
Wäre super, wenn einer von Euch helfen könnte!
Danke im Voraus!
Ich bin nun schon seit Tage an einem Problem und finde leider keine Lösung. Ich hoffe, dass von Euch jemand helfen kann.
Ich habe ein MySQL-Tabelle der Form:
Code:
CREATE TABLE `TableTest` ( `id` int(10) unsigned NOT NULL auto_increment, `Feld1` int(10) unsigned default NULL, `Feld2` int(10) unsigned default NULL, `Daten` blob NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM;
Table.FieldByName('Daten').IsBlob liefert immer false.
Ich möchte eigentlich nur einen Stream in das Blob-Feld speichern. Scheinbar gibt es dafür n+1 Möglichkeiten (ADOTable, Recordsets, ADOQuery etc.). Ich habe wirklich alle im Netz gefunden Lösungsansätze probiert und nicht einer funktioniert.
Hier der Lösungsansatz, der mit am logischsten erscheint: es wird an eine Prozedur "SaveData" ein Pointer auf einen MemoryStream übergeben. Die Methode soll nun den Inhalt dieses Streams in die Tabelle "TableTest" ins Feld "Daten" speichern --- so der Plan...
Beim der Zeile
TBlobField(Table.Fields.FieldByName('Daten')).Load FromStream(TMemoryStream(Data^));
steigt mir das Programm mit der Exception "ungültige Typumwandlung" aus.
Wäre super, wenn einer von Euch helfen könnte!
Danke im Voraus!
Code:
procedure TALTForm.Button1Click(Sender: TObject); var Data : TMemoryStream; Texxt : String; begin Data := TMemoryStream.Create; Data.Clear; Texxt := 'Hallo Welt!'; Data.Write(Texxt,SizeOf(Texxt)); Data.Position := 0; SaveData(@Data); Data.Free; end; procedure SaveData(Data : Pointer); var Table: TADOTable; begin Table := TADOTable.Create(nil); Table.Connection := Database.DB; Table.TableName := 'TableTest'; Table.Filtered := false; Table.Filter := 'idDaten=4'; Table.Filtered := true; Table.Open; Table.First; Table.Edit; TMemoryStream(Data^).Seek(0, soFromBeginning); TBlobField(Table.Fields.FieldByName('Daten')).LoadFromStream(TMemoryStream(Data^)); Table.Post; Table.Free; end;
Comment