Avatar billede koden12 Nybegynder
06. juli 2003 - 17:18 Der er 5 kommentarer og
1 løsning

Søgning i en dato giver fejl

En database med en Paradox tabel indeholder en række med en dato som index.
Den kan jeg godt søge i, men KUN hvis jeg skriver hele datoen som fx 12-12-1999 skriver jeg bare 12-12 kan min søgning ikke virke.
Det gør så ikke så meget, men der kommer en fejl op som stopper programmet.
Hvordan kan jeg opsamle den fejl ?
VH
SprøgeJørgen
Avatar billede kustoden Nybegynder
06. juli 2003 - 17:29 #1
procedure DoSomeStuff();

var
  T : TTable;
begin
  T := nil;
  try try
  T              := TTable.Create(nil);
  T.DatabaseNameb := 'MyPDoxBase';
  T.TableName    := 'MyTableName';
  DoSomething....
finally
  if Assigned(T) then
    T.Close();
  FreeAndNil(T);
end;{finally}
except
  On E : Exception do
    ShowMessage('Hovsa, du tastede vist en forkert dato');
  end;{except} 
end;{proc DoSomeStuff}
Avatar billede devdude Nybegynder
06. juli 2003 - 18:55 #2
Hej SprøgeJørgen (???)

Datoer i en Paradox database gemmes som decimaltal, hvor heltalsværdien til venstre for kommaet repræsenterer datoen og decimalværdien til højre for kommaet repræsenterer tidspunktet i timer, minutter osv.

Det giver derfor ingen mening at søge på "12-12", da dette ikke er en dato.

DevDude
Avatar billede koden12 Nybegynder
06. juli 2003 - 19:24 #3
Nej det er sandt.
Men jeg kan jo ikke forhindre en bruger i at prøve på at skrive 12-12 og så klikke på søg.
Men det ser ikke pænt ud med en fejlboks der siger at " det ikke er et dato format".
Den som koustoden skriver er nok god men noget over målet.
Tablellerne er create og den er nok for svær til mig.
VH
SpørgerJørgen
Avatar billede devdude Nybegynder
06. juli 2003 - 19:59 #4
Hej SpørgerJørgen

Prøv lige dette. Det er en videreudvikling af Kustodens forslag fra ovenfor:

Læg en TMaskEdit og en TButton på en form og kopier det du skal bruge fra følgende:

----------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DB, DBTables;

type
  TForm1 = class(TForm)
    MaskEdit1: TMaskEdit;
    Button1: TButton;
    Table1: TTable;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  TestDate: TDate;
begin

  try
    // Check om det er en gyldig dato
    TestDate := StrToDate(MaskEdit1.Text);
  except
    // Hvis ikke, så vis fejlmeddelelse og forlad
    Application.MessageBox('Ugyldig dato', 'Advarsel', mb_OK + mb_IconExclamation);
    Exit;
  end;

// Datoen er ok, så søg på den
  Table1.FindKey([TestDate]);

end;

end.
----------------

Denne løsning vil også give fejl hvis f.eks. der er indtastet "30-02-2003".

DevDude
Avatar billede koden12 Nybegynder
06. juli 2003 - 20:31 #5
Den er godt nok flot.
Og så bliver den ved med at virke.
Men ikke i Compile mode eller hvad det hedder.
Jeg fandt ud af at det er en EConvertErros og så i hjælp under det.
Men det hjalp mig nu ikke meget.
Tak.
VH
Sprøgejørgen
Avatar billede devdude Nybegynder
06. juli 2003 - 20:57 #6
Hej igen.

Ja, sådan vil det altid være. Det er derfor man kan benytte try-except funktionen til at fange disse "ulovligheder".

Sålænge det virker korrekt når du kører exe-filen direkte, skal du bare være glad.

DevDude
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester