Recent

Author Topic: [RESOLVIDO] TRATAMENTO DE ERROS COM DATAS  (Read 4577 times)

HELENO de SantAnna

  • New member
  • *
  • Posts: 9
[RESOLVIDO] TRATAMENTO DE ERROS COM DATAS
« 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?
« Last Edit: November 20, 2018, 02:09:50 pm by HELENO de SantAnna »

valdir.marcos

  • Hero Member
  • *****
  • Posts: 1106
Re: TRATAMENTO DE ERROS COM DATAS
« Reply #1 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.

HELENO de SantAnna

  • New member
  • *
  • Posts: 9
Re: TRATAMENTO DE ERROS COM DATAS
« Reply #2 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.

valdir.marcos

  • Hero Member
  • *****
  • Posts: 1106
Re: TRATAMENTO DE ERROS COM DATAS
« Reply #3 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;

HELENO de SantAnna

  • New member
  • *
  • Posts: 9
Re: TRATAMENTO DE ERROS COM DATAS
« Reply #4 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