Artigo: 271483 - Última revisão: sexta-feira, 31 de Outubro de 2003 - Revisão: 2.0

PROBLEMA: Limitações da utilização de ADOX com fornecedores que do fornecedor de OLE DB do Microsoft Jet

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sintomas

As extensões de objectos do ActiveX Data para linguagem de definição de dados e Security (ADOX) foi concebida para utilização com o motor de base de dados Microsoft Jet. Assim, utilizar ADOX com fornecedores de OLE DB diferente do Microsoft Jet OLE DB Provider pode provocar um comportamento inesperado ou incorrectos. O comportamento exacto está dependente a natureza da base de dados para o qual o fornecedor destina-se. Se um fornecedor é acessos um sistema de base de dados cujo modelo é totalmente diferente do Jet, o comportamento de ADOX poderia ser imprevisível (por exemplo, Jet não suporta os conceitos de CATALOG ou SCHEMA).

Este artigo lista alguns dos problemas conhecidos que poderão ocorrer quando tenta utilizar ADOX com um fornecedor de OLE DB diferente do Microsoft Jet OLE DB Provider.

Mais Informação

Os seguintes aspectos relacionados com o ADOX funcionalidade:

colecção de tabela

ADOX chama o método OpenSchema com adSchemaTables e sem restrições. Como resultado, a colecção de tabela inclui todas as tabelas acessíveis ao utilizador actual (tal como especificado na cadeia de ligação) independentemente de catálogos de base de dados e esquemas.

cols colecção

ADOX chama o método OpenSchema com adSchemaColumns com apenas um nome da tabela como uma restrição. Como resultado, os COLS colecção inclui todas as colunas de todas as tabelas que correspondam ao nome da tabela transmitido como uma restrição, que são acessíveis ao utilizador actual independentemente de catálogos de base de dados e esquemas.

convenção de nomenclatura

A convenção de nomenclatura só que suporta ADOX é [nome_objecto]. Como resultado, não é possível distinguir objectos com o mesmo nome que estão no esquemas diferentes ou catálogos.

ADOX não suporta as seguintes convenções de nomenclatura:
  • [database_name/catalog_name].[owner_name/schema_name].[object_name]

    - ou -

  • [owner_name/schema_name]. [nome_objecto]
O exemplo seguinte falha, excepto se uma tabela for especificada como "ADOX_TAB" sem um proprietário de esquema ou base de dados como prefixo.

Nota <username>Tem de alterar o ID de utilizador = valor <utilizador> e a palavra-passe = valor < palavra-passe segura > para os valores correctos antes de executar este código. Certifique-se esse utilizador ID tem as permissões adequadas para efectuar esta operação na base de dados.
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
Todas as funcionalidades anteriores criar problemas semelhantes:

  • distinção entre maiúsculas e minúsculas

    Uma vez que ADOX foi concebido para o Jet, que é sensíveis a maiúsculas e minúsculas de natureza, ADOX não funciona correctamente com sistemas de base de dados como Oracle que suportam a distinção entre maiúsculas e minúsculas. ADOX faz sempre uma pesquisa não sensível a maiúsculas e minúsculas na colecção especificada.

  • número de propriedades

    Quando tenta obter uma contagem de colunas, especificando um nome de tabela, ADOX devolve uma contagem total de todas as colunas de todas as tabelas que corresponde ao nome tabela especificada independentemente do catálogos e esquemas.
    O exemplo seguinte ilustra o comportamento anterior:

    Nota : antes de executar o seguinte código, tem de criar objectos necessários na base de dados:

    • Se testar com o Microsoft OLE DB Provider para Oracle (MSDAORA):

      1. Criar uma tabela maneira na conta de utilizador ou de esquema 'Demonstração':
        create table COLTEST(col1 int)
      2. Agora, crie uma tabela com o mesmo nome 'COLTEST' no outra esquema ou conta de utilizador, 'SYSTEM' por exemplo:
        create table COLTEST(col1 int, col2 int, col3 int)
      3. Agora, conceder permissões de utilizador de demonstração da seguinte forma:
        grant SELECT on SYSTEM.COLTEST to DEMO
    • Se testar com o Microsoft OLE DB Provider para SQL Server (SQLOLEDB):

      1. Utilize este código primeiro:
        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. Em seguida, utilize este código:

        Nota <username>Tem de alterar o ID de utilizador = valor <utilizador> e a palavra-passe = valor < palavra-passe segura > para os valores correctos antes de executar este código. Certifique-se que o ID de utilizador tem as permissões adequadas para efectuar esta operação na base de dados.
        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
    A propriedade Count pode não incluir tabelas cujos nomes são em misto ou diminua caso alfabético porque ADOX não fornece um mecanismo para especificar a distinção entre maiúsculas e minúsculas. ADOX transmite apenas o nome da tabela tal como está para o fornecedor. Por exemplo, considere uma colTEST tabela Oracle que foi criado com um nome caso misto. ADOX envia o nome da tabela como colTEST sem envolvente-lo entre aspas, que faz com que o fornecedor tratar como uma tabela não sensível a maiúsculas e minúsculas.

    fazer neste caso:
    Número de colunas do 'COLTEST' = 4

  • indexação por nome

    Considere um cenário relacionados com a Oracle:

    Utilizador ' SCOTT 'tem prod dos tabelas' e 'Produto'. Utilizador 'MARIA' tem tabelas 'Produto ' e ' Produto'. Agora, o resultado de uma tabela de referência por nome como Catalog.Tables("prod") é indeterminada. Depende na ordem dos tabelas na colecção. Que tabela ADOX localiza primeiro (utilizando uma procura não sensível a maiúsculas e minúsculas) é aquele que é referenciado.

  • Eliminar método:

    Considere duas tabelas 'Vendas' e 'Venda' de um esquema de Oracle 'Demonstração'. Agora, o exemplo que se segue poderá abandonar a tabela 'Venda' ou 'Venda', que encontra-se primeiro na tabela colecção como ADOX efectua uma pesquisa não sensível a maiúsculas e minúsculas.

    Nota <username>Tem de alterar o ID de utilizador = valor <utilizador> e a palavra-passe = valor < palavra-passe segura > para os valores correctos antes de executar este código. Certifique-se esse utilizador ID tem as permissões adequadas para efectuar esta operação na base de dados.
    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

Referências

Para obter informações adicionais sobre ADOX, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
198534  (http://support.microsoft.com/kb/198534/EN-US/ ) INFO: Ficheiro Leia-me ADOX incluídos com o ADO 2.1 Components
272001  (http://support.microsoft.com/kb/272001/EN-US/ ) Atributos de propriedade do conjunto de colunas ADOX pode causa actualizar método para falhas

A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbmt kbcodesnippet kbdatabase kboracle kbprb KB271483 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 271483  (http://support.microsoft.com/kb/271483/en-us/ )
Retired KB ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.