sunnyandy - Di 09.10.07 01:44
Titel: Mit der TAdoCommand eine Binärdatei speichern...
Hallo!
Ich benutze die Ado-Komponenten, um auf eine Ms Sql-Server DB zuzugreifen.
Um meine Sql-Abfragen abzuschicken, benutze ich das TAdoCommand-Objekt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var fs: TFileStream; puffer: Array of Byte; begin FAdoCommand := TADOCommand.Create(nil); FAdoCommand.Connection := AdoConnection; FAdoCommand.CommandText := 'insert into vertrag (id, datei) VALUES (123, :datei)'; FAdoCommand.CommandType := cmdText;
FADOCommand.Parameters.ParamByName('datei').DataType := ftBLob; FADOCommand.Parameters.ParamByName('datei').Direction := pdInput;
fs := TFileStream.Create('j:\test.bmp', fmOpenRead); fs.Read(Pointer(puffer)^, fs.Size);
FADOCommand.Parameters.ParamByName('datei').Value := puffer; FAdoCommand.Execute... |
Wenn ich das ausführe, öffnet Delphi zur Laufzeit das Cpu-Fenster, weil dort irgendein Fehler auftritt.
Ich habe mehrere Stunden im Netz gesucht, überall finde ich Anleitungen und Beispiele, wie ich das Abspeichern in ein Image-Feld per AdoQuery oder AdoDataSet machen kann.
Aber es muss doch auch mit der AdoCommand möglich sein oder?
Ich weiß leider nicht, ob das Pointer(puffer)^ überhaupt so richtig ist :oops: Habe Pointer bisher wirklich gemieden und weiß nicht so Recht, damit umzugehen.
Vielleicht habt ihr ja ein paar gute Tipps.
Danke! Andy
Critter - Di 09.10.07 14:51
Hi,
in der Regel wird von den Komponentenherstellen ein eigener BlobStream zur verfügung gestellt. Ich weiß momentan nicht wie das bei den ADO Komponenten aussieht aber vielleicht gibt es da einen tAdoBlobStream oder so. Dann kannst du dir den Umweg über den puffer sparen, bzw. einen beser definierten weg gehen.
Eventuell hilft dir
dieses Schema [
http://delphi.about.com/od/database/a/record2blob.htm] weiter. Auf diese Art haben es die meisten Datenbakkomponenten mit denen ich bisher arbeitete gelöst.
critter