C++Builder/Delphi 通過 ADO 存取Oracle 的 Blob 欄位

來源:互聯網
上載者:User
今天報表組的人說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 }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.