Fórum Excessão StackOverflow ao fechar formulário #348800
11/11/2007
0
Tenho um formulário onde nele possui os seguintes componentes:
1 dbGrid lincado a tabela EMPRESAS
1 Edit chamado edProcEmpresa
Neste formulário há os seguintes códigos:
procedure TFrmProcEmpresa.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Close;
end;
procedure TFrmProcEmpresa.grdEmpresaCellClick(Column: TColumn);
begin
Try
FrmLanContratos.edEmp.Text := dmRC.dsEmpresaRAZAOSOCIAL.AsString;
FrmLanContratos.lbEmp.Caption := ´Empresa: ´+inttostr(dmRc.dsEmpresaCODEMPRESA.AsInteger);
Close;
Except
begin
BEEP;
if Messagedlg(´Deseja fechar a janela?´,mtConfirmation,[MbYes,mbNo],0)=mrYes then
FrmProcEmpresa.Close;
end;
end;
end;
procedure TFrmProcEmpresa.FormShow(Sender: TObject);
begin
if dmRC.Banco.Connected = false then
dmRC.Banco.Connected := true;
if dmRc.Transacao.Active = false then
dmRc.Transacao.Active := true;
if dmRc.dsEmpresa.Active = false then
dmRc.dsEmpresa.Active := true;
end;
Utilizo banco de dadosFirebird 1.5, Delphi 7 e a paleta Interbase
No evento onChange do Edit há o código:
procedure TFrmProcEmpresa.edProcEmpresaChange(Sender: TObject);
begin
with dmRC.dsEmpresa do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(´select * from EMPRESAS´);
SelectSQL.Add(´Where RAZAOSOCIAL =:PARAMETRO´);
ParambyName(´PARAMETRO´).AsString := (Trim(edProcEmpresa.Text)+´¬´);
Prepare;
Open;
end;
end;
Porém a consulta retorna em branco, e ao tentar fechar o formulário aparece o seguinte erro:
Project RC.exe raised class EStackOverflow with message ´Stack overflow´. Process stopped. Use Step or Run to continue.
Alguém pode me ajudar a resolver esse problema?
1 dbGrid lincado a tabela EMPRESAS
1 Edit chamado edProcEmpresa
Neste formulário há os seguintes códigos:
procedure TFrmProcEmpresa.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Close;
end;
procedure TFrmProcEmpresa.grdEmpresaCellClick(Column: TColumn);
begin
Try
FrmLanContratos.edEmp.Text := dmRC.dsEmpresaRAZAOSOCIAL.AsString;
FrmLanContratos.lbEmp.Caption := ´Empresa: ´+inttostr(dmRc.dsEmpresaCODEMPRESA.AsInteger);
Close;
Except
begin
BEEP;
if Messagedlg(´Deseja fechar a janela?´,mtConfirmation,[MbYes,mbNo],0)=mrYes then
FrmProcEmpresa.Close;
end;
end;
end;
procedure TFrmProcEmpresa.FormShow(Sender: TObject);
begin
if dmRC.Banco.Connected = false then
dmRC.Banco.Connected := true;
if dmRc.Transacao.Active = false then
dmRc.Transacao.Active := true;
if dmRc.dsEmpresa.Active = false then
dmRc.dsEmpresa.Active := true;
end;
Utilizo banco de dadosFirebird 1.5, Delphi 7 e a paleta Interbase
No evento onChange do Edit há o código:
procedure TFrmProcEmpresa.edProcEmpresaChange(Sender: TObject);
begin
with dmRC.dsEmpresa do
begin
Close;
SelectSQL.Clear;
SelectSQL.Add(´select * from EMPRESAS´);
SelectSQL.Add(´Where RAZAOSOCIAL =:PARAMETRO´);
ParambyName(´PARAMETRO´).AsString := (Trim(edProcEmpresa.Text)+´¬´);
Prepare;
Open;
end;
end;
Porém a consulta retorna em branco, e ao tentar fechar o formulário aparece o seguinte erro:
Project RC.exe raised class EStackOverflow with message ´Stack overflow´. Process stopped. Use Step or Run to continue.
Alguém pode me ajudar a resolver esse problema?
Lightshine
Curtir tópico
+ 0
Responder
Posts
11/11/2007
Micheus
procedure TFrmProcEmpresa.FormClose(Sender: TObject; var Action: TCloseAction); begin Close; end;
O evento OnClose é gerado justamente por um close, então significa que vc vai ficar rechamando o evento. Se vc precisa fazer algo aqui, então deve ser definir o tipo de ação (Action) a ser executada quando o evento é chamado normalmente vc faria algo como:
procedure TFrmProcEmpresa.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; // diz para liberar o form end;
...
SelectSQL.Add(´Where RAZAOSOCIAL =:PARAMETRO´);
ParambyName(´PARAMETRO´).AsString := (Trim(edProcEmpresa.Text)+´¬´);
...
quando vc pretende fazer uma busca por aproximação, vc utiliza um LIKE e não o ´=´. Inclusive porque vc está concatenando um ´¬´ no seu parâmetro, o que praticamente insinua que vc quer utilizar o like.Este provavelmente é o motivo pelo qual vc não encontra nada. Então o certo seria:
...
SelectSQL.Add(´Where RAZAOSOCIAL LIKE :PARAMETRO´);
ParambyName(´PARAMETRO´).AsString := (Trim(edProcEmpresa.Text)+´¬´);
...
Abraços
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)