gpt4 book ai didi

oracle - 通过 FireDac 插入到 Oracle Blob 字段

转载 作者:行者123 更新时间:2023-12-02 02:25:16 29 4
gpt4 key购买 nike

我正在使用 FireDac 连接到我的 Oracle 数据库。要插入 blob 字段,我使用以下代码:

procedure TForm1.btn1Click(Sender: TObject);
begin
try
fdqry1.Open('select * from Tbl_Image where length(fld_content) > 0');
try
while not fdqry1.Eof do
begin
fdqry2.Close;
fdqry2.SQL.Text:= 'insert into temp_blob (fld_ID, fld_CONTENT) values(:id, EMPTY_BLOB()) ' +
'RETURNING fld_CONTENT INTO :content';
fdqry2.Params[0].AsInteger:= fdqry1.FieldByName('fld_ID').AsInteger;
fdqry2.Params[1].DataType:= ftOraBlob;
fdqry2.Params[1].AsStream:= fdqry1.CreateBlobStream(fdqry1.FieldByName('fld_CONTENT'), bmRead);
con1.StartTransaction;
fdqry2.ExecSQL;
con1.Commit;
fdqry2.CloseStreams;

fdqry1.Next;
end;
finally
fdqry1.Close;
fdqry2.Close;
end;
except on E: Exception do
begin
con1.Rollback;
ShowMessage(E.Message);
end;
end;
end;

此代码没有错误,但无法运行。为什么目标字段为空?

最佳答案

您将 blob 值分配给代码中的输出参数,因此它不会影响表中 fld_content 列的值。您必须添加第三个参数。

fdqry2.SQL.Text:= 'insert into temp_blob (fld_ID, fld_CONTENT) values(:id, :blob_val)) ' +
'RETURNING fld_CONTENT INTO :content';
fdqry2.Params[0].AsInteger:= fdqry1.FieldByName('fld_ID').AsInteger;
fdqry2.Params[1].DataType:= ftOraBlob;
fdqry2.Params[1].AsStream:= fdqry1.CreateBlobStream(fdqry1.FieldByName('fld_CONTENT'), bmRead);
fdqry2.Params[2].DataType:= ftOraBlob;

关于oracle - 通过 FireDac 插入到 Oracle Blob 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558559/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com