Form de consulta levar dados para cadastro

Delphi

Lazarus

16/03/2019

Boa noite!
Estou tendo problemas para transferir os dados do form de comsulta que criei para o form de cadastro,

O esquema é que no software que estou desenvolvendo quando o usuario esta cadastrando um cliente, ele precisa vincular uma das cidades cadastradas.

Para isso fiz que quando o usuario apertar um botao no form de cadastro de clientes abrice o form de consulta de cidade, até aqui tudo funcionando corretamente o form de consulta, busca no banco de dados tudo certo, mas o problema agora é levar o ID da cidade que o usuario selecionou para o form ds cadastro de cliente e botar no edit. como faço isso?

Obs uso lazarus e o zeos
Leonardo

Leonardo

Curtidas 0

Respostas

Fernando Wahl

Fernando Wahl

16/03/2019

Boa tarde Leandro.

Acredito que o que vc precisa fazer é pegar o id do form de consulta que selecionou e colocar esse valor dentro do form de cadastro de cliente certo?
fazassim:

campoformcliente.value := formConsulta.campoquevcquer.value;

Mas isso vc tem que fazer diretamente no form de cadastro de cliente, pois quando volta da tela de consulta que dai que vc tem que fazer essa operação.

Caso vc faça diretamente com comandos selects no form de busca, vc tem que pegar pelo pelo Fieldbyname, pode trabalhar com objetos tbm ai dessa forma fica até mais simples.

:=> Dentro do Form de busca.
objNome := FieldByName('NOME').AsString;

:=> Dentro do Form de Cadastro de Cliente:
edtNome.text := objNome;

Não esquecendo de fazer toda a estrutura para orientação a objetos.

Espero que tenha te dado uma luz, abraços.

Qualquer coisa posta ai que a gente vai olhando.
GOSTEI 0
Hélio Devmedia

Hélio Devmedia

16/03/2019

Olá Leonardo, você pode fazer isso de duas formas:

1º - Dar um Create no Formulário, fazer a busca e quando dar ok, não destruir o formulário e nem fechar o dataset, assim você pega desse jeito, acompanhe a idéia:

frmPrincipal.edCidade.text:=frmConsultaCidade.edCidadeID.text;

É só depois que fizer isto você destrói o formulário.



2ª - Colocar um datamodule com os datasets, e depois que você fizer a consulta você atribui diretamente o id de um datasetParao outro, poe exemplo:


DataModule.dsCliente.FieldByName('ID_CIDADE').asInteger:=DataModule.dsConsultaCidade.FieldByName('ID_CIDADE').asInteger;


Espero que eu tenha iluminado você no que você precisa.

Um forte abraço e fique com Deus.

GOSTEI 0
Leonardo

Leonardo

16/03/2019

Boa tarde Leandro.

Acredito que o que vc precisa fazer é pegar o id do form de consulta que selecionou e colocar esse valor dentro do form de cadastro de cliente certo?
fazassim:

campoformcliente.value := formConsulta.campoquevcquer.value;

Mas isso vc tem que fazer diretamente no form de cadastro de cliente, pois quando volta da tela de consulta que dai que vc tem que fazer essa operação.

Caso vc faça diretamente com comandos selects no form de busca, vc tem que pegar pelo pelo Fieldbyname, pode trabalhar com objetos tbm ai dessa forma fica até mais simples.

:=> Dentro do Form de busca.
objNome := FieldByName('NOME').AsString;

:=> Dentro do Form de Cadastro de Cliente:
edtNome.text := objNome;

Não esquecendo de fazer toda a estrutura para orientação a objetos.

Espero que tenha te dado uma luz, abraços.

Qualquer coisa posta ai que a gente vai olhando.


Olha, Eu acho que não entendi.
campoformcliente.value := formConsulta.campoquevcquer.value;

Eu crio uma procedure com esse código e vinculo a um evento? se sim qual evento?

porque minha tentativa foi a seguinte,
quando na tela de cadastro de cliente, aperta um Button, e abre o form de consulta, no form de consulta tem um DBgrid vinculado com um datasource com um evento no onchange, que faz com que alimente vários edit cada um referente a uma coluna do bando de dados para isso usei FieldByName('Coluna').AsString, Até ai funcionou corretamente, só que coloquei um button que no evento onclick devia mandar o id que estava num edit do form de consulta para o edit no form de cadastro só que eu não consigo dessa forma porque preciso colocar a unit do cadastro no uses do form de consulta, só que o form de cadastro ja tem a unit do form de consulta no uses, então da erro circular refereces.


Você comentou que por objetos é mais simples, mas eu não sei trabalhar com objetos, ou pelo menos acho que não sei, sou novo na programação.

GOSTEI 0
Hélio Devmedia

Hélio Devmedia

16/03/2019

Boa tarde Leandro.

Acredito que o que vc precisa fazer é pegar o id do form de consulta que selecionou e colocar esse valor dentro do form de cadastro de cliente certo?
fazassim:

campoformcliente.value := formConsulta.campoquevcquer.value;

Mas isso vc tem que fazer diretamente no form de cadastro de cliente, pois quando volta da tela de consulta que dai que vc tem que fazer essa operação.

Caso vc faça diretamente com comandos selects no form de busca, vc tem que pegar pelo pelo Fieldbyname, pode trabalhar com objetos tbm ai dessa forma fica até mais simples.

:=> Dentro do Form de busca.
objNome := FieldByName('NOME').AsString;

:=> Dentro do Form de Cadastro de Cliente:
edtNome.text := objNome;

Não esquecendo de fazer toda a estrutura para orientação a objetos.

Espero que tenha te dado uma luz, abraços.

Qualquer coisa posta ai que a gente vai olhando.


Olha, Eu acho que não entendi.
campoformcliente.value := formConsulta.campoquevcquer.value;

Eu crio uma procedure com esse código e vinculo a um evento? se sim qual evento?

porque minha tentativa foi a seguinte,
quando na tela de cadastro de cliente, aperta um Button, e abre o form de consulta, no form de consulta tem um DBgrid vinculado com um datasource com um evento no onchange, que faz com que alimente vários edit cada um referente a uma coluna do bando de dados para isso usei FieldByName('Coluna').AsString, Até ai funcionou corretamente, só que coloquei um button que no evento onclick devia mandar o id que estava num edit do form de consulta para o edit no form de cadastro só que eu não consigo dessa forma porque preciso colocar a unit do cadastro no uses do form de consulta, só que o form de cadastro ja tem a unit do form de consulta no uses, então da erro circular refereces.


Você comentou que por objetos é mais simples, mas eu não sei trabalhar com objetos, ou pelo menos acho que não sei, sou novo na programação.




Olá Leonardo, tudo bem?

Primeiramente, por uma questão prática, não há necessidade de implementar um OnChange no dataSource para enviar os dados para os Tedits. Basta colocar DBEdits, liga-los no datasource assim como faz com o DBGrid e mudar a propriedade DataField para o mesmo campo da tabela que você deseja mostrar.

Outra coisa, quando você seleciona uma linha no dbgrid o dataset seleciona o mesmo registro, assim o botão que envia o ID simplesmente deve pegar o valor que está no dataset, assim:

datasource.dataset.FieldByName('ID').asInteger;

e você pode fazer isso direto no dataSet do cadastro de clientes por exemplo:

dsCliente.FieldByName('ID_CIDADE').asInteger:=datasource.dataset.FieldByName('ID').asInteger;

Espero ter esclarecido.
Um forte abraço e Fique com Deus.
GOSTEI 0
Leonardo

Leonardo

16/03/2019

Boa tarde Leandro.

Acredito que o que vc precisa fazer é pegar o id do form de consulta que selecionou e colocar esse valor dentro do form de cadastro de cliente certo?
fazassim:

campoformcliente.value := formConsulta.campoquevcquer.value;

Mas isso vc tem que fazer diretamente no form de cadastro de cliente, pois quando volta da tela de consulta que dai que vc tem que fazer essa operação.

Caso vc faça diretamente com comandos selects no form de busca, vc tem que pegar pelo pelo Fieldbyname, pode trabalhar com objetos tbm ai dessa forma fica até mais simples.

:=> Dentro do Form de busca.
objNome := FieldByName('NOME').AsString;

:=> Dentro do Form de Cadastro de Cliente:
edtNome.text := objNome;

Não esquecendo de fazer toda a estrutura para orientação a objetos.

Espero que tenha te dado uma luz, abraços.

Qualquer coisa posta ai que a gente vai olhando.


Olha, Eu acho que não entendi.
campoformcliente.value := formConsulta.campoquevcquer.value;

Eu crio uma procedure com esse código e vinculo a um evento? se sim qual evento?

porque minha tentativa foi a seguinte,
quando na tela de cadastro de cliente, aperta um Button, e abre o form de consulta, no form de consulta tem um DBgrid vinculado com um datasource com um evento no onchange, que faz com que alimente vários edit cada um referente a uma coluna do bando de dados para isso usei FieldByName('Coluna').AsString, Até ai funcionou corretamente, só que coloquei um button que no evento onclick devia mandar o id que estava num edit do form de consulta para o edit no form de cadastro só que eu não consigo dessa forma porque preciso colocar a unit do cadastro no uses do form de consulta, só que o form de cadastro ja tem a unit do form de consulta no uses, então da erro circular refereces.


Você comentou que por objetos é mais simples, mas eu não sei trabalhar com objetos, ou pelo menos acho que não sei, sou novo na programação.




Olá Leonardo, tudo bem?

Primeiramente, por uma questão prática, não há necessidade de implementar um OnChange no dataSource para enviar os dados para os Tedits. Basta colocar DBEdits, liga-los no datasource assim como faz com o DBGrid e mudar a propriedade DataField para o mesmo campo da tabela que você deseja mostrar.

Outra coisa, quando você seleciona uma linha no dbgrid o dataset seleciona o mesmo registro, assim o botão que envia o ID simplesmente deve pegar o valor que está no dataset, assim:

datasource.dataset.FieldByName('ID').asInteger;

e você pode fazer isso direto no dataSet do cadastro de clientes por exemplo:

dsCliente.FieldByName('ID_CIDADE').asInteger:=datasource.dataset.FieldByName('ID').asInteger;

Espero ter esclarecido.
Um forte abraço e Fique com Deus.


Bom, primeiramente obrigado pela dica do DBedit, funcionou, mas agora estou tendo problemas quanto ao botão que envia, não consegui entender o que você esta explicando.
GOSTEI 0
Leonardo

Leonardo

16/03/2019

Consegui resolver, se eu declarar o uses abaixo do implementation, ele não da circular references
GOSTEI 0
POSTAR