文章編號: 271483 - 上次校閱: 2003年10月31日 - 版次: 2.0

PRB: 的 ADOX 使用 Microsoft Jet OLE DB 提供者以外的提供者的限制

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

徵狀

Microsoft ActiveX 資料物件延伸的資料定義語言和安全性 (ADOX) 是為使用所設計,與 Microsoft Jet 資料庫引擎。所以,ADOX 使用 Microsoft Jet OLE DB 提供者以外的 OLE DB 提供者可能會導致未預期的行為或不正確的結果。確切的行為是為其撰寫提供者資料庫的本質而定。如果提供者是存取其模型是完全不同的 Jet ADOX 行為從一個資料庫系統可能無法預測 (比方說 Jet 並不支援的 CATALOG 或 SCHEMA 概念)。

本文列出的一些已知問題當您嘗試使用 ADOX 與一個 OLE DB 提供者以外的 Microsoft Jet OLE DB 提供者時,可能會發生。

其他相關資訊

下列各點與 [ADOX 相關功能:

TABLES 集合

ADOX 呼叫 OpenSchema 方法 adSchemaTables 與不受任何限制。如此一來 TABLES 集合包含目前使用者 (如同在連接字串中指定) 不論資料庫目錄與結構描述可存取的所有資料表。

COLUMNS 集合

ADOX 會呼叫 OpenSchema 方法與 adSchemaColumns 以資料表名稱為一項限制。為結果 [COLUMNS 集合包含所有資料表的符合傳遞做為限制的資料表名稱也就是目前的使用者,不論資料庫目錄與結構描述可存取的所有資料行。

命名慣例

唯一的命名慣例,ADOX 支援是 [object_name]。如此一來沒有任何方法來區別在不同的結構描述或目錄中的物件具有相同名稱。

ADOX 不支援下列命名慣例:
  • [] database_name/catalog_name].[owner_name/schema_name].[object_name

    -或者-

  • [owner_name/schema_name] [object_name]
除非資料表指定為"ADOX_TAB"結構描述或資料庫擁有者沒有做為前置字元,下列範例將會失敗。

附註您必須變更使用者識別碼 = <username>值和密碼 = < 強式密碼 > 的值,以正確的值,才能執行這個程式碼。請確定該使用者 ID 都有適當的權限,可以在資料庫上執行這項作業。
Private Sub Command2_Click()

Dim tbl As New Table
Dim cat2 As New ADOX.Catalog

   cat2.ActiveConnection = "Provider=MSDAORA;" & _
       "Data Source=dseoracle8i;User Id=<username>;password=<strong password>;"
   cat2.Tables.Delete "SCOTT.ADOX_TAB"

End Sub
所有上述功能建立問題類似於:

  • 區分大小寫

    因為 ADOX 設計的是不區分大小寫在本質的 Jet ADOX 運作不正常與支援的大小寫區分的資料庫系統和 Oracle 一樣。ADOX 永遠會讓指定的集合上的不區分大小寫的搜尋。

  • Count 屬性

    當想藉由指定資料表名稱取得資料行的計數 ADOX 會傳回符合指定的資料表名稱,不論目錄和結構描述的所有資料表的所有資料行的總計數。
    下列範例說明上述的行為:

    注意: 您執行下列程式碼之前您必須在您的資料庫中建立必要的物件:

    • 如果針對 Oracle 測試與 Microsoft OLE DB 提供者 (MSDAORA):

      1. '示範' 的結構描述或使用者帳戶建立資料表,如下所示:
        create table COLTEST(col1 int)
      2. 現在,在建立資料表具有相同名稱 'COLTEST' 另一個結構描述或使用者帳戶,'SYSTEM',例如:
        create table COLTEST(col1 int, col2 int, col3 int)
      3. 現在,授權給示範使用者,如下所示:
        grant SELECT on SYSTEM.COLTEST to DEMO
    • 如果測試與 Microsoft OLE DB 提供者為 SQL Server (SQLOLEDB):

      1. 第一次使用此程式碼:
        create table pubs.demo.COLTEST(col1 int)
        
        create table pubs.dbo.COLTEST(col1 int, col2 int, col3 int)
        
        grant SELECT on dbo.COLTEST to DEMO
      2. 接下來,使用這段程式碼:

        附註您必須變更使用者識別碼 = <username>值和密碼 = < 強式密碼 > 的值,以正確的值,才能執行這個程式碼。請確定使用者識別碼有適當的權限,才能執行這項作業在資料庫上。
        Private Sub Command1_Click()
        
        Dim cat1 As New ADOX.Catalog
        Dim tbl1 As ADOX.Table
        Dim col1 As ADOX.Column
        Dim cnt As Integer
        
            cat1.ActiveConnection = "Provider=MSDAORA;" & _
                     "Data Source=dseoracle8i;User Id=<username>;password=<strong password>;"
        
            'To test with SQLOLEDB, comment out the preceding line and uncomment the following line:
            'cat1.ActiveConnection = "Provider=SQLOLEDB.1;" & _
                     "Data Source=SQLSERVER11;User Id=<username>;password=<strong password>;initial catalog=pubs"
        
            For Each tbl1 In cat1.Tables
              If tbl1.Type = "TABLE" Then
               If tbl1.Name = "COLTEST" Then
                  cnt = tbl1.Columns.Count
                  Debug.Print "Column Count of " &"'" & tbl1.Name &"' = " & cnt;
                 End If
               End If
            Next tbl1
        
        End Sub
    Count 屬性可能不包含其名稱中混合或降低字母大小寫,因為 ADOX 並不提供機制來指定區分大小寫的資料表。提供者所顯示的原狀,ADOX 只會傳遞資料表名稱。例如,考慮以混合大小寫名稱建立一個 Oracle 資料表 colTEST。ADOX 會將資料表名稱作為 colTEST 傳送不含封入它在雙引號內會讓提供者,以將它視為不區分大小寫的資料表。

    在這種情況下會造成:
    'COLTEST' 的資料行計數 = 4

  • 依名稱建立索引

    請考慮 Oracle 與相關的案例:

    使用者 'SCOTT 有 prod 資料表'' 和 'PROD'。使用者 'JOHN' 有資料表 'PRod '和' PrOD'。 現在,像 Catalog.Tables("prod") 名稱參考資料表的結果就是不定。它取決於集合中的資料表的順序。無論使用何種 ADOX 尋找第一次的資料表 (使用不區分大小寫的搜尋) 是一個參考。

  • 刪除 方法:

    '示範' 在 Oracle 架構描述中考慮兩個資料表 '銷售' 和 '銷售'。現在,下列的範例可能會卸除 '銷售' 或 '銷售' 資料表,以其中較先發生者找到第一次為 ADOX TABLES 集合中不區分大小寫的搜尋。

    附註您必須變更使用者識別碼 = <username>值和密碼 = < 強式密碼 > 的值,以正確的值,才能執行這個程式碼。請確定該使用者 ID 都有適當的權限,可以在資料庫上執行這項作業。
    Private Sub Command1_Click()
    
    
    Dim tbl As New Table
    Dim cat2 As New ADOX.Catalog
    
       'Open the catalog.
       cat2.ActiveConnection = "Provider=sqloledb;" & _
            "Data Source=jonnakuti9;User Id=<username>;password=<strong password>;initial catalog=pubs"
       
       cat2.Tables.Delete "sales"
    
    End Sub

?考

取得更多資訊有關 ADOX 按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
198534? (http://support.microsoft.com/kb/198534/EN-US/ ) 資訊: ADOX 讀我檔案隨附 ADO 2.1 元件
272001? (http://support.microsoft.com/kb/272001/EN-US/ ) ADOX 資料行集合的屬性屬性可能會造成失敗的 Append 方法

這篇文章中的資訊適用於:
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
關鍵字:?
kbmt kbcodesnippet kbdatabase kboracle kbprb KB271483 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:271483? (http://support.microsoft.com/kb/271483/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。