So fügen Sie ein Bild nur mit TADOQuery Component in eine Datenbank ein

Ich habe ein einfaches Grundproblem: Ich versuche, ein Bild mit in die Datenbank einzufügenInsert Anweisung mit anderen Spaltenwerten auch mitTADOQuery Komponente.

Da der Code bereits von jemandem geschrieben wurde, möchte ich hier einen Dummy-Beispielcode zur Verdeutlichung der jeweiligen Schritte einfügen.

Bitte beachten Sie, dass dies gut funktioniert hatTQuery Komponente, da ich ersetzeTQuery mitTADOQuery komponente muss ich gleich mit machenTADOQuery nur Komponente.

Der gleiche Code sollte sowohl für SQL Server- als auch für Oracle-Datenbanken funktionieren.

Der Datentyp der Spalte, in die ich das Bild einfügen möchte, ist vom TypVarBinary in der SQL Server-Datenbank.

Einfügen eines Bildes in eine Tabelle mit TQuery

Erstellen eines Bildes mitTImage.

msBinImgStream := TMemoryStream.Create; 
imgCustom := TImage.Create(self); 
imgJpg := TJPEGImage.Create; 

Konvertieren des Bildes inTJpegImage und speichern zuTMemoryStream.

imgJpg.Assign(imgCustom.Picture.Bitmap); 
imgJpg.SaveToStream(msBinImgStream);

Einfügen in die Datenbank mitSetBlobdata Eigentum vonTQuery Komponente.

sSql := 'INSERT INTO Table_Name(Column1, Column2, Column_Image) VALUES ( ''' + Value1 + ''', ''' + Value2 + ''', :pBlob)'; 
qryTQuery.SQL.Add(sSQL); 
qryTQuery.ParamByName('pBlob').SetBlobData(msBinImgStream.Memory, msBinImgStream.Size); 
qryTQuery.ExecSQL; 

Tun Sie jetzt dasselbe mitTADOQuery:

Kann das Bild erstellen.Konvertieren Sie es in TJpeg und speichern Sie es inTMemoryStream.

Es wurde versucht, das Bild mit in die Datenbank einzufügenLoadFromStream(stream, ftBlob) aber einen Fehler bekommen"Zeichenfolge oder Binärwert werden möglicherweise abgeschnitten".

sSql := 'INSERT INTO Table_Name(Column1, Column2, Column_Image) VALUES ( ''' + Value1 + ''', ''' + Value2 + ''', :pBlob)'; 
qryADOQuery.SQL.Add(sSQL); 
qryADOQuery.Parameters.ParamByName('pBlob').LoadFromStream(msBinImgStream, ftBlob); 
qryADOQuery.ExecSQL; 

Bitte lassen Sie mich mit diesem Ansatz wissen, wie ich dieses Problem lösen soll.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage