Jak wstawić obraz do bazy danych za pomocą TADOQuery Component Only
Mam jeden prosty podstawowy problem, próbuję wstawić obraz do bazy danych za pomocąInsert
instrukcja z innymi wartościami kolumn również używającymiTADOQuery
składnik.
Ponieważ kod jest już napisany przez kogoś, jakiś fikcyjny przykładowy kod, który chciałbym tutaj umieścić, aby wyjaśnić poszczególne kroki.
Pamiętaj, że to działało dobrzeTQuery
komponent, ponieważ zastępujęTQuery
zTADOQuery
komponent, muszę zrobić to samoTADOQuery
tylko komponent.
Ten sam kod powinien działać zarówno dla SQL Server, jak i baz danych Oracle.
Typ danych kolumny, w której próbuję wstawić obraz, jest typuVarBinary
w bazie danych SQL Server.
Wstawianie obrazu do tabeli za pomocą TQuery
Tworzenie obrazu za pomocąTImage
.
msBinImgStream := TMemoryStream.Create;
imgCustom := TImage.Create(self);
imgJpg := TJPEGImage.Create;
Konwersja obrazu naTJpegImage
i oszczędzanie naTMemoryStream
.
imgJpg.Assign(imgCustom.Picture.Bitmap);
imgJpg.SaveToStream(msBinImgStream);
Wstawianie do bazy danych za pomocąSetBlobdata
własnośćTQuery
składnik.
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;
Teraz robię to samo, używającTADOQuery
:
TMemoryStream
.Próba wstawienia obrazu do bazy danych za pomocąLoadFromStream(stream, ftBlob)
ale pojawia się błąd„Łańcuch lub wartość binarna mogą być obcięte”.
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;
Daj mi znać, dzięki temu podejściu, jak mam rozwiązać ten problem.