我有一个简单的基本问题,我正在尝试使用Insert
语句将图像插入数据库,而其他列值也使用TADOQuery
组件。
由于代码已经由某人编写,因此我想在此处放置一些虚拟示例代码,以便您通过相应的步骤进行澄清。
请注意,这与组件一起工作得很好TQuery
,因为我正在用组件替换TQuery
,TADOQuery
所以我必须只使用组件来做同样的事情TADOQuery
。
相同的代码应该适用于 SQL Server 和 Oracle 数据库。
我试图在其中插入图像的列的数据类型VarBinary
是 SQL Server 数据库中的类型。
使用 TQuery 将图像插入表中
使用创建图像
TImage
。msBinImgStream := TMemoryStream.Create; imgCustom := TImage.Create(self); imgJpg := TJPEGImage.Create;
将图像转换为
TJpegImage
并保存为TMemoryStream
.imgJpg.Assign(imgCustom.Picture.Bitmap); imgJpg.SaveToStream(msBinImgStream);
SetBlobdata
使用组件的属性插入数据库TQuery
。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;
现在使用TADOQuery
:
- 能够创建图像。
- 将其转换为 TJpeg 并保存为
TMemoryStream
. 尝试使用将图像插入数据库
LoadFromStream(stream, ftBlob)
但出现错误"String or binary value may be truncated"。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;
请让我知道,用这种方法我应该如何克服这个问题。