[asp]error handling - option explicit

Pagina: 1
Acties:
  • 122 views sinds 30-01-2008
  • Reageer

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Ik snap er niets meer van.
Na talloze pogingen en voorbeelden snap ik niet waarom de volgende code niet meer werkt wanneer ik option explicit en de daaropvolgende 2 regels uncomment:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ Language="VBScript" %>
<% 'Option Explicit %>
<% 'dim err
'Set err = Server.GetLastError()
dim connstr,conn
  on error resume next
ConnStr = "Provider=SQLOLEDB;Data Source=foo;Initial Catalog=bar;User Id=sa;Password=foobar"

  Set conn = Server.CreateObject("ADODB.Connection")
  conn.open (ConnStr)
  conn.Execute "insert into test (er) values ('s')"
 ' error=Conn.errors(0).SQLState
  conn.close
  set conn=nothing

if err.number<>0 then
response.write ("Error # " & CStr(Err.Number) & " " & Err.Description)
else
response.write "gelukt"
end if
%>

hij blijft me dan steeds gelukt terug geven...
ps. die error=Conn.errors(0).SQLState regel was ik mee aant spelen, dus heb die nu ff commented

[ Voor 27% gewijzigd door Vinzzz243 op 06-01-2005 13:27 ]


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Vinzzz schreef op donderdag 06 januari 2005 @ 12:54:
Ik snap er niets meer van.
Na talloze pogingen en voorbeelden snap ik niet waarom de volgende code niet meer werkt wanneer ik option explicit en de daaropvolgende 2 regels uncomment:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ Language="VBScript" %>
<% 'Option Explicit %>
<% 'dim err
'Set err = Server.GetLastError()

  on error resume next
ConnStr = "Provider=SQLOLEDB;Data Source=foo;Initial Catalog=bar;User Id=sa;Password=foobar"

  Set conn = Server.CreateObject("ADODB.Connection")
  conn.open (ConnStr)
  conn.Execute "insert into test (er) values ('s')"
 ' error=Conn.errors(0).SQLState
  conn.close
  set conn=nothing

if err.number<>0 then
response.write ("Error # " & CStr(Err.Number) & " " & Err.Description)
else
response.write "gelukt"
end if
%>

hij blijft me dan steeds gelukt terug geven...
Ik neem aan dat het hetzelfde is als bij VB.NET e.d.
Option Explicit geeft aan dat je variabelen expliciet moet declareren.
"Dim Err" is een impliciete declaratie. Expliciet wil zeggen dat je precies aangeeft wat de variabele inhoudt.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Ok, maar wat is nu je punt? :)

Ik weet dat expliciet expliciet betekent, vandaar dat ik zei, waarom werkt het error-handling gebeuren niet meer als ik option expliciet uncomment EN ook de 2 volgende regels...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Chief.NET schreef op donderdag 06 januari 2005 @ 13:02:
[...]

Ik neem aan dat het hetzelfde is als bij VB.NET e.d.
Option Explicit geeft aan dat je variabelen expliciet moet declareren.
"Dim Err" is een impliciete declaratie. Expliciet wil zeggen dat je precies aangeeft wat de variabele inhoudt.
Dat zie je verkeerd.
Option Explicit wil gewoon zeggen dat je variabelen moet declareren (met behulp van Dim dus). Gebruik je geen option explicit dan hoef je de variabele NIET te declareren. Dat je in VB.Net een type (Integer/Long etc) op dient te geven is omdat het Strong Typed is. VB (dus ASP classic -> VBScript) gaat er van uit dat als je geen type op geeft dat je variabele een Variant is.
Onder het .Net platform is dit echter dus andere koek.

ASP:
1
2
3
4
5
6
Option Explicit

Dim bla1

bla1 = "test"
bla2 = "test" '<-- dit zal fout gaan omdat je Option Explicit gebruikt

Laat je in bovenstaand voorbeeld Option Explicit weg, dan werkt het wel prima.
Dim bla1 is dus wel degelijk een Explicite declaratie, immers je declareert je variabele. "bla2" wordt in mijn voorbeeld echter impliciet gedeclareerd (omdat voor deze variabele niet eerst het Dim statement is gebruikt).

@TS: Haal die "on error resume next" er eens uit, dan zie je welke error je krijgt. Ik denk dat err.number niet bekend is dan ;)
Err is een gereserveerd woord (immers het Err object bestaat al). Ga je nu zelf een variabele dimensioneren met de naam Err dan heb je dus een probleem. Noem je variabele voor de gein eens MyErr ofzo :Y)

[ Voor 76% gewijzigd door RobIII op 06-01-2005 13:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 15-05 14:52

mulder

ik spuug op het trottoir

Vinzzz schreef op donderdag 06 januari 2005 @ 13:09:
Ok, maar wat is nu je punt? :)

Ik weet dat expliciet expliciet betekent, vandaar dat ik zei, waarom werkt het error-handling gebeuren niet meer als ik option expliciet uncomment EN ook de 2 volgende regels...
Omdat er geen error is? En als er een error wat is die dan? Code werkt niet meer wat betekent dat?

oogjes open, snaveltjes dicht


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

RobIII schreef op donderdag 06 januari 2005 @ 13:12:
[...]

Dat zie je verkeerd.
Option Explicit wil gewoon zeggen dat je variabelen moet declareren (met behulp van Dim dus). Gebruik je geen option explicit dan hoef je de variabele NIET te declareren. Dat je in VB.Net een type (Integer/Long etc) op dient te geven is omdat het Strong Typed is. VB en ASP gaat er van uit dat als je geen type op geeft dat je variabele een Variant is.

ASP:
1
2
3
4
5
6
Option Explicit

Dim bla

bla = "test"
bla2 = "test" '<-- dit zal fout gaan omdat je Option Explicit gebruikt

Laat je in bovenstaand voorbeeld Option Explicit weg, dan werkt het wel prima.
Dim Err is dus wel degelijk een Explicite declaratie, immers je declareert je variabele. "bla2" wordt in mijn voorbeeld echter impliciet gedeclareerd.

@TS: Haal die "on error resume next" er eens uit, dan zie je welke error je krijgt. Ik denk dat err.number niet bekend is dan ;)
Err is een gereserveerd woord (immers het Err object bestaat al). Ga je nu zelf een variabele dimensioneren met de naam Err dan heb je dus een probleem. Noem je variabele voor de gein eens MyErr ofzo :Y)
Aha... Ik heb niks gezegd.. :X
Denk dat ik met Strict in de war ben..

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Chief.NET schreef op donderdag 06 januari 2005 @ 13:23:
[...]

Aha... Ik heb niks gezegd.. :X
Denk dat ik met Strict in de war ben..
Uhm, helaas ook niet.
Option Strict On voorkomt dat je impliciet varabelen cast naar een ander type.
Zou je een integer in een string gooien, dan kan dat zonder Option Strict On wel en met Option Strict On zul je dus .ToString moeten gebruiken (en dan cast je dus weer Expliciet)

Visual Basic .NET:
1
2
3
4
5
        Dim MyInt As Integer
        Dim MyStr As String

        MyInt = 5
        MyStr = MyInt

Dit gaat dus goed ZONDER Option Strict On, en fout MET Option Strict On. De correcte code zou in dat geval dan zijn:
Visual Basic .NET:
1
        MyStr = MyInt.ToString

[ Voor 27% gewijzigd door RobIII op 06-01-2005 13:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Don Facundo schreef op donderdag 06 januari 2005 @ 13:13:
[...]
Omdat er geen error is? En als er een error wat is die dan? Code werkt niet meer wat betekent dat?
Sorry als ik wat onduidelijk was, dacht dat ik het voldoende omschreven had (ook in mn reply)
De error handling werkt niet meer.
Als ik de 3 bewuste regels (option explicit en 2 daaronder) weglaat dan krijg ik de foutmelding:
Error # -2147217865 Invalid object name 'test'.
Maak ik vervolgens van test een juiste waarde dan krijg ik netjes gelukt terug.

MAAR...als ik nu die 3 bewuste regels in mijn code zet, krijg ik nog alleen maar gelukt terug.

Wanneer ik on error resume even weghaal krijg ik verder geen syntaxerrors, maar weer gewoon:
code:
1
2
3
Microsoft OLE DB Provider for SQL Server error '80040e37' 
Invalid object name 'test'. 
/crest/test.asp, line 12


ps. even topicstart ge-edit, was 2 variabelen vergeten te copy pasten (anders denkt men misschien dat t daardoor komt)

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
RobIII schreef op donderdag 06 januari 2005 @ 13:25:
[...]

Uhm, helaas ook niet.
Option Strict On voorkomt dat je impliciet varabelen cast naar een ander type.
Zou je een integer in een string gooien, dan kan dat zonder Option Strict On (volgens mij) wel en met Option Strict On zul je dus .ToString moeten gebruiken (en dan cast je dus weer Expliciet)

Visual Basic .NET:
1
2
3
4
5
        Dim MyInt As Integer
        Dim MyStr As String

        MyInt = 5
        MyStr = MyInt

Dit gaat dus goed ZONDER Option Strict On, en fout MET Option Strict On. De correcte code zou in dat geval dan zijn:
Visual Basic .NET:
1
        MyStr = MyInt.ToString;
Dat voor de gein myerr had ik al geprobeerd, ligt t niet aan :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Vinzzz schreef op donderdag 06 januari 2005 @ 13:27:
[...]

Sorry als ik wat onduidelijk was, dacht dat ik het voldoende omschreven had (ook in mn reply)
De error handling werkt niet meer.
Als ik de 3 bewuste regels (option explicit en 2 daaronder) weglaat dan krijg ik de foutmelding:
Error # -2147217865 Invalid object name 'test'.
Maak ik vervolgens van test een juiste waarde dan krijg ik netjes gelukt terug.

MAAR...als ik nu die 3 bewuste regels in mijn code zet, krijg ik nog alleen maar gelukt terug.

Wanneer ik on error resume even weghaal krijg ik verder geen syntaxerrors, maar weer gewoon:
code:
1
2
3
Microsoft OLE DB Provider for SQL Server error '80040e37' 
Invalid object name 'test'. 
/crest/test.asp, line 12


ps. even topicstart ge-edit, was 2 variabelen vergeten te copy pasten (anders denkt men misschien dat t daardoor komt)
Moet
ASP:
1
' error=Conn.errors(0).SQLState

Dan niet a) niet ge-uncomment worden, b) je gebruikt hier error = en geen err = :? c) en nogmaals: gebruik liever myErr omdat Err een gereserveerd woord is.

[ Voor 4% gewijzigd door RobIII op 06-01-2005 13:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
RobIII schreef op donderdag 06 januari 2005 @ 13:32:
[...]

Moet
ASP:
1
' error=...

Dan niet a) niet ge-uncomment worden, b) je gebruikt hier error = en geen err = :? c) en nogmaals: gebruik liever myErr omdat Err een gereserveerd woord is.
Ik snap je bedoeling niet.
a ) nee, zoals ik al zei was dat een probeersel, maar de code zoals boven staat werkt prima zonder option explicit, daar moet de fout ergens te zoeken zijn dacht ik.
b ) klopt, maar die regel staat daar eigenlijk voor niets, dus die heb ik ook niet meer meeveranderd.
c ) myErr heb ik veranderd bij mij, maar dat maakt voor hier vrij weinig verder uit.

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
haal eens alle uitgecommente code uit je file en kijk eens wat er dan gebeurt.

En kijk op welke regel de error voor komt.
De fout meldingen van ASP/VBscript zijn over het algemeen redelijk duidelijk.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
4of9 schreef op donderdag 06 januari 2005 @ 14:09:
haal eens alle uitgecommente code uit je file en kijk eens wat er dan gebeurt.
En kijk op welke regel de error voor komt.
De fout meldingen van ASP/VBscript zijn over het algemeen redelijk duidelijk.
Uitgecommente code uit mn file halen en kijken wat gebeurt? Denk niet veel verrassends, tis immers commentaar?
Welke regel de error voorkomt? No offence, maar heb je het topic gevolgd?
De foutmeldingen zijn ook duidelijk :) alleen krijg ik geen informatie in mn pagina waarom de error handling niet wordt uitgevoerd op het moment dat ik option explicit gebruik

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
ja ik heb heel het topic meerdere malen gelezen maar dat meer omdat ik niet helemaal begreep waar je naar toe wilde.

Ik heb je code ff bekeken maar kan niet reproduceren wat je schrijft.
Nu heb ik specifiek een error laten plaats vinden in de sqlcode (connecten naar een nietbestaande server)

die 3 regels waar jij het over hebt uitgecomment en de pagina gerunt.

Ik krijg gewoon netjes een error op het scherm (dus error handeling werkt gewoon)

dus wat is nu het probleem?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...

Pagina: 1