Até o próximo artigo.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:
- 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)
- 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
- 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 :
- Insira um segundo botao de comando (command2) no formulario (form1)
- 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_SIZEadoRsFields.MoveNext Loop adoRsFields.Close Set adoRsFields = Nothing adoConnection.Close Set adoConnection = Nothing End SubO projeto em execução e o resultado do processamento estão abaixo:
O projeto em execução O resultado do processamento
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: