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
:
TMemoryStream
.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.