Avatar billede peter_holst Praktikant
07. juli 2005 - 13:08 Der er 23 kommentarer og
1 løsning

ASP/SQL fejl

Hey

Jeg har en side, som henter noget data fra en database.
Jeg har så lavet et link:

<a href="../kursus_s_info.asp?Holdnr=<%=rs100("Holdnr")%>"><%= NTekst %></a>

Som gør at man kommer videre til en side der skal vise flere oplysninger om det emne man har valgt at klikke på.
Men istedet for jeg denne fejl:

ADODB.Field (0x80020009)
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/aftenskolen/kursus_s_info.asp

Mit databasekode ser således ud:

<%
Response.Buffer = True

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../databaser/kurser.mdb")

IDnr = Trim(Request("Holdnr"))
Sql = "SELECT * FROM Hold WHERE Holdnr=" & IDnr
Set rs =  Conn.Execute(Sql)

%>

Nogen der kan finde fejlen?
Avatar billede busschou Praktikant
07. juli 2005 - 13:21 #1
Det er jo svært at sige lige nøjagtig hvor i din kode fejlen kommer
Men fejlen betyder at du prøver at skrive noget ud fra et recordset som er tomt
Det er altid en god ide at tjekke på om det er tomt først fx sådan her
---
Sql = "SELECT * FROM Hold WHERE Holdnr=" & IDnr
Set rs =  Conn.Execute(Sql)
If Not rs.Eof Then
  //rs er ikke tom og der kan skrives ud fra det
Else
  //rs er tom og der kan ikke hentes noget ud
End if
Avatar billede busschou Praktikant
07. juli 2005 - 13:23 #2
Men jeg kan ikke ud fra det du har skrevet sige om det er rs eller rs100 der skal tjekkes på
Men humlen er at du et og andet sted har en sql sætning som ikke returnerer noget, fx hvis der ikke er noget Holdnr = IDnr , og du derefter spørger til rs("Holnr") Ja så får du en fejl fordi der ikke er noget rs("Holdnr") :o)
Avatar billede peter_holst Praktikant
07. juli 2005 - 13:38 #3
Den siger at der ikke er noget data, men det kan altså ikke passe.
Jeg tester med et Holdnr der hedder 521-700, og når jeg kigger i databasen er den der altså!
Avatar billede peter_holst Praktikant
07. juli 2005 - 13:41 #4
På den side man kommer fra hedder recordsættet rs100 og på den side man kommer til hedder det bare rs. Kan det være et problem?
Grunden til det hedder rs100 er at jeg har flere recordsets på den side man kommer fra.
Avatar billede busschou Praktikant
07. juli 2005 - 13:41 #5
er du sikker på det er sat
Prøv skrive din sql ud, altså
--
Sql = "SELECT * FROM Hold WHERE Holdnr=" & IDnr
response.write Sql
Set rs =  Conn.Execute(Sql)
--
Hvad type er Holdnr i øvrigt? for det kan da ikke være et tal hvis værdien er 521-700
Avatar billede busschou Praktikant
07. juli 2005 - 13:42 #6
Hvis du har 100 forskellige recordset og holde styr på så er det da muligt at du har lavet en smutter et sted, altså med så mange "bolde i luften".
Avatar billede peter_holst Praktikant
07. juli 2005 - 13:46 #7
jeg har kun 17 og de virker fint. (Lister en masse data op fra databasen - dem man klikker på for at komme til siden der laver fejl)
Avatar billede busschou Praktikant
07. juli 2005 - 13:48 #8
Altså, fejlen er klar, den betyder at du prøver hive Holdnr ud af et tomt recordset!
Du må få et linje nummer på din fejl medelelse så du kan se specifikt hvilken linje det er, så du kan se om det er rs100, eller rs eller rs"noget andet" ...
Derfra må du kunne gå baglæns og se om du får dit recordset omdøbt ved en fejl eller får hentet noget du ikke regner med eller lign
Avatar billede peter_holst Praktikant
07. juli 2005 - 13:49 #9
Jeg får følgende når jeg udskriver min sql.

SELECT * FROM Hold WHERE Holdnr=521-700

Og det er da vist rigtig nok...ik?
Avatar billede busschou Praktikant
07. juli 2005 - 13:49 #10
Ellers må du poste hele din kode herinde samt med angivelse af hvilken linje fejlen kommer i
Avatar billede busschou Praktikant
07. juli 2005 - 13:50 #11
hvad er Holdnr ? er det en streng så skal der ' omkring
Sql = "SELECT * FROM Hold WHERE Holdnr = '" & IDnr & "'"
Avatar billede peter_holst Praktikant
07. juli 2005 - 13:50 #12
Den viser desvære ikke hvor fejlen er.
Avatar billede peter_holst Praktikant
07. juli 2005 - 13:54 #13
Okay. nu siger den at der er en expected end of statement i denne sætning

Sql = "SELECT * FROM Hold WHERE Holdnr='" & IDnr"'"
Avatar billede busschou Praktikant
07. juli 2005 - 13:55 #14
ja det er klart ;o)
Du mangler jo &
Sql = "SELECT * FROM Hold WHERE Holdnr = '" & IDnr & "'"
Avatar billede peter_holst Praktikant
07. juli 2005 - 14:02 #15
Det er ikke så klart for mig. Er ret ny med det her :-)
Men nu kom jeg da videre, røg fra fejl i linie 9 til fejl i linie 74 :-)

Her får jeg følgende fejl:

ADODB.Recordset (0x800A0CC1)
Item cannot be found in the collection corresponding to the requested name or ordinal.
/aftenskolen/kursus_s_info.asp, line 74

Linien ser således ud:

<td class="8pt" valign="top"><%=rs("Slutdag")%> den <%=rs("Slutdato")%></td>

Er det en problem hvis dataen den henter indeholder tegn som - og : ?
Avatar billede busschou Praktikant
07. juli 2005 - 14:10 #16
Man skal prøve at lære at læse fejlmeddelelserne :o)
Så kommer det til en lige pludselig så bare rolig :o)
Din fejl 13:54;04 siger at den forventede at stengen sluttede
Hvis du ser på din streng 13:54:04 og min 13:55:01 så vil du se en forskel
I asp er en streng omklamret af gåseøjne, et og (&) benyttes til at sætte strenge sammen med variable. Da din streng i forhold til min manglede et & efter IDnr så regnede asp med at strengen var slut efter variablen, men da asp fandt "'" så melder den fejl
Det kan du jo tygge lidt på ;o)
---
Den nye fejl siger at den ikke kan finde den aktuelle post i recordsættet i forhold til det navn man har bedt om
Med andre ord kan den ikke finde "Slutdag" eller måske "Slutdato" i recordsettet "rs"
Da den kun giver linje nummeret kan jeg ikke sige hvilken en som fejler
Men fejlen betyder på dansk at "Slutdag"/"Slutdato" ikke findes i den tabel du har søgt i.
Det kan så betyde at du måske har skrevet rs hvor du mener rs100 det er jeg så ikke sikker på
Men den kan ikke finde enten slutdag eller slutdato i resultatet af din query
Avatar billede busschou Praktikant
07. juli 2005 - 14:11 #17
Det betyder ingenting om din streng indeholder "-" eller ":"
Det eneste der kan betyde noget er hvis den indeholder html kode som "<b>" med mere
Så vil det nemlig blive fortolket som html kode
Avatar billede peter_holst Praktikant
07. juli 2005 - 14:17 #18
Jeg tygger lidt... :-)

På den side vi arbejder med her er der kun et recordset (rs) og tabellen i databasen indeholder altså både Slutdag og Slutdato samt en masse andet.

Se filen her: http://www.hfk-haderslev.dk/peter/kursus_s_info.txt
Avatar billede busschou Praktikant
07. juli 2005 - 14:22 #19
ok for fejlen betyder altså at en Slutdag eller Slutdato ikke findes
Men det er case sensitive
Så er du sikker på det ikke hedder SlutDag eller SlutDato eller lign i tabellen?
Avatar billede peter_holst Praktikant
07. juli 2005 - 14:46 #20
:o) de hedder Slutdag og Slutdato.
Avatar billede busschou Praktikant
07. juli 2005 - 14:50 #21
Hmm det er altså det fejlen betyder, så med mindre du har talt linjerne forkert og det måske er et felt i linjen oven over så forstår jeg det ikke
Du kan evt prøve at skrive alle dine felter ud lige neden under dit sql kald
altså
.
Sql = "SELECT * FROM Hold WHERE Holdnr='" & IDnr & "'"
Set rs =  Conn.Execute(Sql)
response.write "Slutdag:"&rs("Slutdag")&"<br>"
response.write "Slutdag:"&rs("Slutdato")&"<br>"
osv osv med alle dine felter
Avatar billede peter_holst Praktikant
07. juli 2005 - 14:53 #22
Det prøver jeg lige.
Avatar billede peter_holst Praktikant
07. juli 2005 - 15:03 #23
Når man sider og skriver alle felterne i databasen opdager man pludselig nogle ting :o) - Nu virker det som det skal.

Du skal have en STOR tak for din hurtige hjælp.
Du må hellere lave et lille svar, så du kan få nogle points.
Avatar billede busschou Praktikant
07. juli 2005 - 15:04 #24
ja det er jo det, nogen gange ser man sig blind på en lille ting
og her er så et lille svar :o)
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