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
08/11/2005
Emerson Nascimento
OnEnterDoDBEdit1
Application.CreateForm(TForm2,Form2);
Form2.ShowModal;
DBEdit1.Field.Value := Form2.ItemClicado;
FreeAndNil(Form2);
DBEdit2.SetFocus;
e não use mais o OnChange
08/11/2005
Martins
Mais ou menos assim [b:492c90fff5]emerson.en[/b:492c90fff5]
Application.CreateForm(TForm2, Form2); Form2.ShowModal; DBEdit1.Text:= Form2.DBGrid1.Fields[0].AsString; DBEdit2.Text:= Form2.DBGrid1.Fields[1].AsString; FreeAndNil(Form2); DBEdit2.SetFocus;
10/11/2005
Cabelo
assim funciona..
10/11/2005
Martins
Cara isso aí tá complicado, dá pra explicar com mais detalhes o q vc tá fazendo, pq nós estamos cegos, e aí fica complicado, já tentamos n soluções e nada. Queremos ajudar mais precisamos de detalhes, de código.
10/11/2005
Buck
OnEnter - DbEdit1
if DBComboBox1.Text = ´´ then
begin
messageDlg(´Selecione o Tipo da Venda´, mtError, [mbOk],0);
DBComboBox1.SetFocus;
end
else
if (dmVendas.tblVenda_Atac.State = dsEdit) or (dmVendas.tblVenda_Atac.State = dsInsert) then
dmVendas.tblVenda_Atac.Post;
frmCons_Produto.showmodal;
FORM2 - frmCons_Produto
if frmVenda_Atac.Showing = true then
begin
if (dmVendas.tblVenda_Prod_Atac.State = dsInsert) or (dmVendas.tblVenda_Prod_Atac.State = dsEdit) then
begin
close;
dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value;
end
else
begin
close;
dmVendas.tblVenda_Prod_Atac.Insert;
dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value;
frmVenda_Atac.dbEdit2.setFotcus;
end
end
else
frmCad_Produto.showmodal;
10/11/2005
Emerson Nascimento
FORM1 - FrmVenda_Atac OnEnter - DbEdit1 if DBComboBox1.Text = ´´ then begin messageDlg(´Selecione o Tipo da Venda´, mtError, [mbOk],0); DBComboBox1.SetFocus; end else if (dmVendas.tblVenda_Atac.State = dsEdit) or (dmVendas.tblVenda_Atac.State = dsInsert) then dmVendas.tblVenda_Atac.Post; frmCons_Produto.showmodal; FORM2 - frmCons_Produto if frmVenda_Atac.Showing = true then begin if (dmVendas.tblVenda_Prod_Atac.State = dsInsert) or (dmVendas.tblVenda_Prod_Atac.State = dsEdit) then begin close; dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; end else begin close; dmVendas.tblVenda_Prod_Atac.Insert; dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; frmVenda_Atac.dbEdit2.setFotcus; end end else frmCad_Produto.showmodal;
creio que o erro esteja nos CLOSE mal utilizados (ou utilizados em momento impróprio)
if frmVenda_Atac.Showing = true then begin if (dmVendas.tblVenda_Prod_Atac.State = dsInsert) or (dmVendas.tblVenda_Prod_Atac.State = dsEdit) then begin close; /**** ESSE CLOSE ESTÁ FECHANDO O frmVenda_Atac ****/ dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; end else begin close; /**** ESSE CLOSE ESTÁ FECHANDO O frmVenda_Atac ****/ dmVendas.tblVenda_Prod_Atac.Insert; dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; frmVenda_Atac.dbEdit2.setFotcus; /**** frmVenda_Atac ESTÁ FECHADO ****/ end end else frmCad_Produto.showmodal;
10/11/2005
Emerson Nascimento
FORM1 - FrmVenda_Atac OnEnter - DbEdit1 if DBComboBox1.Text = ´´ then begin messageDlg(´Selecione o Tipo da Venda´, mtError, [mbOk],0); DBComboBox1.SetFocus; end else if (dmVendas.tblVenda_Atac.State = dsEdit) or (dmVendas.tblVenda_Atac.State = dsInsert) then dmVendas.tblVenda_Atac.Post; frmCons_Produto.showmodal; FORM2 - frmCons_Produto if frmVenda_Atac.Showing = true then begin if (dmVendas.tblVenda_Prod_Atac.State = dsInsert) or (dmVendas.tblVenda_Prod_Atac.State = dsEdit) then begin close; dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; end else begin close; frmVenda_Atac.SetFocus; /*** PÕE O frmVenda_Atac EM FOCO ***/ dmVendas.tblVenda_Prod_Atac.Insert; dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; frmVenda_Atac.dbEdit2.setFotcus; end end else frmCad_Produto.showmodal;
10/11/2005
Emerson Nascimento
se você quiser mande seu projeto para emerson.en@gmail.com
porque eu não consegui simular esse erro.
10/11/2005
Vitor Rubio
você debugou o programa passo a passo para ver em qual linha que ocorre o access violation?
você dá free ou release em alguma form quando fecha?
os componentes de acesso a dados, tipo datasets e datasources onde esses dbedits estão ligados, ficam na mesma form q o dbedits, na outra form ou num datamodule?
tudo que vc está acessando está devidamente criado?
se o access violation for no endereço 00000000... ou FFFFFFF.... quer dizer que você usou uma variavel de uma classe qualquer sem criar ou instanciar. ou a destruiu sem ela estar criada.
se o endereço for diferente disso, quer dizer que você está tentando acessar um objeto que existia e estava instanciado, mas você o destruiu antes do tempo, sem saber que precisaria dele depois.
espero ter ajudado...
10/11/2005
Martins
FORM1 - FrmVenda_Atac OnEnter - DbEdit1 if DBComboBox1.Text = ´´ then begin messageDlg(´Selecione o Tipo da Venda´, mtError, [mbOk],0); DBComboBox1.SetFocus; end else if (dmVendas.tblVenda_Atac.State = dsEdit) or (dmVendas.tblVenda_Atac.State = dsInsert) then dmVendas.tblVenda_Atac.Post; // Salva a tabela Venda_atacado frmCons_Produto.showmodal; // Abri o form2 FORM2 - frmCons_Produto if frmVenda_Atac.Showing = true then begin if (dmVendas.tblVenda_Prod_Atac.State = dsInsert) or (dmVendas.tblVenda_Prod_Atac.State = dsEdit) then begin close; //Esse close aqui vai fechar esse form2 dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; end else begin close; //Fecha aqui tb ... Form1. dmVendas.tblVenda_Prod_Atac.Insert; dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; frmVenda_Atac.dbEdit2.setFotcus; //vc não pode ir para cá, pq vc fechou. end end else frmCad_Produto.showmodal;
Reveja estes close, esse código precisa ser refeito.
10/11/2005
Vitor Rubio
... else begin close; //Fecha aqui tb ... Form1. dmVendas.tblVenda_Prod_Atac.Insert; dmVendas.tblVenda_Prod_AtacProduto.Value := dmVendas.tblProdutoNome.Value; frmVenda_Atac.dbEdit2.setFotcus; //vc não pode ir para cá, pq vc fechou. end end else frmCad_Produto.showmodal;
Martins, se ele está numa procedure da form2 e não está usando with form1 ou form1.close, esse close que você citou vai fechar a propria form2 q ele está trabalhando mesmo, a form 1 continua aberta.
Clique aqui para fazer login e interagir na Comunidade :)