Lazarus

Other Languages => Portuguese => Topic started by: HELENO de SantAnna on November 06, 2018, 05:53:55 pm

Title: [RESOLVIDO] TRATAMENTO DE ERROS COM DATAS
Post by: HELENO de SantAnna on November 06, 2018, 05:53:55 pm
Olá a todos,
Tenho um form de pesquisa com um Edit onde se pode pesquisar tanto por NOME quanto por DATA DE NASCIMENTO, sendo a alternância feita através de um RadioGroup. Tudo funciona perfeitamente, só não estou conseguindo tratar os erros que acontecem quando, por exemplo, o usuário final digitar um NOME estando, no RadioGroup, a opção DATA DE NASCIMENTO marcada. Os erros que aparecem são EConvertError e Format invalid, os que consigo me recordar. Testei algumas funções mas sem sucesso. Testei também try ... except ... end, mas também sem sucesso, os erros voltam a aparecer. Com certeza alguém já deve ter se deparado com esses erros, alguém tem alguma sugestão?
Title: Re: TRATAMENTO DE ERROS COM DATAS
Post by: valdir.marcos on November 06, 2018, 11:10:56 pm
Tenho um form de pesquisa com um Edit onde se pode pesquisar tanto por NOME quanto por DATA DE NASCIMENTO, sendo a alternância feita através de um RadioGroup. Tudo funciona perfeitamente, só não estou conseguindo tratar os erros que acontecem quando, por exemplo, o usuário final digitar um NOME estando, no RadioGroup, a opção DATA DE NASCIMENTO marcada. Os erros que aparecem são EConvertError e Format invalid, os que consigo me recordar. Testei algumas funções mas sem sucesso. Testei também try ... except ... end, mas também sem sucesso, os erros voltam a aparecer. Com certeza alguém já deve ter se deparado com esses erros, alguém tem alguma sugestão?
Talvez surja uma solução usando TryStrToDate, TryStrToTime, TryStrToDateTime, StrToDateDef, StrToTimeDef, ou StrToDateTime.
Title: Re: TRATAMENTO DE ERROS COM DATAS
Post by: HELENO de SantAnna on November 07, 2018, 02:17:25 pm
Tenho um form de pesquisa com um Edit onde se pode pesquisar tanto por NOME quanto por DATA DE NASCIMENTO, sendo a alternância feita através de um RadioGroup. Tudo funciona perfeitamente, só não estou conseguindo tratar os erros que acontecem quando, por exemplo, o usuário final digitar um NOME estando, no RadioGroup, a opção DATA DE NASCIMENTO marcada. Os erros que aparecem são EConvertError e Format invalid, os que consigo me recordar. Testei algumas funções mas sem sucesso. Testei também try ... except ... end, mas também sem sucesso, os erros voltam a aparecer. Com certeza alguém já deve ter se deparado com esses erros, alguém tem alguma sugestão?
Talvez surja uma solução usando TryStrToDate, TryStrToTime, TryStrToDateTime, StrToDateDef, StrToTimeDef, ou StrToDateTime.

Desculpe a minha ignorância, mas como é que se implementa esse TryStrToDate no código? Tentei implementar num IF mas não deu certo. Por exemplo, meu código é:

    1: begin
            begin
                dmSisJVB.tabAlunos.SQL.Add('Where aln_DataNascimento = :tDataNascimento');
                dmSisJVB.tabAlunos.ParamByName('tDataNascimento').AsDate:=StrToDate(edtPesquisar.Text);
                dmSisJVB.tabAlunos.Prepare;
                dmSisJVB.tabAlunos.Open;
                if dmSisJVB.tabAlunos.RecordCount = 0 then
                begin
                    ShowMessage('DATA DE NASCIMENTO INVÁLIDA OU NÃO EXISTE ALUNO(A) CADASTRADO COM ESSA DATA!');
                end;
            end;
       end;

Tem um case associado a um RadioGroup, mas o código que dá problema é esse da data.
Title: Re: TRATAMENTO DE ERROS COM DATAS
Post by: valdir.marcos on November 09, 2018, 02:00:18 am
Seria algo parecido com o código abaixo:
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   dmSisJVB.tabAlunos.Close;
  4.   dmSisJVB.tabAlunos.Clear;
  5.   dmSisJVB.tabAlunos.SQL.Add('Select Campos From Tabela');
  6.   if (TryStrToDate(edtPesquisar.Text)) then
  7.   begin
  8.     // Se o conteúdo for uma data válida
  9.     dmSisJVB.tabAlunos.SQL.Add('Where aln_DataNascimento = :tDataNascimento');
  10.     dmSisJVB.tabAlunos.ParamByName('tDataNascimento').AsDate := StrToDate(edtPesquisar.Text);
  11.   end
  12.   else
  13.   begin
  14.     // caso contrário, trata como texto válido = nome de aluno
  15.     dmSisJVB.tabAlunos.SQL.Add('Where aln_NomeAluno = :tNomeAluno');
  16.     dmSisJVB.tabAlunos.ParamByName('tNomeAluno').AsString := edtPesquisar.Text;
  17.   end;
  18.   dmSisJVB.tabAlunos.Prepare;
  19.   dmSisJVB.tabAlunos.Open;
  20.   if dmSisJVB.tabAlunos.RecordCount = 0 then
  21.   begin
  22.       ShowMessage('DATA DE NASCIMENTO INVÁLIDA OU NÃO EXISTE ALUNO(A) CADASTRADO COM ESSA DATA!');
  23.   end;
  24. end;
Title: Re: TRATAMENTO DE ERROS COM DATAS
Post by: HELENO de SantAnna on November 15, 2018, 10:36:17 pm
Seria algo parecido com o código abaixo:
Code: Pascal  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   dmSisJVB.tabAlunos.Close;
  4.   dmSisJVB.tabAlunos.Clear;
  5.   dmSisJVB.tabAlunos.SQL.Add('Select Campos From Tabela');
  6.   if (TryStrToDate(edtPesquisar.Text)) then
  7.   begin
  8.     // Se o conteúdo for uma data válida
  9.     dmSisJVB.tabAlunos.SQL.Add('Where aln_DataNascimento = :tDataNascimento');
  10.     dmSisJVB.tabAlunos.ParamByName('tDataNascimento').AsDate := StrToDate(edtPesquisar.Text);
  11.   end
  12.   else
  13.   begin
  14.     // caso contrário, trata como texto válido = nome de aluno
  15.     dmSisJVB.tabAlunos.SQL.Add('Where aln_NomeAluno = :tNomeAluno');
  16.     dmSisJVB.tabAlunos.ParamByName('tNomeAluno').AsString := edtPesquisar.Text;
  17.   end;
  18.   dmSisJVB.tabAlunos.Prepare;
  19.   dmSisJVB.tabAlunos.Open;
  20.   if dmSisJVB.tabAlunos.RecordCount = 0 then
  21.   begin
  22.       ShowMessage('DATA DE NASCIMENTO INVÁLIDA OU NÃO EXISTE ALUNO(A) CADASTRADO COM ESSA DATA!');
  23.   end;
  24. end;

Muito obrigado, Hero!
Não havia pensado nessa possibilidade. Vou implementar.
TinyPortal © 2005-2018