Ajuda - Como abrir tela de cadastro no modo edição para um cliente selecionado na consulta

Delphi

22/09/2012

Olá pessoal não encontrei tópico parecido por aqui se tiver me mandem o link por favor..

estou desenvolvendo aqui um programa, nele tenho o form de cadastro e um de consulta,

só que no form de cadastro eu não tenho nenhum tipo de filtro, e para o usuário modificar um cliente gostaria de que ele pesquisasse pela consulta aí o cliente que está selecionado na consulta no dbgrid lá, quando ele apertar no botão editar fazer com que abra a tela de cadastro no modo edição já para aquele cliente.

Creio que meu único problema aqui que não estou conseguindo resolver seria pegar o código do cliente selecionado e mandar para o form de cadastro...


Tem como fazer isso? desde já Obrigado.
Jeferson Araujo

Jeferson Araujo

Curtidas 0

Respostas

Claudia Nogueira

Claudia Nogueira

22/09/2012

No uses do form de cadastro você referencia o form de consulta, e liga todos os campos DB (dbedit por exemplo) ao mesmo DataSource do grid da tela de consulta. No botão editar você verifica se tem algum registro no grid, se tem você da um edit e manda abrir a tela. Na tela de cadastro você coloca um botão com o código pra gravar (Tabela.post).
Exemplo:

Botão editar:

if tabela.isEmpty then
Exit;
Tabela.Edit;
Application.CreateForm(TFormCadastro, FormCadastro);
FormCadastro.ShowModal;
FreeAndNil(FormCadastro);
GOSTEI 0
Deivison Melo

Deivison Melo

22/09/2012

Veja como é simples...

Após adicionar a unit do formulário ao que deseja chamar...

Implemente sua pesquisa e então no DBGrid, existe um evento chamado: OnDblClick

Nesse evento basta que faça da seguinte forma...

procedure TfrmPrincipal.GRIDPesquisaDblClick(Sender: TObject);

var
strSQL: string;
begin
try
strSQL := 'select NOME_LOCAL, SIGLA_UF, CEP_INICIAL, CEP_FINAL from CEP where CEP_INICIAL = ' + GRIDPesquisa.DataSource.DataSet.Fields[2].AsString;
frmConsulta := TfrmConsulta.Create(Self); //Esse é o outro formulário que deseja chamar...
frmConsulta.edtNome.Text := Trim(ClientDataSet1.FieldByName('NOME_LOCAL').Value);
frmConsulta.edtUF.Text := Trim(ClientDataSet1.FieldByName('SIGLA_UF').Value);
frmConsulta.edtCEPInicial.Text := Trim(ClientDataSet1.FieldByName('CEP_INICIAL').Value);
frmConsulta.edtCEPFinal.Text := Trim(ClientDataSet1.FieldByName('CEP_FINAL').Value);
frmConsulta.Caption := 'Consultando - ' + frmConsulta.edtNome.Text;
frmConsulta.ShowModal;
finally
FreeAndNil(frmConsulta);
end;
end;

Existem muitas formas de fazer essa é uma das mais simples...


Qualquer dúvida postar que eu ou outro colaborador iremos ajudar da melhor forma possível...
GOSTEI 0
Jeferson Araujo

Jeferson Araujo

22/09/2012

No uses do form de cadastro você referencia o form de consulta, e liga todos os campos DB (dbedit por exemplo) ao mesmo DataSource do grid da tela de consulta. No botão editar você verifica se tem algum registro no grid, se tem você da um edit e manda abrir a tela. Na tela de cadastro você coloca um botão com o código pra gravar (Tabela.post).
Exemplo:

Botão editar:

if tabela.isEmpty then
Exit;
Tabela.Edit;
Application.CreateForm(TFormCadastro, FormCadastro);
FormCadastro.ShowModal;
FreeAndNil(FormCadastro);


hum obrigado ^^
deu certo aqui

só estou me batendo para uma coisa..

qndo eu abro primeiro o form de cadastro todos os dados estão em branco, só fica preenchido após eu abrir o de consulta,
e eu não consigo preencher nenhum DBE...

GOSTEI 0
Claudia Nogueira

Claudia Nogueira

22/09/2012

Jeferson é que eu achei que seria o contrário, você teria um form de consulta e nesse form teria os botões inserir, editar e excluir por exemplo. Aí a tela de cadastro sempre abriria depois da de consulta e você nem navegaria por ela, somente abriria e gravaria a informação. Já que você vai fazer diferente, aconselho a você fazer o contrário. Colocar o componente que faz a busca no BD (query ou table) na tela de cadastro ou em um DataModule. Se ficar na de cadastro, aí no onShow da tela você pode colocar pra abrir (tabela.open) depois pra ir para o primeiro (tabela.first) e colocar os botões de navegação na própria tela de cadastro. Nessa tela de cadastro teria um botão consultar. Quando clicar nesse botão você abre a tela de consulta. O DBGrid da tela de consulta você liga no mesmo datasource da tela de cadastro, e então quando você retornar pra tela de cadastro você edita (tabela.edit). Dessa forma em vez de você referenciar a tela de consulta na tela de cadastro, você vai referenciar a tela de cadastro na de consulta.
GOSTEI 0
Jeferson Araujo

Jeferson Araujo

22/09/2012

Veja como é simples...

Após adicionar a unit do formulário ao que deseja chamar...

Implemente sua pesquisa e então no DBGrid, existe um evento chamado: OnDblClick

Nesse evento basta que faça da seguinte forma...

procedure TfrmPrincipal.GRIDPesquisaDblClick(Sender: TObject);

var
strSQL: string;
begin
try
strSQL := 'select NOME_LOCAL, SIGLA_UF, CEP_INICIAL, CEP_FINAL from CEP where CEP_INICIAL = ' + GRIDPesquisa.DataSource.DataSet.Fields[2].AsString;
frmConsulta := TfrmConsulta.Create(Self); //Esse é o outro formulário que deseja chamar...
frmConsulta.edtNome.Text := Trim(ClientDataSet1.FieldByName('NOME_LOCAL').Value);
frmConsulta.edtUF.Text := Trim(ClientDataSet1.FieldByName('SIGLA_UF').Value);
frmConsulta.edtCEPInicial.Text := Trim(ClientDataSet1.FieldByName('CEP_INICIAL').Value);
frmConsulta.edtCEPFinal.Text := Trim(ClientDataSet1.FieldByName('CEP_FINAL').Value);
frmConsulta.Caption := 'Consultando - ' + frmConsulta.edtNome.Text;
frmConsulta.ShowModal;
finally
FreeAndNil(frmConsulta);
end;
end;

Existem muitas formas de fazer essa é uma das mais simples...


Qualquer dúvida postar que eu ou outro colaborador iremos ajudar da melhor forma possível...


Valeu.. não entendi muito bem agora, também porque estou tentando o código da colega acima de não der certo tento por esse ^^

Abraço.
GOSTEI 0
Jeferson Araujo

Jeferson Araujo

22/09/2012

Jeferson é que eu achei que seria o contrário, você teria um form de consulta e nesse form teria os botões inserir, editar e excluir por exemplo. Aí a tela de cadastro sempre abriria depois da de consulta e você nem navegaria por ela, somente abriria e gravaria a informação. Já que você vai fazer diferente, aconselho a você fazer o contrário. Colocar o componente que faz a busca no BD (query ou table) na tela de cadastro ou em um DataModule. Se ficar na de cadastro, aí no onShow da tela você pode colocar pra abrir (tabela.open) depois pra ir para o primeiro (tabela.first) e colocar os botões de navegação na própria tela de cadastro. Nessa tela de cadastro teria um botão consultar. Quando clicar nesse botão você abre a tela de consulta. O DBGrid da tela de consulta você liga no mesmo datasource da tela de cadastro, e então quando você retornar pra tela de cadastro você edita (tabela.edit). Dessa forma em vez de você referenciar a tela de consulta na tela de cadastro, você vai referenciar a tela de cadastro na de consulta.


Sim ele deu certo...

no meu form de cadastro ele tem um botão que abre o FrmConClientes.. apartir daí eu filtro ele e quando saio da consulta na minha tela de cadastro mostra só o cliente que eu consultei anteriormente,,,

a princípio está 100% =) só que fui ver e não mostra os dados que relaciona com outras tabelas.. tipo no dbgrid que antes mostrava o nome do bairro e nome da cidade não mostra mais (eu tenho uma tabela para bairros e outra para cidades, e antes disso eu coloquei para ao invés de mostrar o codigo mostrar o nome de ambos e agora não mostra) Axo que só resolvendo isso ele irá funcionar perfeitamente
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

22/09/2012

Jeferson é que eu achei que seria o contrário, você teria um form de consulta e nesse form teria os botões inserir, editar e excluir por exemplo. Aí a tela de cadastro sempre abriria depois da de consulta e você nem navegaria por ela, somente abriria e gravaria a informação. Já que você vai fazer diferente, aconselho a você fazer o contrário. Colocar o componente que faz a busca no BD (query ou table) na tela de cadastro ou em um DataModule. Se ficar na de cadastro, aí no onShow da tela você pode colocar pra abrir (tabela.open) depois pra ir para o primeiro (tabela.first) e colocar os botões de navegação na própria tela de cadastro. Nessa tela de cadastro teria um botão consultar. Quando clicar nesse botão você abre a tela de consulta. O DBGrid da tela de consulta você liga no mesmo datasource da tela de cadastro, e então quando você retornar pra tela de cadastro você edita (tabela.edit). Dessa forma em vez de você referenciar a tela de consulta na tela de cadastro, você vai referenciar a tela de cadastro na de consulta.


Sim ele deu certo...

no meu form de cadastro ele tem um botão que abre o FrmConClientes.. apartir daí eu filtro ele e quando saio da consulta na minha tela de cadastro mostra só o cliente que eu consultei anteriormente,,,

a princípio está 100% =) só que fui ver e não mostra os dados que relaciona com outras tabelas.. tipo no dbgrid que antes mostrava o nome do bairro e nome da cidade não mostra mais (eu tenho uma tabela para bairros e outra para cidades, e antes disso eu coloquei para ao invés de mostrar o codigo mostrar o nome de ambos e agora não mostra) Axo que só resolvendo isso ele irá funcionar perfeitamente


Qual BD?
Você usa Table ou Query?
GOSTEI 0
Jeferson Araujo

Jeferson Araujo

22/09/2012

usando Qry (QryClientes) no sql dele estou pegando todos os dados da tabela cliente e o bai_nome da tabela Bairro e Cid_nome da tabela Cidade
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

22/09/2012

usando Qry (QryClientes) no sql dele estou pegando todos os dados da tabela cliente e o bai_nome da tabela Bairro e Cid_nome da tabela Cidade


Se na tela de cadastro você usar DBLookupComboBox para bairro e cidade, você tem que ter dois componentes pra buscar no banco as informações das tabelas bairro e cidade. Aí no onShow da tela de cadastro você faz por exemplo:

TabBairro.Close;
TabBairro.Open;
TabCidade.Close;
TabCidade.Open;


Na propriedade ListSource do DBLookupComboBox você liga no DataSource que está ligado a tabela de bairro. No KeyField a chave da tabela bairro, e na ListField o campo que é pra aparecer. Aí em DataSource do DBLookupComboBox você liga no do cadastro de cliente, e em DataField você liga no campo que tem a chave do bairro na tabela do cliente.
GOSTEI 0
Jeferson Araujo

Jeferson Araujo

22/09/2012


Se na tela de cadastro você usar DBLookupComboBox para bairro e cidade, você tem que ter dois componentes pra buscar no banco as informações das tabelas bairro e cidade. Aí no onShow da tela de cadastro você faz por exemplo:

TabBairro.Close;
TabBairro.Open;
TabCidade.Close;
TabCidade.Open;


Consegui...

Olha meu lookup esta assim mesmo já como você falou... tipo o código do bairro e cidade se eu colocar para mostrar ele mostra.. ai assim para mostrar o nome eu fui no meu DataSourceCliente e fiz um novo campo.. com as propriedades:
name:nome_bairro
type:String
size:255
Field Type: LookUp
KeyFields:cli_bairro
DataSet:DTSBairro
LookupKeys:bai_codigo
ResultField:bai_nome

Fiz essa mesma configuração só que em vez de fazer no DataSource no DTM fiz no query mesmo no form de cadastro.. deu certo então seu código muito obrigado por td ^^

eu já tinha feito um filtro no cadastro, e tinha dado este mesmo problema, dai por isso pensei que tinha q abrir o form de cadastro pelo de consulta... mas agora os dois métodos estão funcionando perfeitamente =))
GOSTEI 0
POSTAR