25. september 2001 - 15:05Der er
30 kommentarer og 1 løsning
Ev......fejl i min ASP-kode
Har følgende bid:
SQLLL = \"Select MAX(date) AS nextwardate FROM wars Where set=3\" Set Record = Conn.Execute(SQLLL) nextwardate = Record(\"nextwardate\") SQLLLL = \"Select * From wars Where date=\" & nextwardate Set Record = Conn.Execute(SQLLLL) \'nextwartime = Record(\"nextwartime\") nextwartime = Record(\"time\")
nextwar = nextwardate & \" kl. \" & nextwartime
når jeg kører den siger den følgende i fejl:
ADODB.Field error \'800a0bcd\'
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
Undskyld, date er IKKE et reserveret ord, prøv med Select MAX(date) AS nextwardate FROM wars Where [set]=3
For at undgå fejl, kan du ændre til nedenstående
SQLLL = \"Select MAX(date) AS nextwardate FROM wars Where set=3\" Set Record = Conn.Execute(SQLLL) if not Record.EOF then nextwardate = Record(\"nextwardate\") SQLLLL = \"Select * From wars Where date=\" & nextwardate Set Record = Conn.Execute(SQLLLL) if not Record.EOF then \'nextwartime = Record(\"nextwartime\") nextwartime = Record(\"time\") nextwar = nextwardate & \" kl. \" & nextwartime end if else response.write \"Fejlmeddelelse\" end if
Grunden til den fejl du fik i linie 92, skyldes sikkert at der ikke bliver returneret noget recordset i dit første sql statement, derfor indeholder variablen nextwardate ingenting. Når du så forsøger med [date]=nextwardate er det faktisk [date]= (ingenting)
P.S. Der vil ikke ske noget ved at sætte [] uden om feltnavne, der ikke er reserverede ord og det er derfor ikke årsagen til fejlen.
Bøhhh...dem der lange du gav mig, kan jeg ik rigtig bruge til noget, da jeg har flyttet SQL-sætningerne længere op og derfor kommer den ikke med EOF fejlen mere.....men den kommer stadig med:
Microsoft JET Database Engine error \'80040e14\'
Syntax error (missing operator) in query expression \'date=\'.
Yeps, men det skader jo aldrig at sige det igen. på et tidspunkt bliver du så træt af at høre det, at du husker det :-)
M.h.t. din fejl, er det grundlæggende den samme fejl, uanset hvor du har placeret din første sql sætning.
Hvis du ikke får et recordset med indhold tilbage i første sql, vil din næste sql altid fejle, da du bruger en værdi fra det første som parameter i en where clause. Du er derfor nødt til at kontrollere for .EOF på både dit første og andet recordset, da du ellers altid vil få en fejl, hvis én af dem fejler.
Fint, men du bør udvide den med response.end, hvis den første sql ikke returnerer noget, da den ellers vil køre koden færdig og stadig give fejl nr. 2
SQLLL = \"Select MAX(date) AS nextwardate FROM wars Where [set]=3\" SQLLLL = \"Select * From wars Where date=\" & nextwardate
Set Record = Conn.Execute(SQLLL) nextwardate = Record(\"nextwardate\")
Set Record = Conn.Execute(SQLLLL) if not Record.EOF then nextwartime = Record(\"time\") end if else response.write \"Fejlmeddelelse\" response.end end if
nextwar = nextwardate & \" kl. \" & nextwartime
if nextwar = \" kl. \" then nextwar = \"? kl. ?\" end if
Set Record = Conn.Execute(SQLLL) nextwardate = Record(\"nextwardate\")
Set Record = Conn.Execute(SQLLLL) if not Record.EOF then nextwartime = Record(\"time\") end if else response.write \"Fejlmeddelelse\" response.end end if
nextwar = nextwardate & \" kl. \" & nextwartime
if nextwar = \" kl. \" then nextwar = \"? kl. ?\" end if
og stadig samme fejl som ovenover....
har fået denne fejl et par gange når jeg har lavet if-sætninger...og har aldrig ku løse den?
Ja, jeg ventede bare på at du skulle skrive det :-)
Jvf. dagens tip # 2, skal du altid kontrollere dine recordsets. Jeg vil påstå at dit første recordset er tomt, derfor skal du rette til flg.
SQLLL = \"Select MAX(date) AS nextwardate FROM wars Where [set]=3\" SQLLLL = \"Select * From wars Where date=\" & nextwardate
Set Record = Conn.Execute(SQLLL) if not Record.EOF then nextwardate = Record(\"nextwardate\") else response.write \"Fejlmeddelelse\" response.end end if
Set Record = Conn.Execute(SQLLLL) if not Record.EOF then nextwartime = Record(\"time\") else response.write \"Fejlmeddelelse\" response.end end if
nextwar = nextwardate & \" kl. \" & nextwartime
if nextwar = \" kl. \" then nextwar = \"? kl. ?\" end if
Se nu lige her, Syntax error in date in query expression \'date=##\'.
dette er jo resultatet af date=#\" & nextwardate & \"#\" hvilket må betyde at nextwardate er tom...
Dette skyldes at du initialiserer din SQLLLL før nextwardate har en værdi, og du skal derfor flytte den ned:
SQLLL = \"Select MAX(date) AS nextwardate FROM wars Where [set]=3\"
Set Record = Conn.Execute(SQLLL) if not Record.EOF then nextwardate = Record(\"nextwardate\") SQLLLL = \"Select * From wars Where date=#\" & nextwardate & \"#\" else response.write \"Fejlmeddelelse\" response.end end if
Set Record = Conn.Execute(SQLLLL) if not Record.EOF then nextwartime = Record(\"time\") else response.write \"Fejlmeddelelse\" response.end end if
nextwar = nextwardate & \" kl. \" & nextwartime
if nextwar = \" kl. \" then nextwar = \"? kl. ?\" end if
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.