22. december 2004 - 14:46Der er
14 kommentarer og 1 løsning
Jeg fatter ikke errorhandling
jeg har en funktion, der ser sådan her ud (i skal ikke tage jer af, hvis der er fejl. det er hurtigt skrevet af efter en anden skærm):
function compare(tmp_1,tmp_2) on error goto date_statement if cdbl(trim(tmp_1)) < cdbl(trim(tmp_2)) then compare = true else compare = false end if exit function
date_statement: on error goto text_statement if datediff("s",trim(tmp_1),trim(tmp_2)) > 0 then compare = true else compare = false end if exit function
text_statement: if ucase((trim(tmp_1)) < ucase((tmp_2)) then compare = true else compare = false end if exit function end function
i linje 3 (if cdbl(trim(tmp_1)) < cdbl(trim(tmp_2)) then) kommer der fejl på trods af on error goto date_statement.. Og jeg fatter ikke lige det der med on error goto...
Hvordan hænger det hele sammen? hvordan ignorerer man fejlene og går til de positioner, jeg har definere...
Man kan ikke have nested errorhandlers inde i hinanden. Dette er gyldigt, men dækker nok ikke dit behov.
function compare(tmp_1,tmp_2) on error goto date_statement if cdbl(trim(tmp_1)) < cdbl(trim(tmp_2)) then compare = true else compare = false end if exit function
date_statement: if datediff("s",trim(tmp_1),trim(tmp_2)) > 0 then compare = true else compare = false end if end function
De fejl, som opstår, skyldes de, at tmp_1 eller tmp_2 er Null? I så fald, kan du bruge nz med fordel:
if cdbl(nz(trim(tmp_1),0)) < cdbl(nz(trim(tmp_2), 0)) then ...
Synes godt om
Slettet bruger
22. december 2004 - 14:56#2
kan man ikke sige, at fejlene skal ignoreres?? det er meningen, der skal komme fejl, hvis tmp_1 eller tmp_2 er tomme, og den del af koden så bare skal sprigens over.. men det kan man måske ikke?
Du kan teste på om dine tmp-filer eksisterer eller hvis de gør, om de har længden 0 bytes. Så kan du lave dine If sætninger efter at dette er afklaret.
I len(dir(tmp_1.tmp))> 0 'filen findes
If len(tmp_1.tmp)> 0 'filen har et indhold
M.v.h. Jørn
Synes godt om
Slettet bruger
22. december 2004 - 15:21#6
tmp_1 og tmp_2 er af typen string, integer, date mm. og altså ikke filer Hvis jeg skal noget, skal jeg tjekke om tmp_1 og tmp_2 indeholder et nummer eller en dato.. men det kan jeg ikke få til at virke.. har ellers prøvet med isnumber og isdate.. Hvis jeg prøver at konvertere variablerne til double, sker der en fejl, hvis de ikke er numre.. denne fejl skal gøre, at de bliver sendt videre til date_statement.. her bliver variablerne sammenlignet som datoer.. hvis der sker en fejl, skal værdierne sammenlignes som tekst.. jeg gik over til at ignorere fejl i stedet for at tjekke hvilken type variablerne har, fordi jeg ikke kunne få det til at virke..
Synes godt om
Slettet bruger
22. december 2004 - 15:24#7
funktionens funktion er at tjekke om tmp_1 er mindre end tmp_2.. hvis de to variabler bliver sammenlignet som tekst, vil 2 være større end 100 og 01-01-2004 vil være mindre end 02-02-2000..
du kan lade din errorhandler ignorere fejl således:
function compare(tmp_1,tmp_2) on error goto date_statement if cdbl(trim(tmp_1)) < cdbl(trim(tmp_2)) then compare = true else compare = false end if exit function
date_statement: Resume next end function
Synes godt om
Slettet bruger
22. december 2004 - 15:31#9
det virker heller ikke.. kan det have noget at gøre med, at jeg har indstillet debuggeren til break on all errors?
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.