Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:05 Der 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.

/bruger.asp, line 94
Avatar billede tmceu Praktikant
25. september 2001 - 15:08 #1
Det betyder at du har et tomt recordset, men får du ikke andre fejl ?

Du benytter (igen) et reserveret ord \"set\". Hvis date og set er felter i din tabel, skal din sql sætning være

Select MAX([date]) AS nextwardate FROM wars Where [set]=3
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:12 #2
Hey igen tmceu

nu kommer den med fejlen:

Microsoft JET Database Engine error \'80040e14\'

Syntax error (missing operator) in query expression \'[date]=\'.

/bruger.asp, line 92
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:13 #3
Og den linje den brokker sig over er så denne:

SQLLLL = \"Select * From wars Where [date]=\" & nextwardate
Avatar billede tmceu Praktikant
25. september 2001 - 15:18 #4
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
Avatar billede tmceu Praktikant
25. september 2001 - 15:20 #5
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.
Avatar billede tmceu Praktikant
25. september 2001 - 15:22 #6
Et lille tip:

Du skal bruge [] uden om feltnavne, hvis disse er reserverede ord eller indeholder mellemrum, eks.

SELECT * FROM [TABLE]

SELECT * FROM [Min Tabel]

SELECT [SET], [OPEN] FROM Tabel
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:23 #7
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=\'.

/bruger.asp, line 92
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:25 #8
ok =) Du har vist os sagt det med [] til mig et par gange......
Avatar billede tmceu Praktikant
25. september 2001 - 15:30 #9
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.
Avatar billede tmceu Praktikant
25. september 2001 - 15:34 #10
Dagens tip # 2:

Du skal altid kontrollere om dit recordset er tomt. Dette gør du nemmest med .EOF, eks.

If not Record.EOF then
- kode hvis ok
end if

evt. udvidet med:

If not Record.EOF then
- kode hvis ok
else
response.write \"Der er ingen data\"
end if

eller for at loope igennem et recordset

do until Record.EOF
- kode for hver record
Record.Movenext
loop
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:36 #11
Nu ser den sådan her ud:

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\"
end if

nextwar = nextwardate & \" kl. \" & nextwartime

if nextwar = \" kl. \" then
nextwar = \"? kl. ?\"
end if
Avatar billede tmceu Praktikant
25. september 2001 - 15:38 #12
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
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:39 #13
Fejlen ser så således ud:

Microsoft VBScript compilation error \'800a03ea\'

Syntax error

/bruger.asp, line 96

else
^
Avatar billede tmceu Praktikant
25. september 2001 - 15:41 #14
Åh, en detalje, ret den til:

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\")
else
response.write \"Fejlmeddelelse\"
response.end
end if

nextwar = nextwardate & \" kl. \" & nextwartime

if nextwar = \" kl. \" then
nextwar = \"? kl. ?\"
end if
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:42 #15
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?
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:43 #16
Ok...har fjernet d der end if som var for meget, og nu er fejlen den samme som vi startede med, nemlig:

Microsoft JET Database Engine error \'80040e14\'

Syntax error (missing operator) in query expression \'date=\'.

/bruger.asp, line 92
Avatar billede tmceu Praktikant
25. september 2001 - 15:44 #17
fejlen er at du har en løsthængende ELSE

syntaksen er

if xxx then
-----
else
----
end if

I din kode er den

If xxx then
----
end if
else
Avatar billede tmceu Praktikant
25. september 2001 - 15:46 #18
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
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:51 #19
okay.....nu ser koden præcis ud som den du har skrevet ovenover, og fejlen er stadig:

Microsoft JET Database Engine error \'80040e14\'

Syntax error (missing operator) in query expression \'date=\'.

/bruger.asp, line 97
Avatar billede tmceu Praktikant
25. september 2001 - 15:54 #20
Aha, det er selvfølgelig fordi den opfatter date som date() FUNKTIONEN, og derfor skal date være pakket ind i [date]
Avatar billede knaldperlen Nybegynder
25. september 2001 - 15:56 #21
Den er altså dum den her:

Microsoft JET Database Engine error \'80040e14\'

Syntax error (missing operator) in query expression \'[date]=\'.

/bruger.asp, line 97
Avatar billede tmceu Praktikant
25. september 2001 - 16:00 #22
Prøv at udskrive værdien af variablen nextwardate umiddelbart inden du bruger den i dit 2. sql statement.

Du kan også prøve at pakke den ind i flg.:

SQLLLL = \"Select * From wars Where date=#\" & nextwardate & \"#\"
Avatar billede knaldperlen Nybegynder
25. september 2001 - 16:04 #23
Den er god nok.....Record returnere med værdien 9/23/2001  som er MAZ af date
Avatar billede knaldperlen Nybegynder
25. september 2001 - 16:06 #24
Microsoft JET Database Engine error \'80040e07\'

Syntax error in date in query expression \'date=##\'.

/bruger.asp, line 97
Avatar billede tmceu Praktikant
25. september 2001 - 16:11 #25
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
Avatar billede tmceu Praktikant
25. september 2001 - 16:20 #26
Er du her endnu ?
Avatar billede knaldperlen Nybegynder
25. september 2001 - 16:50 #27
hehe nope...var lige nede og hente kæresten....sorry jeg ik lige skrev d, men d skulle gå stærkt!
Avatar billede tmceu Praktikant
25. september 2001 - 22:45 #28
Hvad øhh, virker det nu ?
Avatar billede knaldperlen Nybegynder
26. september 2001 - 23:54 #29
Rykkede mega meget om på d...og har nu fået d til at virke hehe takker =)
Avatar billede tmceu Praktikant
27. september 2001 - 01:29 #30
Det var så lidt, og vi ses (sikkert) :-)
Avatar billede knaldperlen Nybegynder
27. september 2001 - 11:04 #31
jep d gør vi jo nok =)
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