Jump to content

Relacionar tabelas de diferentes bases de dados


CACO8
Go to solution Solved by bioshock,

Recommended Posts

Boa tarde. A minha dúvida tem a ver com a possibilidade ou não de relacionar tabelas de diferentes bases de dados. Na prática o que tenho em mãos são 2 tabelas access (BDPROJ1 e BDPROJ2), cada uma na sua base de dados (BD1 e BD2). O que pretendo é selecionar informação destas duas tabelas e copiá-la para uma terceira tabela (BDPROJ3) que se encontra numa terceira base de dados (BD3). Estou a trabalhar em Visual Basic Express 2010 e access 2007.

É possível fazer isto?

Obrigado pela atenção e ajuda.

Link to comment
Share on other sites

Funcionou obrigado pela ajuda até então. Mas em relação ao trabalho que estou a desenvolver tenho mais uma questão. Na tabela BDPROJ2 tenho várias valores numa coluna chamada "COD ROTINA". Na tabela BDPROJ1 tenho vários valores de numa coluna chamada "equip". O objetivo é fazer com que os valores que se encontram na coluna "COD ROTINA" surjam sempre que apareça um valor da coluna "equip" associado.

Por exemplo na coluna "COD ROTINA" se tiver 8 valores associados a um equipamento e se na coluna "equip" tiver 3 equipamentos que se encontrem associados àquelas rotinas o que pretendo é que para cada valor da coluna "equip" apareçam os 8 valores da tabela "COD ROTINA". OU seja 8*3 = 24 linhas.

No código que desenvolvi em baixo o que me está a acontecer é que se tiver os 3 valores na coluna "equip" e os 8 valores na coluna "COD ROTINA" o que aparece no datagridview é apenas o primeiro valor da coluna "equip" associado aos 8 valores da coluna "COD ROTINA". Os outros 2 valores nem sequer surgem. Eu fiz um ciclo FOR nas duas tabelas que pretendo comparar mas não me aparecem os valores todos.

Espero ter sido claro na explicação do meu problema. Mais uma vez agradeço toda a ajuda que me prestaram até aqui e toda a que me possam prestar.

CÓDIGO:

'define a string de conexão com o banco de dados
       Dim strConn As String = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\PC\Documents\IST\Tese\Bases de dados Access\2ªtentativa\MAC01EQ01.accdb"
       'define o objeto OledbConnection usando a string de conexão
       Dim conexao As New OleDbConnection(strConn)
       'define a string de conexão com o banco de dados
       Dim strCon As String = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\PC\Documents\IST\Tese\Bases de dados Access\2ªtentativa\BD2.accdb"
       'define o objeto OledbConnection usando a string de conexão
       Dim conex As New OleDbConnection(strCon)
       'define a instrução SQL que será usada para extrair as linhas da tabela Authors
       Dim sql1 As String = "SELECT * FROM BDPROJ1 ORDER BY [COD EQUIPAMENTO]"
       'define a instrução SQL2 que será usada para extrair as linhas da tabela Publishers
       Dim sql2 As String = "SELECT * FROM BDPROJ2"


       'Cria o objeto DataAdapter
       Dim adaptador1 As New OleDbDataAdapter(sql1, conexao)
       Dim ds1 As New DataSet("BDPROJ1")
       adaptador1.Fill(ds1, "BDPROJ1")
       Dim dt1 As DataTable
       dt1 = ds1.Tables("BDPROJ1")

       'Cria o objeto DataAdapter
       Dim adaptador2 As New OleDbDataAdapter(sql2, conex)
       Dim ds2 As New DataSet("BDPROJ2")
       adaptador2.Fill(ds2, "BDPROJ2")
       Dim dt2 As DataTable
       dt2 = ds2.Tables("BDPROJ2")

       Dim dt3 As New DataTable
       dt3.Columns.Add("TIPO", GetType(String))
       dt3.Columns.Add("COD" GetType(String))
       dt3.Columns.Add("REF", GetType(String))
       dt3.Columns.Add("MARCA", GetType(String))
       dt3.Columns.Add("MODELO", GetType(String))
       dt3.Columns.Add("SN", GetType(String))
       dt3.Columns.Add("COD ROTINA", GetType(String))
       dt3.Columns.Add("OPERAÇÃO", GetType(String))
       dt3.Columns.Add("PERIODICIDADE", GetType(String))
       dt3.Columns.Add("PERIODICIDADE DIAS", GetType(String))
       dt3.Columns.Add("INDICADOR 1", GetType(String))
       dt3.Columns.Add("INDICADOR 2", GetType(String))

       For Each DR2 As DataRow In dt2.Rows
           For Each DR1 As DataRow In dt1.Rows
               If (DR2("COD")) = (DR1("equip")) Then
                   dt3.Rows.Add(DR1("TIPO").ToString, DR1("COD").ToString, DR1("REF").ToString, DR1("MARCA").ToString, DR1("MODELO").ToString, DR1("SN").ToString, DR2("COD ROTINA").ToString, DR2("OPERAÇÃO").ToString, DR2("PERIODICIDADE").ToString, DR2("PERIODICIDADE DIAS").ToString, DR2("INDICADOR 1").ToString, DR2("INDICADOR 2").ToString)
                   Exit For
               End If
           Next
       Next

       DATA.DataSource = dt3
Edited by thoga31
Tags CODE + GeSHi
Link to comment
Share on other sites

Já consegui resolver. No código que postei anteriormente bastou retirar o "EXIST FOR" e ficou a funcionar como pretendia.

Agora tenho outra questão. Ainda no código que coloquei no post anterior tenho 1 datatable (dt3) gerado a partir de 2 datatables distintos (dt1 e dt2). O que pretendo é que a informação contida no dt3 seja copiada para uma tabela já criada (e que possui os mesmos campos criados no dt3) e existente noutra base de dados. Julgo que esta questão vai de encontro à resposta do bioshock, porém não sei bem como fazer.

Agradeço toda a ajuda que me possam prestar.

Link to comment
Share on other sites

É. Envias a informação das duas tabelas inciais para DataSets (por exemplo), depois juntas os dois DataSets num só e por fim envias para a 3ª base de dados.

http://wiki.portugal-a-programar.pt/dev_net:vb.net:access

Estou querendo fazer exatamente esse procedimento, mas não sei como fazer.

Acesso uma tabela na base SQL2008 e outra tabela na base Access,

quero fazer um relacionamento entre elas, teria como você me explicar como fazer isso?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.