C++Builder/Delphi 通过 ADO 存取Oracle 的 Blob 字段

今天报表组的人说CB5里用ADO读取Oracle的Blob字段报错,于是我试了试,还真是这样,错误信息是“数据类型不被支持”。
我又试了试Delphi7,也是一样的错。
我想,BCB/Delphi的ADO是封装过了,会不会是封装得有问题?
于是跑到VB下写了个Demo,居然成功了~看来真的是封装的问题。
看来只有通过OLE直接操纵ADO了,写了段代码,试了试,也成功了
BCB代码如下:
 1  void  __fastcall TForm1::Button1Click(TObject  * Sender)
 2  {
 3       const  AnsiString sql  =   " SELECT * FROM Table WHERE ROWNUM <= 1 " ;
 4 
 5      Variant Conn;
 6      Variant ResultSet;
 7      Variant ResultField;
 8      Variant Size, Value;
 9 
10      Conn  =  Variant::CreateObject( " adodb.connection " );
11      Conn.OlePropertySet( " Provider " " OraOLEDB.Oracle " );
12      Conn.OleFunction( " Open " " Database " " UserName " " Password " );
13 
14      ResultSet  =  Variant::CreateObject( " adodb.recordset " );
15      ResultSet.OleFunction( " Open " , sql, Conn,  0 1 );
16      ResultField  =  ResultSet.OlePropertyGet( " Fields " " FieldNameOrIndex " );
17      Size   =  ResultField.OlePropertyGet( " ActualSize " );
18      Value  =  ResultField.OleFunction( " GetChunk " , Size);
19 
20       void *  Data  =  NULL;
21      SafeArrayAccessData(Value.parray,  & Data);
22       try
23      {
24          TFileStream *  Stream  =   new  TFileStream( " C:\\blob.txt " , fmCreate);
25           try
26          {
27              Stream -> Write(Data, Size);
28          } __finally {
29              delete Stream;
30          }
31      } __finally {
32          SafeArrayUnaccessData(Value.parray);
33      }
34  }


转载于:https://www.cnblogs.com/sephil/archive/2006/06/30/ADO_Oracle.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值