如何在DELPHI中使用原生ADO,进行存取长二进制数据?

mrchen_fj 2003-12-04 06:38:03
请教各位大虾:
在ORACLE9I中,有一表,其中有一字段为长二进制类型,如何利用原生ADO进行存取?
最好给段DEMO。
谢谢!
...全文
87 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hthunter 2003-12-05
  • 打赏
  • 举报
回复
SeaWave(NoSound)你的方法效率比较低,因为两次对同一个大容量的数据进行操作(LoadFromFile和Move),用TBlobField的话只需要进行一次操作(LoadFromFile或者LoadFromStream)。
TBlobField(ADODataSet1.FieldByName(sFieldName)).LoadFromFile(sFileName);
//or LoadFromStream,取数据时是SaveToFile或者SaveToStream
SeaWave 2003-12-04
  • 打赏
  • 举报
回复
用VarArray就行啦,下面这个DEMO把任意文件存进去
var
p: Pointer;
v: Variant;
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
try
ms.LoadFromFile('c:\tmp.bin');
v := VarArrayCreate([0,ms.Size-1], varByte);
p := VarArrayLock(v);
try
Move(ms.Memory^, p^, ms.Size);
finally
VarArrayUnlock(v);
end;
finally
ms.Free;
end;
ADOCommand1.CommandText := 'insert into MyTable (MyField) values (:@V)';
ADOCommand1.Parameters.ParamByName('@V').Value := v;
ADOCommand1.Execute;
end;
cutelocust 2003-12-04
  • 打赏
  • 举报
回复
李维的书上讲过,好像是Ado/Mts/COM+什么的,你自己看看吧
hthunter 2003-12-04
  • 打赏
  • 举报
回复
不需要用原生ADO也可以进行二进制数据的存取啊,用TBlobField的相关方法就行了
或者你非要用原生ADO的话,可以参考李维写的《DELPHI5数据库开发技术》(不知道我有没有记错书名)

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧