VERIFICAR TABELAS E/OU EXISTENTES VIA CODIGO
E aà galera....
Tive uma idéia só não sei se é possÃvel implementar. Quando os cliente pedem ferramentas novas nas aplicações, geralmente a base de dados também sofre alterações (aumento dum campo, uma tabela etc). A idéia é na hora de actualizar a aplicação nas máquinas, um gestor de updates interno fizesse a leitura das mudanças na base de dados e então rodá-se as rotinas de incremento dos novos campos nas respectivas tabelas e se for o caso criação das novas tabelas. Daà que é importante saber se é possÃvel ler-se a arquitectura da BD via código.
Tive uma idéia só não sei se é possÃvel implementar. Quando os cliente pedem ferramentas novas nas aplicações, geralmente a base de dados também sofre alterações (aumento dum campo, uma tabela etc). A idéia é na hora de actualizar a aplicação nas máquinas, um gestor de updates interno fizesse a leitura das mudanças na base de dados e então rodá-se as rotinas de incremento dos novos campos nas respectivas tabelas e se for o caso criação das novas tabelas. Daà que é importante saber se é possÃvel ler-se a arquitectura da BD via código.
Sim... é possÃvel sim... Existe uma função que eu uso, inclusive peguei aqui mesmo no VBMania que analisa se um campo existe ou não e inclui se não existir... Para tanto, o gestor de updates precisa sempre ser atualizado com a [Ô]estrutura[Ô] do bd e tabelas na versão da atualização. Acredito que um txt resolve o problema (pode-se até fazer o download desse txt via código, através do winsock).
Função:
Dim Con As ADODB.Connection
Dim Cat As ADOX.Catalog
Dim Tbl As ADOX.Table
Dim Col As ADOX.Column
Dim FSO As FileSystemObject
Private Function CriaCampoSeNaoExiste(BancodeDados As String, NomeTabela As String, NomeCampo As String, TipoCampo As Long, TamanhoCampo As Long)
[ô]Criar uma nova instância das Classes adodob e adodx
Set Con = New ADODB.Connection
Set Cat = New ADOX.Catalog
Set Tbl = New ADOX.Table
Set Col = New ADOX.Column
[ô]Criar uma instância do FSO
Set FSO = New FileSystemObject
[ô]Definir o caminho e o nome do MDB
Dim Caminho As String
Dim MyCampos As String
Caminho = BancodeDados
If Not FSO.FileExists(Caminho) Then
MsgBox [Ô]O Arquivo não existe[Ô]
Exit Function
End If
[ô]Abrir o Bd
Con.Open [Ô]Provider=Microsoft.Jet.OleDB.4.0;Data Source=[Ô] & Caminho
[ô]Definir a Conexão ativa
Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Tbl.Name = NomeTabela Then
For Each Col In Tbl.Columns
Tbl.Name = NomeTabela
[ô]Criar os Campos
With Tbl.Columns
If Len(MyCampos) = 0 Then
MyCampos = Col.Name
Else
MyCampos = MyCampos & [Ô],[Ô] & Col.Name
End If
End With
Next
With Tbl.Columns
If InStr(MyCampos, NomeCampo) = 0 Then
.Append NomeCampo, TipoCampo, TamanhoCampo
End If
End With
End If
Next
Set Con = Nothing
Set Cat = Nothing
Set Tbl = Nothing
Set Col = Nothing
End Function
Então a chamada fica assim(exemplo):
Call CriaCampoSeNaoExiste(App.path & [Ô]\data\dbsci.mdb[Ô], [Ô]CASAS[Ô], [Ô]EMAIL[Ô], adVarWChar, 50)
Função:
Dim Con As ADODB.Connection
Dim Cat As ADOX.Catalog
Dim Tbl As ADOX.Table
Dim Col As ADOX.Column
Dim FSO As FileSystemObject
Private Function CriaCampoSeNaoExiste(BancodeDados As String, NomeTabela As String, NomeCampo As String, TipoCampo As Long, TamanhoCampo As Long)
[ô]Criar uma nova instância das Classes adodob e adodx
Set Con = New ADODB.Connection
Set Cat = New ADOX.Catalog
Set Tbl = New ADOX.Table
Set Col = New ADOX.Column
[ô]Criar uma instância do FSO
Set FSO = New FileSystemObject
[ô]Definir o caminho e o nome do MDB
Dim Caminho As String
Dim MyCampos As String
Caminho = BancodeDados
If Not FSO.FileExists(Caminho) Then
MsgBox [Ô]O Arquivo não existe[Ô]
Exit Function
End If
[ô]Abrir o Bd
Con.Open [Ô]Provider=Microsoft.Jet.OleDB.4.0;Data Source=[Ô] & Caminho
[ô]Definir a Conexão ativa
Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Tbl.Name = NomeTabela Then
For Each Col In Tbl.Columns
Tbl.Name = NomeTabela
[ô]Criar os Campos
With Tbl.Columns
If Len(MyCampos) = 0 Then
MyCampos = Col.Name
Else
MyCampos = MyCampos & [Ô],[Ô] & Col.Name
End If
End With
Next
With Tbl.Columns
If InStr(MyCampos, NomeCampo) = 0 Then
.Append NomeCampo, TipoCampo, TamanhoCampo
End If
End With
End If
Next
Set Con = Nothing
Set Cat = Nothing
Set Tbl = Nothing
Set Col = Nothing
End Function
Então a chamada fica assim(exemplo):
Call CriaCampoSeNaoExiste(App.path & [Ô]\data\dbsci.mdb[Ô], [Ô]CASAS[Ô], [Ô]EMAIL[Ô], adVarWChar, 50)
Valeu Lizander, funcionou. Para facilitar o trabalho vou configurar um servidor com as actualizações, assim todo cliente desde que pague para a actualização recebe uma senha de acesso e baixa as actualizações, depois é só rodfar o gestor de update localmente.
Brigadjinho
Brigadjinho
Tópico encerrado , respostas não são mais permitidas