Avatar billede hugopedersen Nybegynder
03. oktober 2011 - 14:19 Der er 10 kommentarer og
1 løsning

Fange forkerte tidspunkter i DBGrid

Jeg har et DBGrid hvor der i 2 felter skal indtastes et klokkeslet i formatet hh:nn
Det virker sådan set godt nok, men -

Hvis man indtaster 24:00 eller xx:61 så smider den en EConvertError
Hvordan fanger jeg nemmest den?
Jeg synes jeg har prøvet alle muligheder, men lige lidt hjælper det.
Avatar billede spil2vind Nybegynder
03. oktober 2011 - 14:34 #1
Der er altså ikke noget der hedder 24:00, det er derfor der kommer en  EConvertError
Avatar billede hugopedersen Nybegynder
03. oktober 2011 - 14:35 #2
Ja det er fuldstændig korrekt - men da brugere ikke altid tænker som programmører, skal den jo gerne fanges i stedet for at programmet går ned.
Avatar billede spil2vind Nybegynder
03. oktober 2011 - 14:42 #3
except
    on E: Exception do begin
        showmessage('Fejl: '+E.Message);
end;

Ovenstående vil hjælpe dig
Avatar billede hugopedersen Nybegynder
03. oktober 2011 - 15:25 #4
Det er jeg med på, men mit problem er at jeg ikke kan finde den rigtige event at smide den ind i.
Avatar billede kroning Nybegynder
03. oktober 2011 - 15:49 #5
Hvad med BeforePost i din TTable eller OnPostError.
Avatar billede hugopedersen Nybegynder
03. oktober 2011 - 19:11 #6
Har prøvet:

AfterEdit
AfterInsert
AfterPost
BeforePost
EditError

Og ingen af dem giver reaktion.
Det eneste jeg kan få til at reagere er FormKeyPress men det er ikke lige til at fange alligevel for det virker kun hvis det er Enter der bruges. Hvis man 'Tabber' ud af feltet så kaster det en exception.

Min FormKeyPress ser ud som følger:

procedure TfrmTransactions.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Ord(Key) = 27 then
    Close;
  try
    if Ord(Key) = 13 then
      begin
        if grdTransactions.SelectedIndex < grdTransactions.FieldCount - 1 then
          grdTransactions.SelectedIndex := grdTransactions.SelectedIndex + 1
        else
          begin
            grdTransactions.DataSource.DataSet.Next;
            grdTransactions.SelectedIndex := 0;
          end;
        Key := #0
      end;
  except
    on E: Exception do
      begin
        showmessage('Fejl: ' + E.Message);
        Key := #0;
      end;
    end;
end;
Avatar billede kroning Nybegynder
03. oktober 2011 - 19:19 #7
Det er måske ikke nok først at fange en exception når brugeren prøver at forlade feltet?
Avatar billede hugopedersen Nybegynder
03. oktober 2011 - 19:29 #8
Den havde jeg glemt på min liste - ColExit virker heller ikke
Avatar billede hugopedersen Nybegynder
06. oktober 2011 - 10:59 #9
Jeg må tilstå at det umiddelbare resultat er at det ikke kan lade sig gøre.
Jeg har derfor gjort det at jeg har lavet en anden form med 'rigtige' database controller på og så lavet det så jeg trykker Insert i formen med griddet og så får jeg mulighed for at tilføje en record. På den form har jeg så brugt et par controller fra DevExpress som virkelig kan håndtere datoer og klokkeslet.
Der er også et grid med i den pakke, men den har jeg ikke haft tid til at sætte mig rigtigt ind i. Der skulle man vist nok kunne gøre det hele direkte.  Men det må blive i version 2 af programmet.

Lige nu er brugerne tilfredse som det er og det er det vigtigste her og nu.
Avatar billede hugopedersen Nybegynder
18. oktober 2011 - 12:56 #10
Kan i ikke lige begge 2 smide et svar så kan i dele point for input.
Avatar billede hugopedersen Nybegynder
28. oktober 2011 - 11:21 #11
Da jeg ikke har fået noget svar fra jer, lukker jeg spørgsmålet.
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