VB - ADO - Obtendo informações sobre a fonte dos dados


Trabalhando com esquemas

Se quisermos obter informações sobre uma base de dados access (nome das tabelas, dos campos, etc..) podemos usar os objetos da DAO ( Fields, TableDefs , etc..) ou a própria ADO. Mas oque acontece se estivermos usando um provedor OLE DB para acessar uma fonte de dados e não temos informação sobre campos e tabelas ? Desde de que a ADO atua sob a camada OLE DB para obtermos esta informação teremos que obtê-la do provedor OLE DB. E como fazer isto ? Bem, para fazer isto usamos o método OpenSchema do objeto Connection.

Usando o método OpenSchema podemos obter informações sobre uma fonte de dados com a qual estivermos conectados : tabelas , colunas ,etc...

A sintaxe usada é a seguinte:

Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)

QueryType é o tipo de da consulta a processar.Os tipos possíveis estão no link : tipos de esquemas

Criteria .Um vetor com valores relacionados a QueryTpe . Para ver os valores Clique no link : valores de criteria.

O Valor retornado é um objeto Recordset que contém um esquema com as informações sobre o provedor.

Se você ainda não entendeu , calma que com o exemplo que iremos mostrar as coisas ficarão mais claras. Por questão de simplicidade e para tornar acessível o nosso exemplo a todos iremos mostrar como obter informações de um provedor OLE DB em uma conexão com uma base de dados access - Nwind.mdb que no nosso exemplo esta localizada no diretório c:\teste. O resultado será impresso na janela de depuração (Debug Window)

Vamos arregaçar as mangas:

  1. Crie um projeto padrão no Visual Basic(standard Exe) e no formulário padrão(form1) insira um botão de comando (command1). (Não esqueça de referenciar a ADO no projeto)
  2. No evento click do botão de comando insira o seguinte código:
Private Sub Command1_Click()
Dim adoConnection As ADODB.Connection
Dim adoRsFields As ADODB.Recordset
Dim sConnection As String
Dim sCurrentTable As String
Dim sNewTable As String

Set adoConnection = New ADODB.Connection
sConnection = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\teste\Nwind.mdb"
adoConnection.Open sConnection
Set adoRsFields = adoConnection.OpenSchema(adSchemaColumns)

sCurrentTable = ""
sNewTable = ""

Do Until adoRsFields.EOF

sCurrentTable = adoRsFields!TABLE_NAME

If (sCurrentTable <> sNewTable) Then

    sNewTable = adoRsFields!TABLE_NAME
    Debug.Print "Nome da Tabela : " & adoRsFields!TABLE_NAME

End If

Debug.Print " Campo: " & adoRsFields!COLUMN_NAME

adoRsFields.MoveNext

Loop

adoRsFields.Close
Set adoRsFields = Nothing
adoConnection.Close
Set adoConnection = Nothing

End Sub
  1. Execute o projeto e a seguir clique no botão de comando e verá as informações sobre a base de dados Nwind.mdb na janela de depuração.

Observe a simplicidade do código . Não achou simples ? Então tente fazer usando a DAO.

Existem muitas constantes que podem ser usadas para obtermos informações , no exemplo acima usamos a constante adSchemacolumns para retornar o nome da tabela(TABLE_NAME) e das colunas (campos) (COLUMN_NAME)

O projeto em tempo de execução O resultada na janela de depuração

Você irá perceber que existem algumas tabelas com nomes estranhos tais como: MSysIMEXColumns. Estas tabelas são usadas pelo Jet para armazenar informações sobre as definições usadas na tabela.

Tabela MSysIMEXColumns em Nwind.mdb

Se quisermos obter informação sobre os tipos de dados presentes na fonte de dados também usamos o método OpenSchema, mas desta vez passando a constante adSchemaProviderTypes para obter um recordset que nos mostrará todos os tipos de dados presentes na fonte de dados. Vamos continuar o projeto anterior :

  1. Insira um segundo botao de comando (command2) no formulario (form1)
  2. No evento click de command2 , digite o seguinte código:
Private Sub Command2_Click()
Dim adoConnection As ADODB.Connection
Dim adoRsFields As ADODB.Recordset
Dim sConnection As String

Set adoConnection = New ADODB.Connection
sConnection = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=c:\teste\Nwind.mdb"
adoConnection.Open sConnection

Set adoRsFields = adoConnection.OpenSchema(adSchemaProviderTypes)

Do Until adoRsFields.EOF

  Debug.Print "Tipos de Dados : " & adoRsFields!TYPE_NAME & vbTab & "Column Size: "_
 & adoRsFields!COLUMN_SIZE
  adoRsFields.MoveNext

Loop

adoRsFields.Close
Set adoRsFields = Nothing
adoConnection.Close
Set adoConnection = Nothing

End Sub

O projeto em execução e o resultado do processamento estão abaixo:

O projeto em execução O resultado do processamento
Até o próximo artigo.
 
Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

 

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti