webForumDet fria alternativet

ERROR: Item cannot be found ...

13 svar · 244 visningar · startad av timedia

timediaMedlem sedan maj 2001451 inlägg
#1

har kollat och dubbelkollad, men kan inte hitta felet i denna:

Set Rs = Server.CreateObject("ADODB.Recordset")
	Rs.Open "SELECT * FROM shOrders, shCustomers WHERE shOrders.customer=shCustomers.id AND shOrders.id=" & Request("id"), Conn, 1,1
	if not rs.eof then
		[B]shBasket = Rs.Fields("shBasket").Value[/B]
		address = Rs.Fields("address").Value
		postalcode = Rs.Fields("postalcode").Value
		city = Rs.Fields("city").Value
		email = Rs.Fields("email").Value
		phone = Rs.Fields("phone").Value
		name = Rs.Fields("fname").Value & " " & Rs.Fields("lname").Value
	else
		response.end	
	end if

Rs.Close

..får detta felmeddelande:

Error Type:
ADODB.Recordset (0x800A0CC1)
Item cannot be found in the collection corresponding to the requested name or ordinal.
/gamol/html/shViewOrder.asp, line 19
@ndersMedlem sedan juni 200026 914 inlägg
#2

Då finns inget fält i recordsetet som heter shBasket?

timediaMedlem sedan maj 2001451 inlägg
#3

jo, det gör det väl?
jag väljer jo alla fält i båda tabellerna - och i tabellen shOrders ligger shBasket, eller vad har jag missuppfattat?

@ndersMedlem sedan juni 200026 914 inlägg
#4

Ja, om fältet shBasket ligger där så ska det vara så.
Är du säker?

Kör frågan i Access och kolla.

timediaMedlem sedan maj 2001451 inlägg
#5

Någon länk till hur man kör frågor i access? :r

J.N.Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Välj query/frågor i menyn under tabellerna, sedan väljer du tabell, och fält. Knappen uppe till vänster kör frågan, visar sql.

Men, mitt tips är att ta bort den raden (är det 19 eftersom den är fet), och se om det övriga fungerar. Dvs eftersom du inte skriver något alls om det antar jag att du inte får ut något ur db'n alls?

timediaMedlem sedan maj 2001451 inlägg
#7

Nu har jag provkörd i access och tyvärr kan jag inte köra hela satsen där men följande ger korrekt resultat:

SELECT * FROM shOrders, shCustomers WHERE shOrders.customer=shCustomers.id

I addressfältet i webbläsaren står:

http://localhost/gamol/html/shViewOrder.asp?id=15

så följande selectsats borde ju vara korrekt?

SELECT * FROM shOrders, shCustomers WHERE shOrders.customer=shCustomers.id AND shOrders.id="& Request("id"), Conn, 1,1
OveRRidEMedlem sedan feb. 20018 509 inlägg
#8

Varför har du response.end i din if-sats? Om nu recordset:et är tomt kommer inte rs.close eller eventuella andra förstörelserelaterade ( :) ) händelser att inträffa eftersom koden aldrig kommer dit.

timediaMedlem sedan maj 2001451 inlägg
#9

har ändrad response.end till response.write "inga varor här" och noterar att felet nu anges i linjen

address = Rs.Fields("address").Value

..och som vanligt förstår jag NADA
:x
Hela filen här:

<%	Option Explicit ' Vi vill ha koll på våra variabler 
%><!--#include file="prevent_cache.asp"--><!--#include file="connection.asp"--><!--#include file="functions.asp"--><%
Dim numRecords, v
Dim shBasket, TotalPrice, Details

Dim email, BackgroundColor, address, phone, city, postalcode, name

IF Session("shCustomerID") = "" THEN 
	Response.Redirect "shCustomerLogin.asp": response.end
end if

	Set Rs = Server.CreateObject("ADODB.Recordset")
	Rs.Open "SELECT * FROM shOrders, shCustomers WHERE shOrders.customer=shCustomers.id AND shOrders.id="& Request("id"), Conn, 1,1
	if not rs.eof then
		shBasket = Rs.Fields("shBasket").Value
		address = Rs.Fields("address").Value
		postalcode = Rs.Fields("postalcode").Value
		city = Rs.Fields("city").Value
		email = Rs.Fields("email").Value
		phone = Rs.Fields("phone").Value
		name = Rs.Fields("fname").Value & " " & Rs.Fields("lname").Value
	else
		response.write "inga varor här"
	end if

Rs.Close

Dim a, itemsInBasket, One

' Vi hämtar ut alla varors ID-nummer till en kommaseparerad sträng
IF shBasket<>"" THEN
	a = Split(shBasket, "|")
	For Each One in a
		If itemsInBasket <> "" THEN itemsInBasket = itemsInBasket & ","
		itemsInBasket = itemsInBasket & Mid(one, 2, InStr(one, "]")-2)
	next
End If

%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Beställning</title>
	<link rel="STYLESHEET" type="text/css" href="shStyle.css">
</head>

<body BGCOLOR="#FFFFFF">
	
	<P><FONT SIZE="3"><B>Din beställning är skickad!</B></FONT></p>

	Skriv ut den här sidan och spara den.<br>
	Du kommer även att få en bekräftelse via e-post<br><br>
	<B>Datum:</B><br>
	<%= Year(Now) & "-" & AddZero(Month(Now)) & "-" & AddZero(Day( Now)) & " " & Time %><br><br>
	
	<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
	<TR>
	
	<TD CLASS="reciept" VALIGN="TOP" WIDTH="150">
		<B>Namn:</B><br>
		<%=name%><br>
	
	<B>Adress:</B><br>
	<%=address%><br>
	<%=postalcode%>&nbsp;<%=city%><br>
	</TD>
	<TD CLASS="reciept" VALIGN="TOP" WIDTH="160">
	<B>E-post:</B><br>
	<%=email%><br>
	<B>Telefon:</B><br>
	<%=phone%><br>
	</TD>
	
	</TABLE>
	
	
	<br>
		<TABLE WI DTH="400" BORDER=0 CELLSPACING=1 CELLPADDING=0>
		
		<TR BGCOLOR="<%=BackgroundColor%>">
			<TD WIDTH=20 CLASS="reciept">#</TD>
			<TD WIDTH=170 CLASS="reciept"><B>Vara</B></TD>
			<TD WIDTH=60 CLASS="reciept" ALIGN=RIGHT><B>&aacute; pris</B></TD>
			<TD WIDTH=60 CLASS="reciept" ALIGN=RIGHT><B>Summa</B></TD>
		</TR>
	<%
	Set Rs = Server.CreateObject("ADODB.RecordSet")
	Rs.Open "SELECT * FROM shItems WHERE id IN (" & itemsInBasket & ")",Conn,1,1
	Dim noItems
	if not rs.eof then
		numRecords = Rs.RecordCount-1
		BackgroundColor = "#EEEEEE"
		
		for v= 0 to numRecords
			noItems = itemCount( Rs.Fields("id").Value, False)
			If BackgroundColor = "#EEEEEE" THEN BackgroundColor ="#FFFFFF" Else BackgroundColor = "#EEEEEE"
			%>
				<TR BGCOLOR="<%=BackgroundColor%>">
					<TD WIDTH=20 CLASS="reciept"><%=noItems%></TD>
					<TD WIDTH=170 CLASS="reciept"><%=Rs.Fields("title").Value%></TD>
					<TD WIDTH=60 CLASS="reciept" ALIGN=RIGHT><%=Rs.Fields("price").Value%></TD>
					<TD WIDTH=60 CLASS="reciept" ALIGN=RIGHT><%=Rs.Fields("price").Value * noItems%></TD>
				</TR>
			
			<%
			TotalPrice = TotalPrice + itemCount( Rs.Fields("id").Value, False) * Rs.Fields("price").Value
			Rs.MoveNext
		next
		
		%>
		<TR BGCOLOR="<%=BackgroundColor%>">
			<TD COLSPAN="4" WIDTH=310 CLASS="reciept" HEIGHT="1" BGCOLOR="#000000"></TD>
		</TR>
		<TR BGCOLOR="<%=BackgroundColor%>">
			<TD WIDTH=20 CLASS="reciept">&nbsp;</TD>
			<TD WIDTH=170 CLASS="reciept"><B>Summa:</B></TD>
			<TD WIDTH=120 COLSPAN="2" CLASS="reciept" ALIGN=RIGHT><%= TotalPrice%> kr</TD>
		</TR>
		
		<%
	end if
	Rs.Close
	Set Rs = Nothing	
	%>
	</TABLE><br>
	

	<a href="shFrames.asp">&laquo; Tillbaka till shoppen</A> | <a href="JavaScript:print()">Skriv ut</A><br>

</FORM>

</body>
</html>
<%
	' CleanUp

	Conn.Close
	Set Conn = Nothing

%>
J.N.Medlem sedan apr. 20031 660 inlägg
#10

HEJ!

Den går alltså förbi ShBasket ovanför?
Två allmänna felsökningstips:
- plocka bort felande kod
- skriv ut rs.eof, för att se att det finns ett rs

Dvs när man får fel, är det endast en sak som gäller, begränsa koden som används för att lokalisera den kod som är fel.

Förresten: Varför har du denna kod?

Year(Now) & "-" & AddZero(Month(Now)) & "-" & AddZero(Day( Now)) & " " & Time

Den är väl lika

=now()
timediaMedlem sedan maj 2001451 inlägg
#11

tack J.N ,(och den går förbi Shbasket), men:
jag 'tror' jag redan har plockad bort felande kod när jag körde denna:

SELECT * FROM shOrders, shCustomers WHERE shOrders.customer=shCustomers.id

och den funkade? ..och jag har väl redan skrivit ut rs.eof när jag skriver

response.write "inga varor här"

..eller är jag ute på en vinglig trehjuling igen?
:l

och jag har fortfarande inget RS x(

J.N.Medlem sedan apr. 20031 660 inlägg
#12

HEJ!

Okej, om vi sammanfattar det lite enkelt, det är alltså rad tre du fastnar på här?

1if not rs.eof then
2  shBasket = Rs.Fields("shBasket").Value
3  address = Rs.Fields("address").Value
4  postalcode = Rs.Fields("postalcode").Value
  city = Rs.Fields("city").Value
  email = Rs.Fields("email").Value
  phone = Rs.Fields("phone").Value
  name = Rs.Fields("fname").Value & " " & Rs.Fields("lname").Value
else
  response.write "inga varor här"
end if

Då kommer allmänt tips två in: Plocka bort raden! Fastnar den sedan på rad 4, då är det dags att bli orolig...
Skrevs shBasket ut med ett värde? Om ja, varför blir inte resten av RS något då? Det är svårt för oss att lista ut...

(Och ja, du skriver ut RS när det är tomt, helt rätt, mitt råd ska tolkas som allmänt.)

timediaMedlem sedan maj 2001451 inlägg
#13

ja, tyvärr fastnar den på rad 4 när jag kommenterar bort rad 3 :x

J.N.Medlem sedan apr. 20031 660 inlägg
#14

HEJ!

Då har du problem... Den skriver alltså ut shbasket, fastnar på nästa? Då finns inte det fältet, helt enkelt, felstavat eller liknande. Kommentera bort raden, fortsätt med resten av koden, som jag skrev tidigare.

Svårt att ge ett annat råd, det är helfel någonstans alltså.

Jag skriver inte ut rs-värde som du gör, utan med RS("fält"), men det har ingen betydelse, finns det inte, finns det inte.

Genererad på 377 ms · cache AV · v20260730165559-full.f96bc7eb