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