"Anders Boholdt-Petersen" <post-REMOVETHIS-@boholdt-petersen.dk> skrev i en
meddelelse news:44e19c95$0$141$157c6196@dreader2.cybercity.dk...
> "Michael Weber" <michael@FJERNmichaelweber.dk> skrev i en meddelelse
> news:44e087a1$0$3549$edfadb0f@dread11.news.tele.dk...
> > Man skal putte koderne ind i toppen og bunden af hvert ASP-dokument.
>
> OK.
>
> Hvis vi antager, at jeg koder sådan her, hvor jeg sætter koderne ind i
> ASP-dokumentet som beskrevet ovenfor:
> ---
> <%
> Response.Buffer = true
> On Error Resume Next
> %>
> <%Option Explicit%>
> <html>
> <head>
> <title>bla bla bla</title>
> <link rel="stylesheet" type="text/css" href="style.
> css">
> </head>
> <body>
> <!--#include file="testdato.asp" -->
>
> <p>bla bla bla</p>
> </body>
> </html>
> <%
> if Err then
>
> Response.Clear
> Response.Write Err.Description & "<br>" & Err.Source & "<br>"
> Response.Write &Err.Category & "<br>"
> Response.Write Err.Column & "<br>" &Err.File & "<br>"
> Response.Write &Err.SQLState & "<br>" &Err.Number & "<br>"
> %>
> ---
>
> Har jeg så kodet noget forkert, eller vil ovenstående godt kunne fungere?
>
> Er der i øvrigt visse ASP-dokumenter, som man ikke kan putte ovenstående
> kode ind i?
>
> På forhånd tak for et eventuelt svar.
>
> --
>
> / Anders
>
http://www.boholdt-petersen.dk
>
>
<%Option Explicit%>
skal stå aller øverst.
Ellers er idéen rigtig.
Du skal dog lige formattere hvad der skrives ud i :
if Err
...
end if
(Der er et par -> & <- for meget o.s.v.)
Jeg kan ikke umiddelbart komme på asp-dokumenter, hvor teknikken ikke kan
bruges.
Men det kan være problemetisk at bruge On Error Resume Next, fordi scriptet
fortsættes med at
blive afviklet. Så vær lige opmærksom på det.
Med venlig hilsen
Michael Weber
Eksempel der illustrerer problematikken :
<% Option Explicit %>
<%
Response.Buffer = true
On Error Resume Next
%><html>
<head><title>Problem med On Error Resume Next</title></head>
<body>
<%
dim a
dim b
dim c
a=0
b=1
c=2
' Dette fremtvinger en fejl
b=Cint("gggg")
' På trods af fejlen ovenfor fortsættes afviklingen,
' med potentielt uhensigtsmæssige konsekvenser tilfølge.
' Forstil dig vi istedet for at tildele variabler (b og c) værdier,
' updatede en database eller noget andet.
' Her er det mulige problem med On Error Resume Next.
a=44
c=b
Response.Write "a :" & a & "<br>"
Response.Write "b :" & b & "<br>"
Response.Write "c :" & c & "<br>"
if Err then
Response.Clear
Response.Write "Fejl :<br>"
Response.Write "a :" & a & "<br>"
Response.Write "b :" & b & "<br>"
Response.Write "c :" & c & "<br>"
end if
%>
</body>
</html>
Løsning hvis man har kigget på koden og set, hvor en kodelinje
er afhængig af kodelinjer tidligere i dokumentet ( c er afhængig af b) :
<% Option Explicit %>
<%
Response.Buffer = true
On Error Resume Next
%>
<html><head>
<title>Løsning med On Error Resume Next</title></head>
<body>
<%
dim a
dim b
dim c
a=0
b=1
c=2
' Vi ved dette (Cint kan) fremtvinger en fejl
b=Cint("tt")
a=44
' hvis der ikke er sket fejl indtil nu, bliver c=b
if Err = 0 then
' forestil dig vi istedet connecter til en database,
' men nu kun hvis der ikke er opstået fejl indtil nu i scriptet.
c=b
end if
Response.Write "a :" & a & "<br>"
Response.Write "b :" & b & "<br>"
Response.Write "c :" & c & "<br>"
if Err then
Response.Clear
Response.Write "Fejl :<br>"
Response.Write "a :" & a & "<br>"
Response.Write "b :" & b & "<br>"
Response.Write "c :" & c & "<br>"
end if
%>
</body></html>