FIX: IN 和 UNION 子句產生不正確的資料行計數

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:283842
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
與 Microsoft OLE DB 提供者對於 Oracle (MSDAORA),包含 IN 和 UNION 子句的 SQL 陳述式執行可能會產生 ActiveX 資料物件 (ADO) 資料錄集 物件,其中包含資料行數目不正確。

當使用 ADO 用戶端資料指標 (亦即 [CursorLocation] 屬性設定為 [adUseClient) 時,就會發生這個問題,但在使用伺服器端資料指標的運作正常。
解決方案
如果要解決這個問題,取得最新的 Service Pack 的 Microsoft MDAC 2.5。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
293312資訊: 如何取得最新的 MDAC 2.5 Service Pack
如果要解決這個問題,取得最新的 Service Pack 的 Microsoft 資料存取元件 2.6。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
300635資訊: 如何取得最新的 MDAC 2.6 Service Pack

Hotfix

此修正程式的英文版應該具有下列檔案屬性或更新版本:
   Version       Size      File name     Platform   -------------------------------------------------------   2.53.6007.0   209,168   Msdaora.dll   x86				
其他可行方案
沒有發生此問題,如果您使用伺服器端資料指標 ; CursorLocation 屬性設為 [adUseServer
狀況說明
Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的問題。 這個問題,首先已經在 Microsoft 資料存取元件 2.6 Service Pack 2、 MDAC 2.5 SP3 和 MDAC 2.7 中獲得修正。
其他相關資訊

重製行為的步驟

  1. 在新的 Visual Basic 專案中加入下列程式碼,並設定到 Microsoft ActiveX 資料物件 2.5 檔案庫的專案參考:
    Private Sub Command1_Click()    Dim cn As New ADODB.Connection    Dim rs As New ADODB.Recordset    cn.Open "Provider=MSDAORA;Data Source=your_oracle_server;User ID=your_user_name;Password=your_password"    On Error Resume Next    cn.Execute "Drop table oratest"    cn.Execute "CREATE TABLE ORATEST(Col1 VARCHAR2(10) NULL," & _               "Col2 VARCHAR2(10) NULL)"    cn.Execute "insert into oratest values(7,7)"    cn.Execute " insert into oratest values(6,6)"    cn.Execute "Drop table DUAL"    cn.Execute "CREATE TABLE DUAL(C11 VARCHAR2(10) NULL," & _               "C12 VARCHAR2(10) NULL)"    cn.Execute "insert into dual values(6,7)"    rs.CursorLocation = adUseClient    rs.Open "select col1, col2 from oratest where col1 in (Select C11 from dual union select C12 from dual)", _            cn, adOpenStatic,adLockBatchOptimistic        Debug.Print rs.Fields.Count      '<--- incorrect column count           Debug.Print rs.Fields(0).Name    Debug.Print rs.Fields(1).NameEnd Sub					
  2. 您在執行上述的專案時則會顯示資料行中不正確的數目。您可能也會看到錯誤物件已開啟 「 您觀察到 Visual Basic 監看式] 視窗中的資料錄集的欄位計數。在這種情況下線條"Debug.Print rs.Fields.Count 」 就不列印出來即時運算視窗中的任何結果。

內容

文章識別碼:283842 - 最後檢閱時間:01/05/2015 12:56:37 - 修訂: 6.1

Microsoft OLE DB Provider for Oracle Server 1.0, Microsoft OLE DB Provider for Oracle Server 1.0, Microsoft Data Access Components 2.5, Microsoft Data Access Components 2.5 Service Pack 1, Microsoft Data Access Components 2.6

  • kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260sp2fix kboracle kbprovider KB283842 KbMtzh
意見反應