Makale numarası: 271483 - Son Gözden Geçirme: 31 Ekim 2003 Cuma - Gözden geçirme: 2.0

SORUN: kısıtlamaları, dışındaki, Microsoft Jet OLE DB sağlayıcısı ile ADOX kullanma

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Belirtiler

Microsoft ActiveX Veri Nesneleri Uzantıları, veri tanımlama dili ve güvenlik (ADOX) için Microsoft Jet veritabanı alt yapısı ile kullanılmak üzere tasarlanmıştır. Bu nedenle, ADOX OLE DB Sağlayıcıları'nın dışındaki, Microsoft Jet OLE DB sağlayıcı kullanarak beklenmeyen bir davranış veya hatalı sonuçlar neden olabilir. Sağlayıcı yazıldığı veritabanı yapısı üzerinde kesin bir davranış bağlıdır. Bir sağlayıcı eriştiği ise, modelidir, Jet, ADOX davranışını tümüyle farklı bir veritabanı sistemi öngörülemeyen olabilir (örneğin, Jet CATALOG veya SCHEMA kavramlarını desteklemez).

Bu makalede, bazı ile bir OLE DB Provider dışındaki, Microsoft Jet OLE DB Provider ADOX'nı kullanmaya çalıştığınızda oluşabilecek bilinen sorunlar listelenmektedir.

Daha fazla bilgi

Aşağıdaki hususları için ADOX ilgili işlevleri:

TABLES derlemesi

ADOX adSchemaTables ve kısıtlama OpenSchema yöntemini ça??r?r. Sonuç olarak, TABLES derlemesi veritabanı kataloglar ve şemalar ne olursa olsun (belirtildiği gibi bağlantı dizesindeki) geçerli kullanıcı için olan tüm tabloları içerir.

SÜTUNSAY derlemesi

ADOX, OpenSchema yöntemi ile bir tablo adı ile adSchemaColumns bir kısıtlama çağırır. Sonucunda, SÜTUNLARıN veritabanı kataloglar ve şemalar ne olursa olsun geçerli kullanıcı için olan bir kısıtlama geçirilen tablo adı eşleşen tüm tabloların sütunları koleksiyonu içerir.

Adlandırma kuralları

ADOX destekleyen tek adlandırma kuralları [object_name] ' dir. Sonuç olarak, farklı şemaları veya kataloglara olan nesneler aynı adı taşıyan ayırt etmek için bir yolu yoktur.

ADOX aşağıdaki adlandırma kurallarını desteklemez:
  • [database_name/catalog_name].[owner_name/schema_name].[object_name]

    -VEYA-

  • [owner_name/schema_name]. [object_name]
Aşağıdaki örnek, "öneki ADOX_TAB" bir şema ya da veritabanı sahibi olmayan bir tablo belirtilmedikçe başarısız olur.

NotKullanıcı KIMLIĞINI değiştirmeniz gerekir = <username>değeri ve parola, bu kodu çalıştırmadan önce = < güçlü parola > değeri için doğru değerler. Bu kullanıcı büyük/küçük harfe dikkat ID veritabanında bu işlemi gerçekleştirmek için uygun izinlere sahiptir.
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
Önceki tüm özellikleri, benzer sorunları oluşturun:

  • Büyük/küçük harf duyarlılığı

    ADOX, normalde büyük/küçük harf duyarlı olan bir Jet için tasarlandığından, büyük/küçük harf duyarlılığı destekleyen veritabanı sistemleriyle Oracle gibi ADOX düzgün çalışmıyor. ADOX, üzerinde belirtilen koleksiyon her zaman büyük/küçük harf duyarlı bir arama yapar.

  • Count özelliği

    Bir tablo adı belirterek, sütun sayısı edinmeye ADOX bakılmaksızın, şemalar ve kataloglar belirtilen tablo adıyla eşleşen tüm tabloların sütunları toplam sayısını döndürür.
    Aşağıdaki örnekte, önceki davranış gösterilmektedir:

    Not: aşağıdaki kodu çalıştırmadan önce gerekli nesneleri veritabanınızda oluşturmalısınız:

    • Oracle için Microsoft OLE DB sağlayıcısı ile sınama, (MSDAORA):

      1. Aşağıdaki gibi bir tablo için 'GÖSTERI' şema veya kullanıcı hesabı oluşturun:
        create table COLTEST(col1 int)
      2. Şimdi 'COLTEST' aynı ada sahip bir tablo başka bir şema ya da kullanıcı hesabı, 'SYSTEM' Örneğin oluşturun:
        create table COLTEST(col1 int, col2 int, col3 int)
      3. Şimdi, GÖSTERI kullanıcıya gibi izinleri:
        grant SELECT on SYSTEM.COLTEST to DEMO
    • Microsoft OLE DB sağlayıcısı ile SQL sınıyorsanız (sunucu SQLOLEDB):

      1. Önce bu kodu kullanın:
        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. Sonra bu kodu kullanın:

        NotKullanıcı KIMLIĞINI değiştirmeniz gerekir = <username>değeri ve parola, bu kodu çalıştırmadan önce = < güçlü parola > değeri için doğru değerler. Kullanıcı KIMLIĞI'in veritabanında bu işlemi gerçekleştirmek için uygun izinlere sahip olduğundan emin olun.
        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 özelliği, adları, karma ya da ADOX büyük/küçük harf duyarlılığı belirtmek için bir mekanizma sağlamaz, çünkü alfabetik büyük/küçük harf alt tablo içermiyor olabilir. ADOX, sağlayıcı için olduğu gibi yalnızca tablo adını geçirir. Örneğin, karışık büyük bir adla oluşturuldu bir Oracle tablo colTEST göz önünde bulundurun. ADOX, tablo adı, çift tırnak içinde büyük/küçük harf duyarlı olmayan bir tablo olarak davran sağlayıcıyı neden almadan colTEST gönderir.

    Bu durumda neden:
    'COLTEST' sütun sayısı = 4

  • Ad olarak dizin oluşturma

    Oracle için ilgili bir senaryoyu düşünün:

    Kullanıcı ' SCOTT 'tablo üretim var' ve 'AFYAMBAR'. <a1>Kullanıcı</a1> 'Can', 'PRod ' ve ' PrOD' tablo vardır. Şimdi, Catalog.Tables("prod") benzer bir ada göre bir tabloya başvuran belirsiz sonucudur. Bu tablo koleksiyonunda sırasını bağlıdır. Hangi tablo, ADOX ilk bulur (büyük/küçük harf duyarlı bir arama kullanarak), başvurulan bilgisayardır.

  • Silme yöntemi:

    Iki tablo 'SATıŞ' ve 'satış', 'GÖSTERI', bir Oracle şemada düşünün. Şimdi, aşağıdaki örnek, 'SATıŞ' veya 'satış' Tablo bırakma, hangisi bulunan ilk TABLES koleksiyonunda ADOX olarak büyük/küçük harf duyarlı bir arama yapar.

    NotKullanıcı KIMLIĞINI değiştirmeniz gerekir = <username>değeri ve parola, bu kodu çalıştırmadan önce = < güçlü parola > değeri için doğru değerler. Bu kullanıcı büyük/küçük harfe dikkat ID veritabanında bu işlemi gerçekleştirmek için uygun izinlere sahiptir.
    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

Referanslar

ADOX hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
198534  (http://support.microsoft.com/kb/198534/EN-US/ ) BILGI: ADO ile 2.1 bileşenleri ADOX Benioku dosyası yer
272001  (http://support.microsoft.com/kb/272001/EN-US/ ) Özellik öznitelikleri ADOX Columns Collection neden hata için yöntem Ekle

Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbcodesnippet kbdatabase kboracle kbprb KB271483 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:271483  (http://support.microsoft.com/kb/271483/en-us/ )
Retired KB ArticleKullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.