Autor Beitrag
sunnyandy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Di 09.10.07 01:44 
Hallo!

Ich benutze die Ado-Komponenten, um auf eine Ms Sql-Server DB zuzugreifen.

Um meine Sql-Abfragen abzuschicken, benutze ich das TAdoCommand-Objekt.
ausblenden 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;

// Hier Stream öffnen

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: 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 weiter. Auf diese Art haben es die meisten Datenbakkomponenten mit denen ich bisher arbeitete gelöst.

critter

_________________
Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
sunnyandy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Di 09.10.07 19:32 
Hallo,
danke für die Antwort.

Habe nun selbst die Lösung gefunden. Natürlich geht es mit der Tadocommand, ein Blob Feld zu speichern:
Jeder Parameter stellt die Methode LoadFromStream zur Verfügung, damit hat sich das Problem gelöst :lol:

Es war also doch einfacher, als ich gedacht habe...