COMPARAR 2 TABELAS MYSQL COM BDS DIFERENTES
Boas pessoal, basicamente preciso de comparar duas tabelas de bases de dados diferentes.
Quero mostrar numa listview os registos da tabela [Ô]chronoforms_contacto[Ô] cujo o email não esteja em nenhum registo da tabela [Ô]tb_contacto[Ô].
Estive a pesquisar e julgo que a sintaxe sql poderia ser:
SELECT * FROM chronoforms_contacto INNER JOIN tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email
O código que tenho no botão para preencher a listview é:
Ligar_novos_contactos()
myCON1.Open()
myCON.Open()
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]SELECT * FROM chronoforms_contacto INNER JOIN tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email[Ô], myCON1)
myDRR = myCMD.ExecuteReader()
[ô]configuração do controle listview
frm_importar.ltw_novos_contactos.Clear()
[ô]modo de visao
frm_importar.ltw_novos_contactos.View = View.Details
[ô]permite o usuario rearranjar as colunas
frm_importar.ltw_novos_contactos.AllowColumnReorder = True
[ô] exibe as caixas de marcacao (check boxes.)
frm_importar.ltw_novos_contactos.CheckBoxes = True
[ô] seleciona um item e subitem quando a seleção é feita
frm_importar.ltw_novos_contactos.FullRowSelect = True
[ô] ordena os itens na list na ordem ascendente
frm_importar.ltw_novos_contactos.Sorting = SortOrder.Ascending
[ô]cria as colunas com os nomes do cabeçalho usando os nomes dos campos da tabela Funcionários
With frm_importar.ltw_novos_contactos
[ô].Columns.Add([Ô]Id[Ô], 50, HorizontalAlignment.Left)
.Columns.Add([Ô]Nome[Ô], 165, HorizontalAlignment.Left)
.Columns.Add([Ô]Contacto[Ô], 90, HorizontalAlignment.Left)
.Columns.Add([Ô]Email[Ô], 160, HorizontalAlignment.Left)
.Columns.Add([Ô]Localidade[Ô], 75, HorizontalAlignment.Left)
.Columns.Add([Ô]Interesse[Ô], 90, HorizontalAlignment.Left)
.Columns.Add([Ô]Data[Ô], 90, HorizontalAlignment.Left)
End With
[ô] percorre a tabela e exibe todos os dados no listview
While myDRR.Read
Dim codigo As String = myDRR.Item(8) [ô]Nome
Dim ls As New ListViewItem(codigo, 0)
ls.SubItems.Add(myDRR.Item(9)) [ô]Contacto
ls.SubItems.Add(myDRR.Item(10)) [ô]Email
ls.SubItems.Add(myDRR.Item(11)) [ô]Localidade
ls.SubItems.Add(myDRR.Item(12)) [ô]Interesse
ls.SubItems.Add(myDRR.Item(2)) [ô]Data
frm_importar.ltw_novos_contactos.Items.Add(ls)
End While
myDRR.Close()
myCON1.Close()
myCON.Close()
A minha questão é que eu uso duas ligações (myCON e myCON1) para aceder as tabelas de diferentes BD[ô]S. E desta forma não vai funcionar porque nesta linha de código:
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]SELECT * FROM chronoforms_contacto INNER JOIN tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email[Ô], myCON1)
Só faço referência a ligação myCON1. Como poderia juntar a myCON?
Será que resulta da forma que estou a descrever?
Quero mostrar numa listview os registos da tabela [Ô]chronoforms_contacto[Ô] cujo o email não esteja em nenhum registo da tabela [Ô]tb_contacto[Ô].
Estive a pesquisar e julgo que a sintaxe sql poderia ser:
SELECT * FROM chronoforms_contacto INNER JOIN tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email
O código que tenho no botão para preencher a listview é:
Ligar_novos_contactos()
myCON1.Open()
myCON.Open()
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]SELECT * FROM chronoforms_contacto INNER JOIN tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email[Ô], myCON1)
myDRR = myCMD.ExecuteReader()
[ô]configuração do controle listview
frm_importar.ltw_novos_contactos.Clear()
[ô]modo de visao
frm_importar.ltw_novos_contactos.View = View.Details
[ô]permite o usuario rearranjar as colunas
frm_importar.ltw_novos_contactos.AllowColumnReorder = True
[ô] exibe as caixas de marcacao (check boxes.)
frm_importar.ltw_novos_contactos.CheckBoxes = True
[ô] seleciona um item e subitem quando a seleção é feita
frm_importar.ltw_novos_contactos.FullRowSelect = True
[ô] ordena os itens na list na ordem ascendente
frm_importar.ltw_novos_contactos.Sorting = SortOrder.Ascending
[ô]cria as colunas com os nomes do cabeçalho usando os nomes dos campos da tabela Funcionários
With frm_importar.ltw_novos_contactos
[ô].Columns.Add([Ô]Id[Ô], 50, HorizontalAlignment.Left)
.Columns.Add([Ô]Nome[Ô], 165, HorizontalAlignment.Left)
.Columns.Add([Ô]Contacto[Ô], 90, HorizontalAlignment.Left)
.Columns.Add([Ô]Email[Ô], 160, HorizontalAlignment.Left)
.Columns.Add([Ô]Localidade[Ô], 75, HorizontalAlignment.Left)
.Columns.Add([Ô]Interesse[Ô], 90, HorizontalAlignment.Left)
.Columns.Add([Ô]Data[Ô], 90, HorizontalAlignment.Left)
End With
[ô] percorre a tabela e exibe todos os dados no listview
While myDRR.Read
Dim codigo As String = myDRR.Item(8) [ô]Nome
Dim ls As New ListViewItem(codigo, 0)
ls.SubItems.Add(myDRR.Item(9)) [ô]Contacto
ls.SubItems.Add(myDRR.Item(10)) [ô]Email
ls.SubItems.Add(myDRR.Item(11)) [ô]Localidade
ls.SubItems.Add(myDRR.Item(12)) [ô]Interesse
ls.SubItems.Add(myDRR.Item(2)) [ô]Data
frm_importar.ltw_novos_contactos.Items.Add(ls)
End While
myDRR.Close()
myCON1.Close()
myCON.Close()
A minha questão é que eu uso duas ligações (myCON e myCON1) para aceder as tabelas de diferentes BD[ô]S. E desta forma não vai funcionar porque nesta linha de código:
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]SELECT * FROM chronoforms_contacto INNER JOIN tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email[Ô], myCON1)
Só faço referência a ligação myCON1. Como poderia juntar a myCON?
Será que resulta da forma que estou a descrever?
São dois BD[ô]s instalados em dois locais diferentes, ou apenas dois schemas diferentes?
Citação::
São dois BD[ô]s instalados em dois locais diferentes, ou apenas dois schemas diferentes?
As bases de dados estão no mesmo local (domÃnio).
Será que alguém me consegue ajudar???
Então, são dois schemas diferentes, nada mais, certo? Estão rodando no mesmo servidor MySQL, isso?
Citação::
Então, são dois schemas diferentes, nada mais, certo? Estão rodando no mesmo servidor MySQL, isso?
Sim exactamente, a situação é que nesta linha onde faço a consulta:
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]SELECT * FROM chronoforms_contacto INNER JOIN tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email[Ô], myCON1)
faço a consulta a duas tabelas (chronoforms_contacto + tb_contacto) mas só chamo a ligação a uma tabela [Ô]myCON1[Ô] e tenho de chamar também a outra [Ô]myCON[Ô]...
select * FROM
NOME_DO_SCHEMA.NOME_DA_TABELA
INNER JOIN
NOME_DO_OUTRO_SCHEMA.NOME_DA_OUTRA_TABELA
ON ....
NOME_DO_SCHEMA.NOME_DA_TABELA
INNER JOIN
NOME_DO_OUTRO_SCHEMA.NOME_DA_OUTRA_TABELA
ON ....
Citação::
select * FROM
NOME_DO_SCHEMA.NOME_DA_TABELA
INNER JOIN
NOME_DO_OUTRO_SCHEMA.NOME_DA_OUTRA_TABELA
ON ....
Desde já agradecer a sua resposta! Assim sendo o código ficou:
Public Sub Ligar_novos_contactos1()
Try
myCON2 = New MySql.Data.MySqlClient.MySqlConnection([Ô]Server=000.00.00.000;Uid=user;Pwd=pass;[Ô])
Catch ex As MySql.Data.MySqlClient.MySqlException
MsgBox([Ô]Erro inesperado ao abrir a base de dados ![Ô] & ex.Message, MsgBoxStyle.Critical, [Ô]Erro nº [Ô] & ex.Number)
myCON1.Close()
End Try
End Sub
Public Sub comparar_listviews()
Ligar_novos_contactos1()
myCON2.Open()
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]SELECT * FROM oricoms.chronoforms_contacto INNER JOIN contactgest.tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email[Ô], myCON2)
myDRR = myCMD.ExecuteReader()
frm_importar.ltw_novos_contactos.Clear()
frm_importar.ltw_novos_contactos.View = View.Details
frm_importar.ltw_novos_contactos.AllowColumnReorder = True
frm_importar.ltw_novos_contactos.CheckBoxes = True
frm_importar.ltw_novos_contactos.FullRowSelect = True
frm_importar.ltw_novos_contactos.Sorting = SortOrder.Ascending
With frm_importar.ltw_novos_contactos
.Columns.Add([Ô]Nome[Ô], 165, HorizontalAlignment.Left)
.Columns.Add([Ô]Contacto[Ô], 90, HorizontalAlignment.Left)
.Columns.Add([Ô]Email[Ô], 160, HorizontalAlignment.Left)
.Columns.Add([Ô]Localidade[Ô], 75, HorizontalAlignment.Left)
.Columns.Add([Ô]Interesse[Ô], 90, HorizontalAlignment.Left)
.Columns.Add([Ô]Data[Ô], 90, HorizontalAlignment.Left)
End With
[ô] percorre a tabela e exibe todos os dados no listview
While myDRR.Read
Dim codigo As String = myDRR.Item(8) [ô]Nome
Dim ls As New ListViewItem(codigo, 0)
ls.SubItems.Add(myDRR.Item(9)) [ô]Contacto
ls.SubItems.Add(myDRR.Item(10)) [ô]Email
ls.SubItems.Add(myDRR.Item(11)) [ô]Localidade
ls.SubItems.Add(myDRR.Item(12)) [ô]Interesse
ls.SubItems.Add(myDRR.Item(2)) [ô]Data
frm_importar.ltw_novos_contactos.Items.Add(ls)
End While
myDRR.Close()
myCON2.Close()
End Sub
No entanto ao clicar no botão para preencher a listview com a consulta: ([Ô]SELECT * FROM oricoms.chronoforms_contacto INNER JOIN contactgest.tb_contacto ON chronoforms_contacto.lbl_email <> tb_contacto.email[Ô], myCON2)
a aplicação fica a pensar e não passa daqui...
O que será que estou a fazer mal?
Tópico encerrado , respostas não são mais permitidas