segunda-feira, 11 de maio de 2009

Visual Basic com ADOX - Retornando tabelas, campos e propriedades de um MDB e gravando em um arquivo texto

Essa eu fiz quando trabalhava em um banco, desenvolvendo softwares e ferramentas. Em 1 hora fui programando, reprogramando e cheguei a esse pequeno mas útil código:

Option Explicit
'*************************************************************
'* Faz a leitura de todas as tabelas, colunas e propriedades *
'* e grava em um arquivo texto, utilizando ADOX *
'* Out/2002 - Thiago França *
'*************************************************************

Sub Main()

Dim catNovo As ADOX.Catalog
Dim intNF As Integer 'Número de arquivo disponível para uso
Dim blnOpen As Boolean 'Flag - se arquivo aberto, true
Dim intTable As Long
Dim intColumn As Long
Dim objTabela As Object
Dim strColunas As String

On Error GoTo Erros

Set catNovo = New ADOX.Catalog
catNovo.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=D:\It\db\dbweb.mdb"
intNF = FreeFile()

Open "c:\bd.txt" For Output As #intNF
blnOpen = True
For Each objTabela In catNovo.Tables
If TypeOf objTabela Is ADOX.Table Then
For intTable = 0 To catNovo.Tables.Count - 1
Print #intNF, catNovo.Tables.Item(intTable).Name
Print #intNF, "Campo" & Space$(15) & "Tipo" & vbTab & "Tam." & vbTab & "Prec." & vbTab & "Auto Incr." & vbTab & "Padrao" & vbTab & "Descrição" & vbTab & "Nulo" & vbTab & "Compr.Zero"
For intColumn = 0 To catNovo.Tables.Item(intTable).Columns.Count - 1
strColunas = catNovo.Tables.Item(intTable).Columns(intColumn).Name
strColunas = strColunas & Space$(30 - Len(strColunas)) & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Type) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).DefinedSize) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Precision) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Autoincrement").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Default").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Description").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Nullable").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Jet OLEDB:Allow Zero Length").Value)
Print #intNF, strColunas
Next intColumn
Next intTable
End If
Next
Close #intNF
blnOpen = False
Set objTabela = Nothing
Set catNovo = Nothing
Exit Sub

Erros:
Set objTabela = Nothing
Set catNovo = Nothing
If blnOpen Then
Close #intNF
End If
MsgBox "Erro no processamento - " & CStr(Err.Number) & "-" & Err.Description, vbOKOnly + vbCritical, "Erro!"

End Sub



Detalhes:
- Nunca se esquecer, após instanciar objetos, destruí-los. Lembrar também de destruir na rotina de tratamento de erros.
- A variável blnOpen é um boolean para controlar o momento da abertura do arquivo. Caso ocorra um erro de run-time, e a variável blnOpen estiver setada como True, o arquivo será fechado.
- Programadores VB geralmente desconhecem o uso da função FreeFile(), e utilizam literais para abertura de arquivos.
- O código não está identado devido às configurações do blogger !

Nenhum comentário:

Postar um comentário