Avatar billede ulrikp Nybegynder
07. september 2003 - 13:14 Der er 8 kommentarer og
1 løsning

Problem med error handling

Jeg har en sub routine

sub mySub()
'db kode
end sub

Hvis db-koden resulterer i en fejl, vil jeg hoppe ned til en error handler, hvilket jeg har læst mig til, skal foregå på følgende måde:

sub mySub()
on error goto errorHandler
'db kode
exit sub

errorHandler:
  'error handling
resume
end sub

...men lige så snart jeg tilføjer dette får jeg en 500-fejl?
Avatar billede keysersoze Ekspert
07. september 2003 - 13:31 #1
funktioner -> internetindstillinger -> avanceret -> fjern kryds i "vis meddelelse om uskadelige http-fejl"

så burde du få en fejl-beskrivelse du kan bruge til noget
Avatar billede ocp Nybegynder
07. september 2003 - 13:41 #2
Jeg tror godt du kan droppe at benytte labels i VBScript. Prøv i stedet:

function mySub()
on error resume next
'db kode
if err.number <> 0 then
  mySub = false
  exit function
else
  mySub = true
end if

end function

og i din kode:

if not mysub then
  response.write("<script lang=js>alert('Fejl ved databaseadgang')</script>")
  response.end
end if
Avatar billede ulrikp Nybegynder
07. september 2003 - 13:44 #3
det hjalp lidt - nu får jeg følgende fejl:

on error goto errorHandler
--------------^
Avatar billede ocp Nybegynder
07. september 2003 - 13:45 #4
jamen - der skal IKKE være en errorhandler det skal være:

on error resume next
Avatar billede ulrikp Nybegynder
07. september 2003 - 13:51 #5
ocp: Jeg har prøvet med on error resume next, men det giver problemer, hvis der opstår fejl først i db-koden. Så går webserveren simpelthen ned. Db-koden er:

set con = server.createObject("ADODB.Connection")
con.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mapPath("/") & "\db.mdb"

SQL =        "INSERT INTO CUSTOMERORDER(" &_
                    " FirmName, FirmAddress, FirmZip, FirmCity, FirmPhone, FirmMail," &_
                    " ContactPerson, OrderType, Quantum, Comments, DeliveryFirmName," &_
                    " DeliveryAddress, DeliveryZip, DeliveryCity, DeliveryPhone, DeliverySpecification, RefId) " &_
                    "VALUES( " &_
                    " '" & firmName & "', '" & firmAddress & "', " & firmZip & ", '" & firmCity &_
                    " '," & firmPhone & ", '" & firmMail & "', '" & contactPerson & "', 'P'" &_
                    " ," & quantum & ", '" & comments & "','','',0,'',0,''," & partnerId & ")"
con.execute(SQL)

SQL = "SELECT MAX(Id) AS MaxId FROM CUSTOMERORDER"
set rs = con.execute(SQL)
newId = 0
while not rs.eof
  newId = rs("MaxId")
  rs.movenext
wend

SQL =            "INSERT INTO INV(UserId,DebitorId,OrderId) VALUES(" & userId & "," & debitorNr & "," & newId & ")" 
con.execute(SQL)

con.close
set con = nothing

Jeg vil gerne gøre det, som svarer til at sætte alt dette kode ind i en try{}-block og så lave errorhandling en gang for alle ligemeget hvor i koden fejlen opstår. Hvis jeg sætter "on error resume next" lige før den første con.execute(SQL) går webserveren ned???
Avatar billede ocp Nybegynder
07. september 2003 - 13:52 #6
Det kan man ikke. Jeg mener i stedet du skal fange fejlene FØR de opstår - det er god programmeringsskik
Avatar billede ulrikp Nybegynder
07. september 2003 - 14:00 #7
prøvede lige at sætte en "on error resume next" efter den sidste SQL-sætning og if error.number <> 0 osv. til sidst, og så lavede jeg med vilje en fejl i den sidste SQL-sætning. I det tilfælde går det fint.
Laver jeg derimod en fejl i SQL-sætningen i midten og "on error resume next" lige efter denne SQL-sætning går det galt...
Avatar billede ocp Nybegynder
07. september 2003 - 14:14 #8
Du bliver enten nødt til at sætte en "if err.number = 0 then" efter hver con.execute eller også skal du gøre det rigtige: finde ud af hvad det er der forårsager fejlen og så checke om DEN betingelse er opfyldt.
Avatar billede ulrikp Nybegynder
07. september 2003 - 16:04 #9
okay, det prøver jeg.
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