ID do artigo: 271483 - Última revisão: sexta-feira, 31 de outubro de 2003 - Revisão: 2.0

PROBLEMA: Limitações do uso do ADOX com provedores que que o Microsoft Jet OLE DB Provider

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 | Recolher tudo

Sintomas

Microsoft ActiveX Data Objects extensões para Data Definition Language e Security (ADOX) foi projetada para uso com o Microsoft Jet Database Engine. Portanto, a utilização ADOX com provedores OLE DB diferente do Microsoft Jet OLE DB Provider pode causar um comportamento inesperado ou resultados incorretos. O comportamento exato depende da natureza do banco de dados para o qual o provedor foi redigido. Se um provedor é acessa um sistema de banco de dados cujo modelo é totalmente diferente do Jet, o comportamento do ADOX pode ser imprevisível (por exemplo, Jet não suporta os conceitos de CATALOG ou SCHEMA).

Este artigo lista alguns dos problemas conhecidos que podem ocorrer ao tentar usar ADOX com um provedor OLE DB diferente do Microsoft Jet OLE DB Provider.

Mais Informações

Os pontos a seguir estão relacionados ao ADOX funcionalidade:

coleção TABLES

O ADOX chama o método OpenSchema com adSchemaTables e sem restrições. Como resultado, a coleção TABLES inclui todas as tabelas acessíveis ao usuário atual (conforme especificado na seqüência de conexão), independentemente de catálogos de banco de dados e esquemas.

coleção COLUMNS

O ADOX chama o método OpenSchema com adSchemaColumns com apenas um nome de tabela como uma restrição. Como resultado, os COLUMNS coleção inclui todas as colunas de todas as tabelas que correspondem ao nome da tabela passado como uma restrição, que são acessíveis para o usuário atual, independentemente de catálogos de banco de dados e esquemas.

convenção de nomeação

A convenção de nomenclatura somente que oferece suporte a ADOX é [NomeDoObjeto]. Como resultado, não é possível para diferenciar os objetos com o mesmo nome que estão em diferentes esquemas ou catálogos.

O ADOX não dá suporte as convenções de nomenclatura a seguir:
  • [database_name/catalog_name].[owner_name/schema_name].[object_name]

    - ou -

  • [owner_name/schema_name]. [NomeDoObjeto]
O exemplo a seguir falhará a menos que uma tabela é especificada como "ADOX_TAB" sem um proprietário de banco de dados do esquema ou precedidos.

Observação <username>Você deve alterar a identificação do usuário = valor <nomedousuário> e a senha = < senha de alta segurança > valor para os valores corretos antes de executar esse código. Certifique-se de que usuário ID tem as permissões apropriadas para executar esta operação no banco 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
Todos os recursos anteriores criar problemas semelhante para:

  • diferenciação de maiúsculas e minúsculas

    Como o ADOX foi projetado para Jet, que diferencia por natureza, ADOX não funciona corretamente com sistemas de banco de dados como Oracle que oferecem suporte à diferenciação de maiúsculas e minúsculas. O ADOX sempre faz uma pesquisa não diferencia maiúsculas de minúsculas na coleção especificada.

  • propriedade Count

    Quando você tenta obter uma contagem de colunas, especificando um nome de tabela, ADOX retorna uma contagem total de todas as colunas de todas as tabelas corresponder ao nome tabela especificada, independentemente de catálogos e esquemas.
    O exemplo a seguir ilustra o comportamento anterior:

    Observação : antes de você executar o código seguinte, você deve criar os objetos necessários no seu banco de dados:

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

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

      1. Use 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, use este código:

        Observação <username>Você deve alterar a identificação do usuário = valor <nomedousuário> e a senha = < senha de alta segurança > valor para os valores corretos antes de executar esse código. Certifique-se que a ID de usuário tenha as permissões apropriadas para executar esta operação no banco 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 não pode incluir tabelas cujos nomes estão no misturados ou inferior em ordem alfabética caso pois ADOX não fornece um mecanismo para especificar diferenciação de maiúsculas e minúsculas. ADOX somente passa o nome da tabela como ele é o provedor. Por exemplo, considere um colTEST de tabela do Oracle foi criado com um nome de ocorrência misto. ADOX envia o nome da tabela como colTEST sem envolve em aspas duplas, que faz com que o provedor para tratá-la como uma tabela não diferencia maiúsculas de minúsculas.

    resultar nesse caso:
    Número de colunas do 'COLTEST' = 4

  • indexação por nome

    Considere um cenário relacionado ao Oracle:

    Usuário ' SCOTT 'tem produto tabelas' ' e 'Produto'. Usuário 'JOÃO' tem tabelas 'Produto ' e ' produto'. Agora, o resultado de uma tabela de referência por nome como Catalog.Tables("prod") é indeterminado. Ele depende da ordem do tabelas na coleção. Qualquer tabela ADOX localiza primeiro (usando uma pesquisa não diferencia maiúsculas de minúsculas) é o que é referenciado.

  • Excluir método:

    Considere duas tabelas 'Vendas' e 'vendas' em um esquema Oracle 'Demonstração'. Agora, o exemplo a seguir pode descartar a tabela 'Venda' ou 'venda', que é encontrado na coleção TABLES como ADOX faz uma pesquisa não diferencia maiúsculas de minúsculas.

    Observação <username>Você deve alterar a identificação do usuário = valor <nomedousuário> e a senha = < senha de alta segurança > valor para os valores corretos antes de executar esse código. Certifique-se de que usuário ID tem as permissões apropriadas para executar esta operação no banco 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 abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
198534  (http://support.microsoft.com/kb/198534/EN-US/ ) INFO: Arquivo Leiame ADOX incluído com o ADO 2.1 componentes
272001  (http://support.microsoft.com/kb/272001/EN-US/ ) Atributos de propriedade de coleção de colunas do ADOX pode causa acrescentar método para falha

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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 ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.