Cómo insertar una imagen en la base de datos usando solo el componente TADOQuery
Tengo un problema fundamental simple, estoy tratando de insertar una imagen en la base de datos usandoInsert
declaración con otros valores de columna también utilizandoTADOQuery
componente.
Dado que el código ya está escrito por alguien, algún código de ejemplo ficticio me gustaría poner aquí para su aclaración con los pasos respectivos.
Tenga en cuenta que esto estaba funcionando bien conTQuery
componente, ya que estoy reemplazandoTQuery
conTADOQuery
componente, debo hacer lo mismo usandoTADOQuery
solo componente
El mismo código debería funcionar tanto para SQL Server como para las bases de datos Oracle.
El tipo de datos de la columna en la que estoy tratando de insertar la imagen es de tipoVarBinary
en la base de datos de SQL Server.
Insertando una imagen en la tabla usando TQuery
Creando una imagen usandoTImage
.
msBinImgStream := TMemoryStream.Create;
imgCustom := TImage.Create(self);
imgJpg := TJPEGImage.Create;
Convertir la imagen aTJpegImage
y guardando paraTMemoryStream
.
imgJpg.Assign(imgCustom.Picture.Bitmap);
imgJpg.SaveToStream(msBinImgStream);
Insertando en la base de datos usandoSetBlobdata
propiedad deTQuery
componente.
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;
Ahora haciendo lo mismo usandoTADOQuery
:
TMemoryStream
.Tratando de insertar la imagen en la base de datos usandoLoadFromStream(stream, ftBlob)
pero obteniendo un error"La cadena o el valor binario pueden estar truncados".
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;
Por favor, avíseme, con este enfoque cómo debo superar este problema.