Verificando a existência de uma tabela com ADO.

Já tocamos neste assunto no artigo : ADO - Obtendo informações sobre a fonte dos dados.

Vamos mostrar como verificar se uma tabela existe em uma base de dados access usando o método OpenSchema da ADO.

1- Inicie o VB e faça uma referência a Microsoft Activex Data Object 2.x ( 2.5 em diante)

2- Insira um botão de comando e duas caixas de texto - txtbd e txtabela - e duas labels. Veja layout abaixo:

3- Agora vamos definir as variáveis objeto Connection ( con ) e Recordset ( rs ) na seção general declaration :

Option Explicit
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

4- No evento Click do botão de comando vamos fazer a conexão com o banco de dados informado em txtbd e usando o método OpenSchema verificar se a tabela informada em txtabela existe.

Private Sub Command1_Click()

Set con = New ADODB.Connection
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & txtbd.Text
Set rs = con.OpenSchema(adSchemaTables, Array(Empty, Empty, txtabela.Text, "TABLE"))

If Not rs.EOF Then
   MsgBox " A tabela " & txtabela.Text & " foi encontrada em : " & txtbd.Text
Else
   MsgBox " A tabela " & txtabela.Text & " Não foi encontrada em : " & txtbd.Text
End If

rs.Close
con.Close

End Sub

A Sintaxe do método OpenSchema é a seguinte:

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

O método retorna um recordset que contém a informação sobre o esquema solicitado. O recordset é de somente leitura e o cursor é do tipo Static.

Os parâmetros usados são:

QueryType   - O tipo do schema a consultar.

Criteria   - Um vetor com restrições para cada opção usada em QueryType

Para o nosso caso - Verificar a existência de uma tabela - temos:

QueryType
Criteria
adSchemaTables
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
TABLE_TYPE

Onde temos a matriz ( array ) usando os criterios:

array( TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE)

array( empty , empty , txtabela.text , "TABLE" )

E, é só isto....