FORM DE PESQUISA DE REGISTROS..
Pessoal, estou fazendo um form para pesqisa de registros..
Eh um form q possui uma textbox para digitar o nome do cliente e conforme vai digitando vai aparecendo no datagrid.. E se der dois cliques no registro os dados passam para o form de cadastro..
O codigo esta assim:
O problema é que o cadastro de Clientes possui no banco de dados tabelas relacionadas.. E eu só estou conseguindo puxar no datagrid para o form de cadastro, somente os dados da tabela Cliente.. Mas ainda precisa dos dados da tabela PF, Telefone, Endereco...
Codigo do banco:
Se puderem ajudar, valeeu!
Eh um form q possui uma textbox para digitar o nome do cliente e conforme vai digitando vai aparecendo no datagrid.. E se der dois cliques no registro os dados passam para o form de cadastro..
O codigo esta assim:
Private Sub txt_Pesquisa_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Pesquisa.TextChanged
Dim con As MySqlConnection
Dim cmd As MySqlCommand
Dim dt As New DataTable
con = New MySqlConnection
con.ConnectionString = [Ô]Persist Security Info=True;server=localhost;User Id=root; password=admin;database=workshopmanager[Ô]
con.Open()
cmd = con.CreateCommand
cmd.CommandType = CommandType.Text
cmd.CommandText = [Ô]SELECT * FROM cliente where nome_cliente LIKE @pesquisa[Ô]
cmd.Parameters.Add([Ô]@pesquisa[Ô], MySqlDbType.VarChar)
cmd.Parameters([Ô]@pesquisa[Ô]).Value = [Ô]%[Ô] + txt_Pesquisa.Text + [Ô]%[Ô]
dt.Load(cmd.ExecuteReader())
DataGridView1.DataSource = dt.Copy()
con.Close()
End Sub
Private Sub DataGridView1_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
frm_Clientes.lbl_cod.Text = DataGridView1.Item(0, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.txt_Nome.Text = DataGridView1.Item(1, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.txt_Contato.Text = DataGridView1.Item(2, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.txt_obs.Text = DataGridView1.Item(3, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.lbl_cadastroText.Text = DataGridView1.Item(4, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.cmb_Pessoa.Text = DataGridView1.Item(5, DataGridView1.CurrentCell.RowIndex).Value.ToString()
identificacaoCli = DataGridView1.Item(0, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.txt_Nome.Text = DataGridView1.Item(1, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.txt_Contato.Text = DataGridView1.Item(2, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.txt_obs.Text = DataGridView1.Item(3, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.lbl_cadastroText.Text = DataGridView1.Item(4, DataGridView1.CurrentCell.RowIndex).Value.ToString()
frm_Clientes.cmb_Pessoa.Text = DataGridView1.Item(5, DataGridView1.CurrentCell.RowIndex).Value.ToString()
Me.Close()
End Sub
O problema é que o cadastro de Clientes possui no banco de dados tabelas relacionadas.. E eu só estou conseguindo puxar no datagrid para o form de cadastro, somente os dados da tabela Cliente.. Mas ainda precisa dos dados da tabela PF, Telefone, Endereco...
Codigo do banco:
Create table PF (
cod_PF integer unsigned primary key not null auto_increment,
rg_PF varchar(30),
cpf_PF varchar(30),
dataNascimento_PF varchar(15),
sexo_PF varchar(10),
email_PF varchar(150)) ENGINE=INNODB;
Create table Telefone (
cod_Telefone integer unsigned primary key not null auto_increment,
residencial_Telefone varchar(14),
celular_Telefone varchar(14),
fax_Telefone varchar(14)) ENGINE=INNODB;
Create table Endereco (
cod_Endereco integer unsigned primary key not null auto_increment,
nome_Endereco varchar(160),
numero_Endereco varchar(8),
complemento_Endereco varchar(20),
cep_Endereco varchar(10),
bairro_Endereco varchar(30),
cidade_Endereco varchar(30),
uf_Endereco char(2),
pais_Endereco varchar(20)) ENGINE=INNODB;
Create table Cliente (
cod_Cliente integer unsigned primary key not null auto_increment,
nome_Cliente varchar(160) not null,
contato_Cliente varchar(20),
observacoes_Cliente varchar(100),
horadata_Cliente varchar(30),
tipo_Cliente varchar(10),
cod_PF integer unsigned not null,
Foreign key (cod_PF) references PF (cod_PF) ON DELETE CASCADE,
cod_Telefone integer unsigned not null,
Foreign Key (cod_Telefone) references Telefone (cod_Telefone) ON DELETE CASCADE,
cod_Endereco integer unsigned not null,
Foreign Key (cod_Endereco) references Endereco (cod_Endereco) ON DELETE CASCADE) ENGINE=INNODB;
Se puderem ajudar, valeeu!
Boa tarde,
Basta utilizar o INNER JOIN na instrução SQL, abaixo tem vários exemplos de como montar a SQL usando INNER JOIN.
http://www.profissionaisti.com.br/2011/03/uma-pequena-introducao-sobre-o-inner-join-em-banco-de-dados/
http://db.apache.org/derby/docs/dev/pt_BR/ref/rrefsqlj35034.html
http://www.luis.blog.br/left-join-e-inner-join-juncao-em-consultas-sql.aspx
http://portaldosoftware.forumeiros.com/t39-o-que-e-inner-join-e-como-fazer
http://www.luis.blog.br/join-ou-juncoes-sql-inner-left-right-e-full-outer-join.aspx
Basta utilizar o INNER JOIN na instrução SQL, abaixo tem vários exemplos de como montar a SQL usando INNER JOIN.
http://www.profissionaisti.com.br/2011/03/uma-pequena-introducao-sobre-o-inner-join-em-banco-de-dados/
http://db.apache.org/derby/docs/dev/pt_BR/ref/rrefsqlj35034.html
http://www.luis.blog.br/left-join-e-inner-join-juncao-em-consultas-sql.aspx
http://portaldosoftware.forumeiros.com/t39-o-que-e-inner-join-e-como-fazer
http://www.luis.blog.br/join-ou-juncoes-sql-inner-left-right-e-full-outer-join.aspx
entao o inner join eu consegui fazer olha como esta:
Oq eu n estou consegindo agora, eh chamar os dados para as textbox conforme as tabelas..
[Ô]SELECT cliente.cod_Cliente, cliente.nome_Cliente, cliente.contato_Cliente, endereco.nome_Endereco, endereco.numero_Endereco, endereco.cep_Endereco, endereco.bairro_Endereco, endereco.cidade_Endereco, endereco.uf_Endereco FROM cliente INNER JOIN endereco ON (cliente.cod_Endereco=endereco.cod_Endereco) INNER JOIN telefone ON (cliente.cod_Telefone=telefone.cod_Telefone) INNER JOIN pf ON (cliente.cod_PF=pf.cod_PF) WHERE nome_Cliente LIKE @pesquisa[Ô]
Oq eu n estou consegindo agora, eh chamar os dados para as textbox conforme as tabelas..
Mas o grid carrega as tabelas?
carrega... Mais nao quero q mostre todos os dados.. soh quero q mostrei aqueles q eu escolhi ali no codigo que sao:
cliente.cod_Cliente, cliente.nome_Cliente, cliente.contato_Cliente, endereco.nome_Endereco, endereco.numero_Endereco, endereco.cep_Endereco, endereco.bairro_Endereco, endereco.cidade_Endereco, endereco.uf_Endereco
pq se mostrar todos os dados ia ser muita coisa.... Mas fiz o JOIN nas outra tabelas tbm..
Mas queria q quando desse o double click.. mostrasse os dados de todas as tabelas nas textboxs
cliente.cod_Cliente, cliente.nome_Cliente, cliente.contato_Cliente, endereco.nome_Endereco, endereco.numero_Endereco, endereco.cep_Endereco, endereco.bairro_Endereco, endereco.cidade_Endereco, endereco.uf_Endereco
pq se mostrar todos os dados ia ser muita coisa.... Mas fiz o JOIN nas outra tabelas tbm..
Mas queria q quando desse o double click.. mostrasse os dados de todas as tabelas nas textboxs
Amigo, sugiro o seguinte, ao invés de se trabalhar com o Index da coluna(número da coluna). Você trabalhe com o nome da coluna, assim fica mais fácil identifica-lá
O nome da coluna geralmente vai ser o mesmo que tem na tabela.
Ex: Se na tabela Endereco tem o campo [Ô]nome_Endereco[Ô], para recuparar o valor do datagrid para o textbox seria:
E por ai vai....
Private Sub DataGridView1_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick
frm_Clientes.txt_Nome.Text = DataGridView1.CurrentRow.Cells([Ô]nome_Cliente[Ô]).Value.ToString
frm_Clientes.txt_Contato.Text = DataGridView1.CurrentRow.Cells([Ô]contato_Cliente[Ô]).Value.ToString
[ô]E por ai vai....
End sub
O nome da coluna geralmente vai ser o mesmo que tem na tabela.
Ex: Se na tabela Endereco tem o campo [Ô]nome_Endereco[Ô], para recuparar o valor do datagrid para o textbox seria:
frm_Clientes.Nome_Endereco.Text = DataGridView1.CurrentRow.Cells([Ô]nome_Endereco[Ô]).Value.ToString
E por ai vai....
Um dica para se saber o nome da coluna que está sendo retornada, é pegar essa instrução SQL e colar em um Gerenciador de BD que você usa(Mysql Query, HEIDI SQL, TOAD...) o titulo das colunas que forem retornados é o mesmo nome que vai retornar no datagrid.
Uma pergunta na hora de pesquisar par ao datagrid, quero q apareça somente alguns campos no datagrid... Mas ao der os dois cliques quero q todos os camppos vao para as textbox..
Tem como pegar todos os valores das tabelas, mesmo sem estar no datagrid ??
Tem como pegar todos os valores das tabelas, mesmo sem estar no datagrid ??
Citação:Tem como pegar todos os valores das tabelas, mesmo sem estar no datagrid ??
Que eu saiba não... Agora você pode fazer por exemplo. no Grid você recupere apenas O ID do cliente e jogue em um textbox e depois faça um novo select para recuperar os outros dados, outra sugestão é ocultar as colunas que não deseja aparecer no datagrid.
como faço para ocultar as colunas ??
Assim:
Basta botar o nome da coluna.
DataGridView1.Columns([Ô]nome_cliente[Ô]).Visible = False
Basta botar o nome da coluna.
Tópico encerrado , respostas não são mais permitidas