DbEdit.SetFocus = Access Violation
07/11/2005
0
Mas ele gera um access violation.
Não estou conseguinmdo saber o por que.
Agradeço a Ajuda.
Obrigado;
Buck
Posts
07/11/2005
Wiltonfenix
07/11/2005
Martins
Verifique se esse edit está no mesmo local, pq caso ele esteja em outro form (pouco provavel), caso vc esteja usando PageControl ou se esse edit estiver invisivel, esse erro será apresentado.
verifique.
Boa sorte!!!
07/11/2005
Martins
Acredito q deva existir esse Edit2, caso contrário o código dele não compilaria, tá estranho isso, pq mesmo q estive invisivel para o controle o erro apresentado deveria ser outro, e não esse de violação de acesso.
Precisamos de mais detalhes para avaliar o paciente, hehehe!!!
07/11/2005
Wiltonfenix
Porque como o Martins disse, ele pode estar em outro Form ou outro componente que não foi criado.
07/11/2005
Buck
Mas a função está no OnChange da dbEdit1, pois há o Form da ´Consulta´ em cima. Ao Clicar no Grid do Form ´Consulta´, ele volta com o Nome na dbEDIT1.
É aí que o SetFocus tá dando pau...
08/11/2005
Buck
mas se colocar ´if form.showing = true then´, aí ele roda, mas dá aquele erro de access violation depois.
08/11/2005
Anfm
08/11/2005
Martins
Vc chama o form de consulta de onde? vamos supor.
form1 -> o q tem seus dbedits
form2 -> o q tem o dbgrid
vc chama o form2 através do form1? Se for, é só vc colocar assim.
Form2.ShowModal; DBEdit1.Text := Form2.DBGrid1.Fields[0].AsString;
se vc estiver selecionando o campo com OnDbClick no grid, para q ele retorne para form1 com o valor e automaticamente vá para DbEdit2. tente assim
Form1.Edit1.Text:= DbGrid1.Fields[0].AsString; close;
Ou então pode o código q vc tá usando, fica bem mais fácil.
08/11/2005
Martins
Como vc está fazendo essa chamada dos forms, e carregando o valor nos DbEdit´s, entendo q o evento no OnChage é para ser disparado ao receber um valor, valor este q virá da consulta para DbEdit1, recebendo esse valor vá para DbEdit2, mesmo assim não sei se é bom negócio deixar desse jeito, pq vc poderia setar isso condicionalmente, mas vamos ao erro aos forms. Se vc puder postar o código aqui fica mais fácil de chagarmos a uma solução caso vc ainda não tenha encontrado.
08/11/2005
Buck
no form1, ficam as DbEdits.
no Form2, fica o dbGrid.
onEnter da dbEdit1, ele chama o Form2 (consulta)
onCellClick do dbGrid, ele fecha o Form2 e preenche a dbEdit1.
OnChange dbEdit1 (Form1)
dbEdit2.SetFocus;
mas se colocar assim no ONChange ele nem roda,
então:
if form1.showing = true then
OnChange dbEdit1 (Form1)
dbEdit2.SetFocus;
........
é isso pessoal,
muito estranho esse erro.
Agradeço a cooperação de vocês...
Abraço !
08/11/2005
Martins
Vc viu e testou o q eu postei, pq vc tem os dois forms do jeito q eu imaginei.
veja novamente.
form1 -> o q tem seus dbedits
form2 -> o q tem o dbgrid
Código:
procedure TForm1.DBEdit1Enter(Sender: TObject); begin Form2.ShowModal; DBEdit1.Text:= Form2.DBGrid1.Fields[0].AsString; DBEdit2.Text:= Form2.DBGrid1.Fields[1].AsString; end; procedure TForm1.Edit1Change(Sender: TObject); begin DBEdit2.SetFocus; end;
Assim quando vc fechar o form de consulta ele trará o registro setado no dbgrid, sendo 0 o primeiro campo, vc pode alterar para sua necessidade.
Ao clicar em OnCellClick, será disparado o close, pq o registro é setado
no momento em q vc clicar sobre a célula.
close;
Qualquer coisa, te mando um exemplo por e-mail, posta aí teu e-mail q eu mando.
Clique aqui para fazer login e interagir na Comunidade :)