|
| Hva er feilkodene hvis databasefila ikke e~ Fra : Terje |
Dato : 24-08-01 19:51 |
|
Howdy.
Hvis min asp-kode plutselig ikke skulle finne sin database, kanskje fordi en
luring har flyttet den til feil mappe, kan jeg da vite nøyaktig hvilke
feilkoder som genereres og fange disse i en Error-trap?
Jeg har nettopp eksperimentert med dette og vanlig Err.Number gir feilkoden
3704, som i følge min Wrox-bok betyr "The operation requested by the
application is not allowed if the object is closed".
Jeg tipper at ADO har en Error-Collection som man kan legge i en løkke, men
jeg har nok ikke syntaksen/kode for dette.
Hvis jeg forsøker med:
For i = 0 to objConn.Errors
Response.Write "ADO Error Number: " & Err.Number
Next
så får jeg kun feilkoden 500 som jo er den generelle internal server error.
Denne kodesnutten er kanskje ikke helt god så det er mulig at der er andre
koder jeg ikke fanger opp.
Men hvis det bare skulle dreie seg om disse to, kan jeg da skrive kode a la
: Hvis feilkode 500 eller 3704 så skriv til klient "Hvorfor i helvete har du
fjerna databasen?". Eller _kan_ det (under ulike forhold) genereres ulike
feilkoder slik at man ikke kan kode på denne måten?
Håper noen forsto hva jeg mener med dette :)
Terje
........................
The End Is Near!
| |
Anders Holbøll (25-08-2001)
| Kommentar Fra : Anders Holbøll |
Dato : 25-08-01 13:32 |
|
Terje wrote:
>
> Men hvis det bare skulle dreie seg om disse to, kan jeg da skrive
> kode a la: Hvis feilkode 500 eller 3704 så skriv til klient
> "Hvorfor i helvete har du fjerna databasen?". Eller _kan_ det
> (under ulike forhold) genereres ulike feilkoder slik at man ikke
> kan kode på denne måten?
Const ConnectionString = "blabla"
Const ErrorLanguage = "norwegian"
Set Conn = Server.CreateObject("ADODB.Connection")
On Error Resume Next
Conn.Open ConnectionString
If Not (Err.Numer = 0) Then
Select Case ErrorLanguage
Case "norwegian":
Response.Write "Hvorfor i helvete har du fjerna databasen?"
Case "danish":
Response.Write "Administratoren er en prut"
Case "proper":
Response.Write "An error has occured. " & _
"We apologize for any inconvenience. " & _
"The administrator of this webserver has been notified. " & _
"If you have any questions please contact " & _
"<a href=""webmaster@" & _
Request.ServerVariables("SERVER_NAME") & """>webmaster@" & _
Request.ServerVariables("SERVER_NAME") & "</a>. "
End Case
Response.End
End If
On Error Goto 0
--
Anders
| |
Terje (25-08-2001)
| Kommentar Fra : Terje |
Dato : 25-08-01 15:46 |
|
"Anders Holbøll" <dev-null-20010820@serveren.dk> skrev i melding
news:3B879AB4.261CBE62@serveren.dk...
> If Not (Err.Numer = 0) Then
Takk for svar Anders, men det var ikke helt dette jeg var ute etter. Skal
prøve å være mer presis nå:)
Scenario: Du har asp-kode som arbeider opp mot en database og den fungerer
perfekt. Så tar du plutselig vekk database-fila. Mitt spørsmål er om ADO da
vil generere en helt spesifikk feilkode som betyr: "Requested file doesn`t
exist!".
I såfall kan man sjekke for denne spesifikke feilkoden og event. la klienten
få vite helt nøyaktig hva som er problemet: nemlig at databasefila ikke er
der hvor den skal være.
I din kode sjekker du kun for en hvilken som helst feilkode, og da oppnår
man altså ikke det jeg er ute etter.
Uansett har jeg nå laget en funksjon som benytter FSO og FileExists som gjør
samme nytten.
Terje
| |
Anders Holbøll (25-08-2001)
| Kommentar Fra : Anders Holbøll |
Dato : 25-08-01 16:08 |
|
Terje wrote:
>
> Scenario: Du har asp-kode som arbeider opp mot en database og den
> fungerer perfekt. Så tar du plutselig vekk database-fila. Mitt
> spørsmål er om ADO da vil generere en helt spesifikk feilkode som
> betyr: "Requested file doesn`t exist!".
Det kommer jo ikke så meget an på asp, men mere på ado og mere specifik
kommer det an på den aktuelle ado driver (en "file does not exist"-fejl
ville jo ikke give nogen mening for en oracle eller sql-server database
(well, måske, men nok ikke)).
Men jeg prøvede lige denne kode (wow, afprøvet kode, det er ikke tit det
sker):
Set Conn = Server.CreateObject("ADODB.Connection")
On Error Resume Next
Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & _
Server.MapPath("testa.mdb")
For Each e In Conn.Errors
Response.Write e.Number & ": " & e.Description & "<br>"
Next
On Error Goto 0
Den giver:
-2147467259: [Microsoft][ODBC Microsoft Access Driver]General error
Unable to open registry key 'Temporary (volatile) Jet DSN for process
0x62c Thread 0x6e0 DBC 0x16e0164 Jet'.
-2147467259: [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr
failed
-2147467259: [Microsoft][ODBC Microsoft Access Driver]General error
Unable to open registry key 'Temporary (volatile) Jet DSN for process
0x62c Thread 0x6e0 DBC 0x16e0164 Jet'.
-2147467259: [Microsoft][ODBC Microsoft Access Driver] Could not find
file '(unknown)'.
og hvis jeg ændre connection-string'en til:
"Driver={Microsoft Access Driver (*.mdb)s};DBQ=" &
Server.MapPath("test.mdb")
(bemærk det ekstra "s" efter "mdb)", altså en driver der ikke findes)
får jeg:
-2147467259: [Microsoft][ODBC Driver Manager] Data source name not found
and no default driver specified
Altså altid samme nummer. Men du kunne naturligvis lave ens tekstsøgning
på "Cound not find file", men det virker som lidt af et hack.
(Jeg forstår nok heller ikke, hvorfor du lige netop vil håndterer den
specifikke fejl specielt)
--
Anders
| |
Terje (26-08-2001)
| Kommentar Fra : Terje |
Dato : 26-08-01 06:09 |
|
"Anders Holbøll" <dev-null-20010820@serveren.dk> skrev i melding
news:3B87BF33.B25F272@serveren.dk...
> Terje wrote:
> >
> > Scenario: Du har asp-kode som arbeider opp mot en database og den
> > fungerer perfekt. Så tar du plutselig vekk database-fila. Mitt
> > spørsmål er om ADO da vil generere en helt spesifikk feilkode som
> > betyr: "Requested file doesn`t exist!".
>
> Det kommer jo ikke så meget an på asp, men mere på ado og mere specifik
> kommer det an på den aktuelle ado driver (en "file does not exist"-fejl
> ville jo ikke give nogen mening for en oracle eller sql-server database
> (well, måske, men nok ikke)).
> Men jeg prøvede lige denne kode (wow, afprøvet kode, det er ikke tit det
> sker):
>
> Set Conn = Server.CreateObject("ADODB.Connection")
> On Error Resume Next
> Conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & _
> Server.MapPath("testa.mdb")
> For Each e In Conn.Errors
> Response.Write e.Number & ": " & e.Description & "<br>"
> Next
> On Error Goto 0
>
> Den giver:
> -2147467259: [Microsoft][ODBC Microsoft Access Driver]General error
> Unable to open registry key 'Temporary (volatile) Jet DSN for process
> 0x62c Thread 0x6e0 DBC 0x16e0164 Jet'.
> -2147467259: [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr
> failed
> -2147467259: [Microsoft][ODBC Microsoft Access Driver]General error
> Unable to open registry key 'Temporary (volatile) Jet DSN for process
> 0x62c Thread 0x6e0 DBC 0x16e0164 Jet'.
> -2147467259: [Microsoft][ODBC Microsoft Access Driver] Could not find
> file '(unknown)'.
>
> og hvis jeg ændre connection-string'en til:
> "Driver={Microsoft Access Driver (*.mdb)s};DBQ=" &
> Server.MapPath("test.mdb")
> (bemærk det ekstra "s" efter "mdb)", altså en driver der ikke findes)
> får jeg:
> -2147467259: [Microsoft][ODBC Driver Manager] Data source name not found
> and no default driver specified
>
> Altså altid samme nummer. Men du kunne naturligvis lave ens tekstsøgning
> på "Cound not find file", men det virker som lidt af et hack.
>
> (Jeg forstår nok heller ikke, hvorfor du lige netop vil håndterer den
> specifikke fejl specielt)
> --
> Anders
Vel, du har sikkert rett i at feikoden er driverspesifikk, og kanskje også
avhengig av ADO-versjonen. Tror nok jeg holder meg til min FSO-løsning.
Generelt: Det hadde åpenbart vært enklere å skrive meningsfylt
error-behandlende kode dersom man kunne tatt utgangspunkt i den helt
spesifikke feilkode, istedenfor den generelle:
If Err.Number > 0 Then
Response.Write "Noe er feil!"
End If
Takk for svar, Anders!
Terje
| |
|
|