webForumDet fria alternativet

Plocka ut från flera databasfiler med 2 loopar

ASP

10 svar · 310 visningar · startad av pellsäter

Medlem sedan aug. 2000526 inlägg
Frågan#1

Hej har fått ordning på en ska i Access men nu behöver jag hjälp att presentera datan också..

jag har ett antal produkter i DB. Vissa har olika smaker vissa har inga smakalterntiv alls. De produkter som har smaker, de smakerna ska visas i en dropdownlist.

Titta gärna på
http://www.fitnessbutiken.se/varor.asp?item=pharma

Där är det hårdkodade smker och nu har jag lagt allt i en DBfil..

Kolla denna kod och förklara varför inte smakerna visas och allt stannar när ni testar denna länken som är den jag vill kunna använda
http://www.fitnessbutiken.se/varor_smak.asp?item=pharma

SQL-satsen

sql="Select * from produkter P left outer join tblSmak tS ON tS.ssmak = P.smak where Item = '"& item & "' and aktiv = true order by prodnummer"

Här visas lite produktinfo priser m.m.

Sedan kommer de ev. smakerna som produkten ska ha i dropdown

<%
if "" & rs("smak") <> "" then 
    Response.Write "<select name=""smak"" class=""form_varor"">"

    While Not rs("ssmak").EOF
      Response.Write "<option value=""" & rs("ssmak") & """>" & rs("ssmak") & "</option>"

      rs.MoveNext
    Wend

    Response.Write "</select>"
  End If
%>
Medlem sedan jan. 2001361 inlägg
#2

Hur ser dina tabeller ut?

Medlem sedan mars 20002 836 inlägg
#3

Om du tar View Source när du laddar din sida i en browser så ser du snabbt vad som är fel:

Microsoft VBScript runtime error '800a01b6' Object doesn't support this property or method: 'rs(...).eof' /varor_smak.asp, line 293

Oftast när "inget syns" i en drop-down är det ett fel som syns när det skrivs ut då den texten kommer i själva <select ... </select> koden.

cya,
PatrikB

Medlem sedan aug. 2000526 inlägg
#4

I produkter ser det ut så här
prodid (ID nummer)
item (Varugrupp)
vara
pris
smak
aktiv (true /False)

tblSmak filenser ut så här
smak (bokstaäver A,B osv)
ssmak (olika smaker som tillhör olika grupper av bokstäver)

Medlem sedan feb. 200112 078 inlägg
#5

Det har inte med det där att göra. Du kan inte använda metoden .eof på ett specifikt fält som du gör ovan, det måste göras på själva objektet, alltså ditt recordset.

<%
if "" & rs("smak") <> "" then 
    Response.Write "<select name=""smak"" class=""form_varor"">"

    [b]While Not rs.EOF[/b]
      Response.Write "<option value=""" & rs("ssmak") & """>" & rs("ssmak") & "</option>"

      rs.MoveNext
    Wend

    Response.Write "</select>"
  End If
%>
Medlem sedan aug. 2000526 inlägg
#6

Problemet då är att då funkar det inte pga att jag en loop innan som ligger där kika på sidan

Medlem sedan feb. 200112 078 inlägg
#7

Ok, jag tror jag fattar. Men isåfall är det nog snarare så att det är enklare att göra om strukturen.

Om du hämtar alla smaker och produktens information i samma recordset och sedan skall loopa ut dem i olika former (om man nu säger så) kommer du få problem. Vi gör två recordset istället, det tjänar man nog på, förutom möjligtvis lite i prestanda.

Du får se över de två röda raderna, eftersom jag inte riktigt vet ifall kolumnnamn och liknande stämmer.

[red]set rs = conn.execute("SELECT * FROM table")[/red]

while not rs.eof 
   response.write rs("produktnamn")

   [red]set rsS = conn.execute("SELECT * FROM smak WHERE smakId = " & rs("smakId") & "")[/red]
   if not rsS.eof then
      Response.Write "<select name=""smak"" class=""form_varor"">"

      While Not rsS.EOF
         Response.Write "<option value=""" & rsS("ssmak") & """>" & rsS("ssmak") & "</option>"
         rsS.MoveNext
      Wend

      Response.Write "</select>"
   end if

rs.movenext
wend
Medlem sedan mars 20002 836 inlägg
#8

Har du fått bukt med felmeddelandet jag postade här ovan???? eller har du missat det?

/PatrikB

Medlem sedan feb. 200112 078 inlägg
#9

PatrikB skrev:

Har du fått bukt med felmeddelandet jag postade här ovan???? eller har du missat det?

/PatrikB

Det berodde, som sagt på while not rs("kol").eof, som ju var lite galet. ;)

Medlem sedan aug. 2000526 inlägg
#10

Skrev koden så här

<%
psmak = rs("smak")
sql1 = "SELECT * FROM tblSmak WHERE smak = " & psmak & ""
set rsS=Server.CreateObject("ADODB.Recordset")
rsS.Open sql1, conn

if not rsS.eof then
      Response.Write "<select name=""smak"" class=""form_varor"">"

      While Not rsS.EOF
         Response.Write "<option value=""" & rsS("ssmak") & """>" & rsS("ssmak") & "</option>"
         rsS.MoveNext
      Wend

      Response.Write "</select>"
   end if

%>

och får detta

SQLState: 07001
Native Error Code: -3010
[INTERSOLV][ODBC SequeLink driver][ACCESS][Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/varor_smak.asp, line 292

jag hittar inte felet

Medlem sedan juni 200032 967 inlägg
#11

Felmeddelandet betyder att du har ett tabell- eller fältnamn som inte stämmer. Min gissning är att fältet smak är ett textfält, och därmed skall ha apostrofer runt värdet, annars tolkas det ju som ett fältnamn.

sql1 = "SELECT * FROM tblSmak WHERE smak = '" & psmak & "'"

Mvh

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)