RECEBER DADOS DO FORM CONSULTA

Delphi

19/02/2013

Boa Tarde,
Preciso de um Auxilio aqui.

Estou desenvolvendo uma aplicação onde é emitido uma O.S (Ordem de Serviços). Na Aplicação, tenho um formulario onde cadastro cliente e outro onde cadastro o veiculo. Para não ter que digitar todos os dados do cliente e do Veiculo na O.S
coloquei um botao na O.S que quando for clicado abrirá um outro Form de Consulta para o Cliente. O mesmo (Form Consulta), possui os seguinte componentes Grid para exibir o resultado da consulta, um radio Grupo para filtrar a consulta e um edit para digitar os dados a ser ser consultados.

No radio Grupo o filtro será pelo CPF ou Nome do Cliente. No Grid terá apenas o Codigo, nome, cep e Telefone do cliente sendo mostrado.

O que preciso é o seguinte:
- Após realizar a pesquisa e encontrar a informação deseja, clicar em um botao ou dar 2 cliques na linha do Grid selecionada, fechar a tela da Consulta, exibir novamente o Form da O.S e nos DBEdit receber os dados consultados no Form Consulta, ou seja os campos que preciso apenas (Nome do Cliente e Telefone)

Obrigado,
Flavio Silva

Flavio Silva

Curtidas 0

Respostas

William

William

19/02/2013

Bom Flavio, antes de tentar te ajudar vou só postar uma observação!

Vc menciona que, não quer digitar novamente os dados do cliente na OS.

Minha dúvida é, vc está gravando todos os dados (Nome, CPF, Fone etc...) do cliente novamente na tabela OS?

Caso sim, acho q seria mais fácil gravar somente o código do cliente.

********************************************************************************

Quanto a sua dúvida sobre como passar valores de um form para outro é o seguinte.

Vamos supor que a sua tabela OS vai estar em estado de inserção.

Então após vc selecionar o registro filtrado no DBGrid vc atribui os valores do dataset cliente para o dataset OS, pode ser no evento OnClick do DBGrid, OnClose do Form, exemplo com ClientDataSet:
if ClientDataSet_OS.state in [dsInsert] then
begin
   ClientDataSet_OS.FieldByName('Nome_Cliente').AsString := ClientDataSet_Cli.FieldByName('Nome_Cliente').AsString;
   ClientDataSet_OS.FieldByName('CPF').AsString := ClientDataSet_Cli.FieldByName('CPF').AsString;
   // E assim vai ...
end;


Basicamente é isso, qualquer dúvida poste novamente.
GOSTEI 0
Deivison Melo

Deivison Melo

19/02/2013

Os valores dever ser passados antes do método show, logo depois que for criado... então você conseguira levar os valores, se for do grid é interessante que você utilize o método de duplo clique no grid...

Qualquer anormalidade estou à disposição!

GOSTEI 0
Flavio Silva

Flavio Silva

19/02/2013

Bom Flavio, antes de tentar te ajudar vou só postar uma observação!

Vc menciona que, não quer digitar novamente os dados do cliente na OS.

Minha dúvida é, vc está gravando todos os dados (Nome, CPF, Fone etc...) do cliente novamente na tabela OS?

Caso sim, acho q seria mais fácil gravar somente o código do cliente.

********************************************************************************

Quanto a sua dúvida sobre como passar valores de um form para outro é o seguinte.

Vamos supor que a sua tabela OS vai estar em estado de inserção.

Então após vc selecionar o registro filtrado no DBGrid vc atribui os valores do dataset cliente para o dataset OS, pode ser no evento OnClick do DBGrid, OnClose do Form, exemplo com ClientDataSet:
if ClientDataSet_OS.state in [dsInsert] then
begin
   ClientDataSet_OS.FieldByName('Nome_Cliente').AsString := ClientDataSet_Cli.FieldByName('Nome_Cliente').AsString;
   ClientDataSet_OS.FieldByName('CPF').AsString := ClientDataSet_Cli.FieldByName('CPF').AsString;
   // E assim vai ...
end;


Basicamente é isso, qualquer dúvida poste novamente.


fiz como vc indico e ja esta meio caminho andado.

Ao inves de gravar o nome no banco configurei para gravar o numero do mesmo.
neste caso deverei criar uma campo virtual para exibir o nome do mesmo?

Quero tambem que ao dar dois clique ele feche o formulario de consulta.

E por fim, ao dar dois clique ele gerou esse erro em um dos campos

Project AutoService.exe raised exception class EdatabaseError with message "(85)9106-0990" is not a valida integer value for field "TELEFONE_CLIENTE"
GOSTEI 0
William

William

19/02/2013

Bom Flavio para visualizar o nome do cliente no DBGrid pode ser através do select mesmo, segue o link de um artigo onde demonstrei como trabalhar com várias tabelas configurando a propriedade ProviderFlags:
[url]https://www.devmedia.com.br/providerflags-no-delphi-atualizando-dados-de-uma-unica-tabela/26689[/url]

Para fechar o form no evento DblClick do DBGrid, basta:
frmConsulta.close;


Esse erro aparenta ser problema no tipo integer do campo "TELEFONE_CLIENTE", e está recebendo uma string "(85)9106-0990".

GOSTEI 0
Flavio Silva

Flavio Silva

19/02/2013

Wiiliam

Deu Certo!

As unicas obsevações que faço é a seguinte:

1 -Uso um dbnavigator, quando clico para salvar ele dados deixam de ser exibido, e só voltam quando fecho o form e abra novamente ou quando clico no botao refresh do navigator.

2 - Se eu for editar uma os cadastrada e clica no botao para abrir novamente a consulta e alterar o nome, quando dou dois clique ele nao adiciona nada e nao fecha, isso acontece só quando tento alterar uma os ja salva.
GOSTEI 0
William

William

19/02/2013


1 -Uso um dbnavigator, quando clico para salvar ele dados deixam de ser exibido, e só voltam quando fecho o form e abra novamente ou quando clico no botao refresh do navigator.


Esse é um dos efeitos colaterais em usar o DBNavigator, preferencialmente prefiro codificar botão por botão na unha mesmo.



2 - Se eu for editar uma os cadastrada e clica no botao para abrir novamente a consulta e alterar o nome, quando dou dois clique ele nao adiciona nada e nao fecha, isso acontece só quando tento alterar uma os ja salva.


Isso acontece pq o meu exemplo só atendeu a operação de insert, altere para atender a condição edit.

Modifique assim:
if ClientDataSet_OS.state in [dsInsert, dsEdit] then
begin
//Copia os dados
end;
GOSTEI 0
POSTAR