如何在DELPHI中使用原生ADO,进行存取长二进制数据?
请教各位大虾:
在ORACLE9I中,有一表,其中有一字段为长二进制类型,如何利用原生ADO进行存取?
最好给段DEMO。
谢谢!
问题点数:0、回复次数:4Top
1 楼hthunter(茫茫然时光飞逝)回复于 2003-12-04 20:05:12 得分 0
不需要用原生ADO也可以进行二进制数据的存取啊,用TBlobField的相关方法就行了
或者你非要用原生ADO的话,可以参考李维写的《DELPHI5数据库开发技术》(不知道我有没有记错书名)Top
2 楼cutelocust(涉水而来)回复于 2003-12-04 20:18:53 得分 0
李维的书上讲过,好像是Ado/Mts/COM+什么的,你自己看看吧Top
3 楼SeaWave(NoSound)回复于 2003-12-04 20:29:02 得分 0
用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;
Top
4 楼hthunter(茫茫然时光飞逝)回复于 2003-12-05 11:24:48 得分 0
SeaWave(NoSound)你的方法效率比较低,因为两次对同一个大容量的数据进行操作(LoadFromFile和Move),用TBlobField的话只需要进行一次操作(LoadFromFile或者LoadFromStream)。
TBlobField(ADODataSet1.FieldByName(sFieldName)).LoadFromFile(sFileName);
//or LoadFromStream,取数据时是SaveToFile或者SaveToStreamTop




