RECEBER DADOS DO FORM CONSULTA

19/02/2013

0

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

Responder

Posts

19/02/2013

William

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.
Responder

19/02/2013

Deivison Melo

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!

Responder

19/02/2013

Flavio Silva

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"
Responder

19/02/2013

William

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".

Responder

19/02/2013

Flavio Silva

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.
Responder

19/02/2013

William


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;
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar