Duvidas com If, end, else, begin?

Delphi

27/11/2006

Boa tarde pessoal, eu estou em duvidas com esse codigo usando o if, end, else, begin.
procedure TForm8.Edit2Exit(Sender: TObject);
begin
  if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then begin
     maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString;
     maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString;
     maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString;
  end else begin
      messagedlg(´Atenção Usuário! Numero da sequencia digitada ´ + edit2.text + ´ não Localizada´,mterror,[mbOk],0);
      if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes then begin
         edit2.text:=´´;
         edit2.setfocus;
      end else begin
         maskedit1.enabled:=true;
         maskedit2.enabled:=true;
         maskedit3.enabled:=true;
         MASKedit1.SETFOCUS;
      end;
  end;
end;
Esta mostrando a mensagem [color=red:fb21bc3dac]messagedlg(´Atenção Usuário! Numero da sequencia digitada ´ + edit2.text + ´ não Localizada´,mterror,[mbOk],0);
if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes [/color:fb21bc3dac] e eu nao sei como fazer corretamente para mostrar a mensagem somente uma vez.

Agradeço a ajuda de todos
Adriano


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Campsoft

Campsoft

27/11/2006

Cara, eu criaria uma variavel booleana e deixaria ela TRUE no activate do form e definiria ela como false no OnExit do edit, junto com o primeiro erro.


GOSTEI 0
Campsoft

Campsoft

27/11/2006

so complementando...

dai bastaria vc checar antes do erro se esta variavel esta em true... se estiver, exibe... se nao..


GOSTEI 0
Adriano_servitec

Adriano_servitec

27/11/2006

so complementando... dai bastaria vc checar antes do erro se esta variavel esta em true... se estiver, exibe... se nao..

Olah amigo, primeiramente obrigado por responder minha duvida, mais como devo fazer para que nao repita a mensagem duas vezes?

Tipo eu fiz assim, criei uma variavel booleana global aki
var
Form8: TForm8;
Dt1, Dt2 : TDate;
[b:d9b952665f]Confirma : Boolean;[/b:d9b952665f]

ai no codigo para confirmar como devo fazer?
fiz assim, mais sem resultado
procedure TForm8.Edit2Exit(Sender: TObject);
begin
if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then begin
maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString;
maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString;
maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString;
end else begin
[b:d9b952665f]if confirma then begin[/b:d9b952665f]
messagedlg(´Atenção Usuário! Numero da sequencia digitada ´ + edit2.text + ´ não Localizada´,mterror,[mbOk],0);
if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes then begin
edit2.text:=´´;
edit2.setfocus;
end else begin
maskedit1.enabled:=true;
maskedit2.enabled:=true;
maskedit3.enabled:=true;
MASKedit1.SETFOCUS;
end;
end;
end;
end;

Ou seja acrescentei essa linha em negrito. Mais continua repetindo.

Desculpe minha ignorancia em nao saber como fazer amigo.


GOSTEI 0
Campsoft

Campsoft

27/11/2006

Bom vamos lá... deixa eu tentar te explicar, não sei se é a melhor forma de se fazer isso, mais funciona:


La onde vc define as variaveis do form...

var
Form1: Tform1;
Exibiu : Boolean;


---------------------------

Lá no OnActivate do seu form, vc faz assim:

Exibiu := false; // << não exibiu ainda


-----------------------------

Lá no OnExit do seu edit vc faz assim:


If Not(Exibiu) then begin

Exibiu:=True;
..... todo o seu codigo
End;


Vê se funciona, ai no caso teoricamente seria pra funcionar da seguinte maneira... vc pode modificar isso...

Quando você abrir o form, ele ja vai setar a variavel exibiu para false (ainda não exibiu)

No onExit, ele vai testar se isso e false ou nao.. se for.. ele mostra a mensagem e seta ela pra True, como ja exibido.

Caso contrario, ele nao vai exibir..


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

27/11/2006

olha, não sei se eu entendi o que você precisa, mas tente assim:
procedure TForm8.Edit2Exit(Sender: TObject); 
begin 
  if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then
  begin 
     maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString; 
     maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString; 
     maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString; 
  end
  else
  begin 
    if application.messagebox(pchar(´Atenção Usuário! Numero da sequencia digitada (´+
                                    edit2.text+
                                    ´) não Localizada´13´Digitar Novamente?´),
                              ´Aviso´,
                              MB_ICONEXCLAMATION + MB_APPLMODAL + MB_YESNO + MB_DEFBUTTON1)=idYes
    begin
       edit2.text:=´´; 
       edit2.setfocus; 
    end
    else
    begin 
       maskedit1.enabled:=true; 
       maskedit2.enabled:=true; 
       maskedit3.enabled:=true; 
       MASKedit1.SETFOCUS; 
    end; 
  end; 
end;



GOSTEI 0
Adriano_servitec

Adriano_servitec

27/11/2006

Olah, se eu colocar a variavel boolenana e a confirmaçao for falsa, ele nao esta voltando no mesmo edit, ou seja esta pulando para o proximo setfocus.
Se eu deixo somente assim
procedure TForm8.Edit2Exit(Sender: TObject);
begin
//If Not(CONFIRMA) then begin

//CONFIRMA:=True;

  if dm.qrylimpa.locate(´sequencia´,(Edit2.text),[]) then
  begin
     maskedit1.Text:=dm.qrylimpa.FieldByName(´MESPGTO´).AsString;
     maskedit2.Text:=dm.qrylimpa.FieldByName(´MESREFINI´).AsString;
     maskedit3.Text:=dm.qrylimpa.FieldByName(´MESREFFIM´).AsString;
  end
  else
  begin
    if application.messagebox(pchar(´Atenção Usuário! Numero da sequencia digitada ´ +EDIT2.TEXT+ ´, não Localizada´13´Digitar Novamente?´),´Aviso´, MB_ICONEXCLAMATION + MB_APPLMODAL + MB_YESNO + MB_DEFBUTTON1)=idYes
    then begin
       edit2.text:=´´;
       edit2.setfocus;
    end
    else
    begin
       maskedit1.enabled:=true;
       maskedit2.enabled:=true;
       maskedit3.enabled:=true;
       MASKedit1.SETFOCUS;
    end;
  end;
end;
//END;
ele me da esse aviso
if application.messagebox(pchar(´Atenção Usuário! Numero da sequencia digitada ´ +EDIT2.TEXT+ ´, não Localizada´#13´Digitar Novamente?´),´Aviso´, MB_ICONEXCLAMATION + MB_APPLMODAL + MB_YESNO + MB_DEFBUTTON1)=idYes
duas vezes, e eu queria que desse apenas uma vez


GOSTEI 0
Adriano_servitec

Adriano_servitec

27/11/2006

E usando um filtro no evento onexit tem como criar uma condiçao tambem?

Tipo assim
DM.ibTable1.filtered := false;
DM.ibTable1.filter := ´matricula = ´+ QuotedStr(Edit1.Text);
DM.ibTable1.filtered := true;
Label3.CAPTION:=DM.ibTable1.FieldByName(´associado´).AsString;


Gostaria de saber te tem como fazer um IF ai neste codigo, ou o LOCATE eh mais rapido?

Nao estou acertando fazer certo
olhe como fiz:
if DM.ibTable1.LOCATE(´Matricula´,(Edit1.text),[]) then
begin
    Label3.caption:=DM.ibTable1.FieldByName(´associado´).AsString;
end else begin
    messagedlg(´Código do associado não Localizado´,mterror,[mbOk],0);
    if application.messagebox(´Digitar Novamente?´,´Aviso´,36)=idyes then begin
       edit1.text:=´´;
       edit1.setfocus;
       end else
       edit2.Enabled:=True;
       edit2.Setfocus;
    end;
end;



GOSTEI 0
Emerson Nascimento

Emerson Nascimento

27/11/2006

creio que a mensagem esteja aparecendo duas vezes porque algum outro evento pode estar ´disparando´.


GOSTEI 0
Adriano_servitec

Adriano_servitec

27/11/2006

creio que a mensagem esteja aparecendo duas vezes porque algum outro evento pode estar ´disparando´.


Sera que eh pq uso o comando APPEND antes?

Queria trabalhar com a tabela fechada e abri-la somente na hora de gravar, mais tive problemas com esse comando
procedure TForm3.DataSource1StateChange(Sender: TObject);
var
I: Integer;
Perm: Boolean;
begin
//*****trata botoes enabled true ou false*******
b1.Enabled := Datasource1.State in [dsBrowse];
b2.Enabled := Datasource1.State in [dsInsert,dsEdit];
b3.Enabled := Datasource1.State in [dsInsert,dsEdit];
b4.Enabled := Datasource1.State in [dsBrowse];
b5.Enabled := Datasource1.State in [dsBrowse];

//********pada deixar edit, jvedit,maskedit e memo com o enabled false*****
Perm := (DataSource1.State in [dsInsert, dsEdit]);
for I := 0 to Self.ComponentCount -1 do
begin
if (Self.Components[i] is TEdit) then
(Self.Components[i] as TEdit).Enabled := Perm;
if (Self.Components[i] is TMaskEdit) then
(Self.Components[i] as TMaskEdit).Enabled := Perm;
end;
end;

A soluçao que eu achei eh abrir a tabela na hora de incluir os dados.
mais eu nao uso dbedits e sim edits simples, justamente para nao atrapalhar, mais nao sei se pode ser isso que esta ocorrendo.


GOSTEI 0
Adriano_servitec

Adriano_servitec

27/11/2006

Ainda nao descobri uma maneira de NAO aparecer duas vezes a messageDLG

Pessoal Olha o codigo como eu deixei agora
procedure TForm6.Edit5Exit(Sender: TObject); begin dm.qrylimpa.close; dm.qrylimpa.sql.text := ´select * from corrente where sequencia = :psequencia´; dm.qrylimpa.ParamByName(´psequencia´).AsString := Edit5.Text; dm.qrylimpa.Open; if not dm.qrylimpa.isEmpty then begin MaskEdit3.setfocus; maskedit3.text:=DM.qrylimpa.FieldByName(´mespgto´).Value; maskedit4.text:=DM.qrylimpa.FieldByName(´mesrefini´).Value; maskedit5.text:=DM.qrylimpa.FieldByName(´mesreffim´).Value; end else begin [b:b33a90f0ae]messagedlg(´Sequencia digitada não Localizada´,mterror,[mbOk],0);[/b:b33a90f0ae] dm.QryLimpa.close; dm.qrylimpa.sql.text := ´select * from corrente´; dm.QryLimpa.Open; edit5.text:=´´; edit5.setfocus; end; end;
A parte em negrito esta mostrando duas vezes, nao achei nada que estivesse atrapalhando este edit, soh tem essa mensagem no evento dele e tambem no onkeypress deste componente esta assim
if key#=13 then MaskEdit3.setfocus;



GOSTEI 0
POSTAR