我有一个简单的基本问题,我正在尝试使用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;
请让我知道,用这种方法我应该如何克服这个问题。