VB - Vinculando tabelas de
banco de dados diferentes
Já precisou trabalhar com mais de um banco de dados ? Você sabe como podemos trabalhar com tabelas de banco de dados diferentes em uma conexão ADO ?
Neste artigo eu vou mostrar como fazer uma junção com tabelas que estão em banco de dados diferentes.
Para poder alcançar nosso objetivo teremos que usar ADOX - ADO Extension for DDL and Security ; ela é uma extensão do modelo objeto ADO padrão que oferece objetos para manipular informações sobre os objetos do seu banco dados e questões relacionadas a segurança. Ela fornece os métodos , eventos e propriedades
Eu tenho dois banco de dados : Empregados.mdb. e Departamentos.mdb.
1- O banco de dados Departamentos.mdb possui a tabela Setores que tem a seguinte estrutura.

Os dados da tabela Funcionarios são :

2- O banco de dados Departamentos.mdb possui a tabela Setores que tem a seguinte estrutura.

Os dados da tabela Setores são :

Meu objetivo é criar abrir o banco de dados Departamentos.mdb e criar um link com a tabela funcionarios do banco de dados Empregados.mdb após fazer a vinculação vou executar uma consulta junção entre as tabelas dois dois banco de dados e exibr os dados. Vou usar ADOX para fazer esta operação.
Leia o artigo - ADOX - Gerenciando o seu banco de dados - para saber mais sobre o assunto.
Crie um novo projeto do tipo EXE no VB e faça referência no seu projeto as seguintes librarys:
No formulário padrão eu vou apenas exibir o resultado da consulta junção entre as duas tabelas por isto inclua apenas um botão de comando e um TextBox conforme o layout abaixo:
O banco de dados Departamentos.mdb contém a tabela Setores com os campos : SetorId e NomeSetor
O banco de dados Empregados.mdb contém a tabela Funcionarios com os campos: Nome,Sobrenome,Cargo , Rua , Cidade, Estado, Cep e SetorId.
O campo SetorId é o vínculo com a tabela Setores. Como existe esta relação eu posso fazer a consulta junção e exibir o nome, cargo e o setor.
O código associado ao evento Click do botão de comando é dado a seguir :
Private Sub cmdExecute_Click()
Dim app_path As String
Dim Arq_DB As String
Dim conn As ADODB.Connection
Dim adox_catalog As ADOX.Catalog
Dim adox_table As ADOX.Table
Dim rs As ADODB.Recordset
Dim i As Integer
Dim txt As String
' Encontra o caminho da aplicação
app_path = App.Path
If Right$(app_path, 1) <> "\" Then app_path = app_path & "\"
' Abre o banco de dados Departamentos
Arq_DB = app_path & "Departamentos.mdb"
Set conn = New ADODB.Connection
conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Arq_DB & ";" & _
"Persist Security Info=False"
conn.Open
' Cria um link para a tabela funcionarios no banco de dados Funcionarios
Set adox_catalog = New ADOX.Catalog
' Liga a tabela vinculada com conexão aberta
Set adox_catalog.ActiveConnection = conn
Set adox_table = New ADOX.Table
With adox_table
Set .ParentCatalog = adox_catalog
.Name = "LinkedTable"
.Properties("Jet OLEDB:Link Datasource") = app_path & "Empregados.mdb"
.Properties("Jet OLEDB:Link Provider String") = "MS Access"
.Properties("Jet OLEDB:Remote Table Name") = "Funcionarios"
.Properties("Jet OLEDB:Create Link") = True
End With
' Inclui a tabela na coleção Tables
adox_catalog.Tables.Append adox_table
' Realiza a consulta
Set rs = conn.Execute( _
"SELECT * " & _
"FROM Setores, LinkedTable " & _
"WHERE Setores.SetorId = LinkedTable.SetorId", , adCmdText)
' Mostra o resultado
Do While Not rs.EOF
txt = txt & rs.Fields(0).Value
For i = 1 To rs.Fields.Count - 1
txt = txt & ", " & rs.Fields(i).Value
Next i
txt = txt & vbCrLf
rs.MoveNext
Loop
rs.Close
txtResults.Text = txt
' Exclui o link do banco de dados Departamentos
adox_catalog.Tables.Delete "LinkedTable"
' Fecha a conexao
conn.Close
End Sub
|
Após realizar a consulta o resultado será o seguinte :

Agora você já sabe como tratar
tabelas de banco de dados diferentes que estão relacionadas.
Hasta la vista ![]()
José Carlos Macoratti