Avatar billede Slettet bruger
22. december 2004 - 14:46 Der 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...

/1..
22. december 2004 - 14:53 #1
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
...
Avatar billede 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?
22. december 2004 - 15:07 #3
On Error resume next

Det får den til at ignorere alle fejl.
Avatar billede Slettet bruger
22. december 2004 - 15:10 #4
Det kan jeg ikke få den til her.. men hvordan laver jeg så en errorhandler? kan man ikke ignorere fejl ved at lade dem gå igennem sådan en??
Avatar billede joern Nybegynder
22. december 2004 - 15:15 #5
Hej.

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
Avatar billede 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..
Avatar billede 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..
22. december 2004 - 15:27 #8
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
Avatar billede 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?
22. december 2004 - 15:33 #10
øh, ja :o)
Avatar billede Slettet bruger
22. december 2004 - 15:35 #11
det break on all errors gør, er bare at afbryde, selvom man har en errorhandler.. debuggeren vil finde alle fejl, man ikke har sagt skal overses?
22. december 2004 - 15:39 #12
ja, du skal kun "break on unhandled errors" (default)
Avatar billede joern Nybegynder
22. december 2004 - 15:40 #13
Hej.

Nå - variabler.  For at tjekke om en variabel indeholder tal alene:

If IsNumeric(tmp_1) = True then      'indholder kun tal

Du kan også ændre en streng til et tal med:

a = val(tmp_1)          'læs i onlinehjæpen hvorledes Val fortolker indholdet

M.v.h. Jørn
Avatar billede Slettet bruger
22. december 2004 - 15:41 #14
ahh.. så kører det :P.. har ellers forbandet errorhandling mange gange.. mange gange tak for hjælpen..
22. december 2004 - 15:44 #15
ja, det kan jeg da godt forstå :o)

tak for point :o)
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