duvida dbgrid + edit

Delphi

19/05/2014

boa tarde gente, gostaria da ajuda de vcs

tenho um formularios de cadastro onde a pessoa tem q cliar num botao q abre um form para selecionar o cliente.

como eu posso fazer para quando a pessoa apetar enter na dbgrid o nome do cliente aparecer no edit?


grato desde ja.
Pedro Henrique

Pedro Henrique

Curtidas 0

Mais Respostas

Ricardo

Ricardo

19/05/2014

Digamos que esse DBGrid esteja ligado a um ClientDataSet(mas pode ser outro componente, ou o que você esta usando),

No evento OnCellClick do DBGrid(para clicar com o mouse) / OnKeyPress do DBGrid(para tecla enter) você coloca: edit.Text :='ClientDataSetnome_do_campo.AsString';

ou

edit.Text :='ClientDataSet.FieldByName('nome_do_campo').AsString';


Lembrando que o AsString você usa se estiver trabalhando com um campo do tipo string. Se for outro tipo tem que converter.
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

meu dbgrib ra ligado a um datasouce.
GOSTEI 0
Romulo Silva

Romulo Silva

19/05/2014

edit.Text := SuaQuelry.FieldByName('nomedocampo').AsString'
GOSTEI 0
Ricardo

Ricardo

19/05/2014

meu dbgrib ra ligado a um datasouce.


Certo, mas o Dataset do seu DataSource esta ligado a que? é esse componente que você vai colocar no código.
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

no caso a minha dbgrid ta ligada com o datasource q ta ligado com uma Zreadonlyquery do componente Zeos
GOSTEI 0
Ricardo

Ricardo

19/05/2014

Putz nunca precisei usar o Zeus pra nada, por isso nem conheço os seus componentes direito.

Mas enfim, se ele for equivalente a uma query por exemplo, pode ser que funcione ou não se você colocar

Zreadonlyquery.FieldByName('campo').AsXXXXX

Enfim tenho que procurar mais informações sobre o componente para ser mais preciso, mas mesmo assim tenta aí.
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

deu certo nao, sempre da esse erro. segue imagem[img]http://arquivo.devmedia.com.br/forum/imagem/359568-20140521-123252.png[/img]
GOSTEI 0
Deivison Melo

Deivison Melo

19/05/2014

O erro que está ocorrendo agora é devido o delphi está tentando abrir um objeto que já está aberto e na memória, sendo necessário verificar com o comando: Assigned antes de abrir novamente ou está tentando acessar um objeto que ainda não foi instanciado pelo delphi.

Já referente a sua dúvida:

E algum dos eventos do DBGrid vc coloca o comando abaixo, ou no DblClick (quando houver um duplo clique):

edtCodCli.Text := dbgConsulta.Columns[0].Field.AsString; // onde o 0 é o index da coluna
edtNomeCli.Text := dbgConsulta.Columns[1].Field.AsString; // onde o 1 é o index da coluna

Abração e bons códigos, espero ter ajudado!

Qualquer dúvida postar para ajudarmos da melhor forma possível!!
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

mt obrigado Deivison, sua dica deu certo. vlw cara :)
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

desculpe encher o saco de vcs, quando eu fiz a parte de edita um cadastro passando os dados por parametro deu o seginte erro(imagem) nao consigo encontrar o erro. sera q vcs poderiam me ajudar?
[img]http://arquivo.devmedia.com.br/forum/imagem/359568-20140522-135527.png[/img]

codigo:
with DM.DataM.ZQueryCadCli do
              begin
                SQL.Clear;
                SQL.Add('UPDATE cliente SET)');
                SQL.Add(' nomecli = :nomecli,)');
                SQL.Add(' telcli = :telcli,)');
                SQL.Add(' endcli = :endcli,)');
                SQL.Add(' obscli = :obscli,)');
                SQL.Add(' idadecli = :idadecli,)');
                SQL.Add(' dtnasccli = :dtnasccli)');
                SQL.Add('WHERE codcli = :codcli)');
                ParamByName('nomecli').AsString := EditNomeCli.Text;
                ParamByName('telcli').AsString := EditTelCli.Text;
                ParamByName('endcli').AsString := EditEndCli.Text;
                ParamByName('obscli').AsString := MemoObsCli.Text;
                ParamByName('idadecli').AsInteger := StrToInt(EditIdadeCli.Text);
                ParamByName('dtnasccli').AsDate :=  DtNascEdit.Date;
                ParamByName('codcli').AsInteger :=  StrToInt(LabelCodCli.Caption);
                ExecSQL;
              end;
GOSTEI 0
Lourival Queiroz

Lourival Queiroz

19/05/2014

Eu passei por esse problema a tempo, e resolvi criando um padrão de pesquisa e outro de manutenção. A ideia é facilitar a manutenção do sistema e ter apenas um Form para pesquisa e outro para manutenção (Incluir/Alterar). Nos Forms padrões eu faço todos os códigos básicos (Abertura de query, tratamento enter, help, botões, etc), e as exceções ficam no Form herdado. Abaixo um exemplo simples de ambos.

Form de Pesquisa (Exclui/Imprime nesse form) (Inclui/Altera efetua chamada no form de manutenção):
[img]http://arquivo.devmedia.com.br/forum/imagem/318028-20140522-151813.png[/img]

Form de Manutenção (Inclusão/Alteração) os campos são associados a query do form de pesquisa:
[img]http://arquivo.devmedia.com.br/forum/imagem/318028-20140522-151759.png[/img]

Com isso economizei tempo pra desenvolver o sistema.

Espero que vc possa solucionar teu problema.
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

criei um form para cadastrar,editar e excluir cada funcao separada por uma tab.

pra editar eh assim: o operador seleciona o cliente numa dbgrib e as informacoes aparece direto nos edits, dai edito como quer ai depois do um Update no banco passando as novas infor pro parametro.
GOSTEI 0
Ricardo Araujo

Ricardo Araujo

19/05/2014

conseguiu resolver o seu problema ?
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

ainda nao, da o mesmo erro ainda. ele nao ta encontrando as info. nem no update nem do delete.
GOSTEI 0
Nelson Santos

Nelson Santos

19/05/2014

ganhe dinheiro com softwares 3D com Delphi 7
http://www.3dsistemas.com.br
GOSTEI 0
Lourival Queiroz

Lourival Queiroz

19/05/2014

Em todos os campos para update vc tinha colocado um ")" sem necessidade. Compare com o teu update

with DM.DataM.ZQueryCadCli do
              begin
                SQL.Clear;
                SQL.Add('UPDATE cliente SET ');                                                                           
                SQL.Add(' nomecli = :nomecli, ');
                SQL.Add(' telcli = :telcli, ');
                SQL.Add(' endcli = :endcli, ');
                SQL.Add(' obscli = :obscli, ');
                SQL.Add(' idadecli = :idadecli, ');
                SQL.Add(' dtnasccli = :dtnasccli ');
                SQL.Add('WHERE codcli = :codcli ');
                ParamByName('nomecli').AsString := EditNomeCli.Text;
                ParamByName('telcli').AsString := EditTelCli.Text;
                ParamByName('endcli').AsString := EditEndCli.Text;
                ParamByName('obscli').AsString := MemoObsCli.Text;
                ParamByName('idadecli').AsInteger := StrToInt(EditIdadeCli.Text);
                ParamByName('dtnasccli').AsDate :=  DtNascEdit.Date;
                ParamByName('codcli').AsInteger :=  StrToInt(LabelCodCli.Caption);
                ExecSQL;
              end;
GOSTEI 0
Pedro Henrique

Pedro Henrique

19/05/2014

kkkkkkkkk, verdade. noa tinha visto isso. aff erro de amador.

mt obrigado lorival. desculpe a demora pra responder.
GOSTEI 0
Deivison Melo

Deivison Melo

19/05/2014

Finalizando o post!!

Abração a todos e bons códigos!!!
GOSTEI 0
Lucas Mees

Lucas Mees

19/05/2014

Eu utilizo o Componente Zeos mas acho que n influencia no seu caso vou lha passar um pedaço do codigo que eu fiz para isto

utilizando o OnDblClick, mas acho que o procedimento é igual para os demais eventos
os If's são para verificar se o campo do banco esta vazio ou nulo
ai ele pula para o proximo if e não passa para o edit pq no meu caso ele ocorre um erro de tipos de valores incorretos.
if (DM_Agenda.tbl_compromisso.FieldByName ('descricao_compromisso').Value <> '') then
    EdDescricao.Text  := DM_Agenda.tbl_compromisso.FieldByName ('descricao_compromisso').Value;

  if (DM_Agenda.tbl_compromisso.FieldByName ('data_inicio_compromisso').Value <> null) then
    EdDtInicio.Date   := DM_Agenda.tbl_compromisso.FieldByName ('data_inicio_compromisso').Value;

  if (DM_Agenda.tbl_compromisso.FieldByName ('data_fim_compromisso').Value <> null) then
    EdDtFim.Date      := DM_Agenda.tbl_compromisso.FieldByName ('data_fim_compromisso').Value;

  if (DM_Agenda.tbl_compromisso.FieldByName ('hora_inicio_compromisso').Value <> null) then
    EdHoraInicio.Text := DM_Agenda.tbl_compromisso.FieldByName ('hora_inicio_compromisso').Value;

  if (DM_Agenda.tbl_compromisso.FieldByName('hora_fim_compromisso').Value <> null) then
    EdHoraFim.Text := DM_Agenda.tbl_compromisso.FieldByName('hora_fim_compromisso').Value;

  if (DM_Agenda.tbl_compromisso.FieldByName ('rua_compromisso').Value <> null) then
    EdRua.Text := DM_Agenda.tbl_compromisso.FieldByName ('rua_compromisso').Value;

  if (DM_Agenda.tbl_compromisso.FieldByName('lembrete_popup_compromisso').Value <> Null) then
    rbPopUp.Checked := DM_Agenda.tbl_compromisso.FieldByName('lembrete_popup_compromisso').Value;

  if (DM_Agenda.tbl_compromisso.FieldByName('lembrete_email_compromisso').Value <> Null) then
    rbEmail.Checked := DM_Agenda.tbl_compromisso.FieldByName('lembrete_email_compromisso').Value;
GOSTEI 0
POSTAR