FORM DE PESQUISA DE REGISTROS..

BRUNOGOMES 18/10/2012 14:16:30
#412275
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:
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!
BRUNOGOMES 18/10/2012 18:31:34
#412308
entao o inner join eu consegui fazer olha como esta:
[Ô]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..
ALTAIR148 18/10/2012 19:29:45
#412311
Mas o grid carrega as tabelas?
BRUNOGOMES 18/10/2012 20:50:29
#412316
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
ALTAIR148 18/10/2012 22:08:15
#412319
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á


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....
ALTAIR148 18/10/2012 22:10:08
#412320
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.
BRUNOGOMES 18/10/2012 22:26:24
#412322
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 ??
ALTAIR148 19/10/2012 07:45:07
#412329
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.
BRUNOGOMES 19/10/2012 13:08:01
#412369
como faço para ocultar as colunas ??
ALTAIR148 19/10/2012 13:20:34
#412370
Assim:

DataGridView1.Columns([Ô]nome_cliente[Ô]).Visible = False


Basta botar o nome da coluna.
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas