27. august 2004 - 22:29Der er
51 kommentarer og 1 løsning
Lave select om så der hentes fra access database
Hvordan laver jeg denne om så den hentes fra database og så der er mulighed for at vælge flere kategorier?
Jeg har denne fra en ret form men den kan jeg ikke få til at virke, den siger at der er en fejl: Type mismatch: 'rs'
<%OpenDatabase SQL = "select hojtid, hojtidnavn from kategorier order by hojtid" set katrs = Conn.Execute(SQL) Response.write "<select name=""hojtid"" id=""hojtid"">" do while not katrs.EOF response.write "<option value=""" & katrs("hojtid") & """" if Cstr(rs("hojtid"))=Cstr(katrs("hojtid")) then response.write "selected" response.write ">" & katrs("hojtidnavn") & "</option>" katrs.Movenext loop response.write "</select>" CloseDatabase %>
Ja men connection bliver også åbnet oppe i toppen af din kode:
<%Dim Id
OpenDatabase
Det kan måsek være katrs den brokker sig over. Prøv at definere katrs som recordset: <% set katrs = Server.CreateObject("ADODB.Recordset") SQL = "select hojtid, hojtidnavn from kategorier order by hojtid" set katrs = Conn.Execute(SQL)
nej, for det er en af mine andre sider hvor jeg kan rette i disse dataer.
Det her er opret siden og der har jeg kun indsat dette:
<%OpenDatabase SQL = "select hojtid, hojtidnavn from kategorier order by hojtid" set katrs = Conn.Execute(SQL) Response.write "<select name=""hojtid"" id=""hojtid"">" do while not katrs.EOF response.write "<option value=""" & katrs("hojtid") & """" if Cstr(rs("hojtid"))=Cstr(katrs("hojtid")) then response.write "selected" response.write ">" & katrs("hojtidnavn") & "</option>" katrs.Movenext loop response.write "</select>" CloseDatabase %>
I toppen åbner du til databasen og fylder et recordset med data:
OpenDatabase if Request("knap") = "" then strSQL="SELECT * FROM opskrifter WHERE id= "&Request.Querystring("id") Set rs = Conn.Execute(strSQL)
else
hvis man lukker eller åbner den samem connection nedlægges rs og det kan ikke bruges som et recordset. Da det er samme Conn skulle det ikke være nødvendigt at åbne og lukke flere gange, men åbne i toppen og lukke igen bunden.
Okay vi starter forfra. Glem spørgsål: 27/08-2004 23:02:42 (dette er ikke noget der er på den side jeg ønsker at lave)
Det jeg har på er kun dette:
<%OpenDatabase SQL = "select hojtid, hojtidnavn from kategorier order by hojtid" set katrs = Conn.Execute(SQL) Response.write "<select name=""hojtid"" id=""hojtid"">" do while not katrs.EOF response.write "<option value=""" & katrs("hojtid") & """" if Cstr(rs("hojtid"))=Cstr(katrs("hojtid")) then response.write "selected" response.write ">" & katrs("hojtidnavn") & "</option>" katrs.Movenext loop response.write "</select>" CloseDatabase %>
Det jeg har er nogle "select" felter som jeg vil lave så den henter fra databasen med vælge mulighed.
Det skal være sådanne at der kan vælges flere felter fra "selecten" og så hvordan det hentes ud igen da dette vil blive indsat i samme felt i databasen
Forklaring på det problem er givet 27/08-2004 23:46:48
Det fordi du genåbner din connection med OpenDatebase så laer du et ny connection og de recordset som er åbenet med den gamle connection forsvinder.
Så du nød til at ligge alle din kolonner over i variable så dette: if Request("knap") = "" then strSQL="SELECT * FROM opskrifter WHERE id= "&Request.Querystring("id") Set rs = Conn.Execute(strSQL)
else
Bliver til:
if Request("knap") = "" then strSQL="SELECT * FROM opskrifter WHERE id= "&Request.Querystring("id") Set rs = Conn.Execute(strSQL) hojtid=rs("hojtid") 'dem alle sammen '...=rs("...") else
og så kan du i rettes rs("hojtid") til hojtid: if inStr(1, ","&Cstr(hojtid)&",", ","&Cstr(katrs("hojtid"))&",")>0 then response.write "selected"
poster lige hele min kode for vi misforstår hinanden og der er jo ikke nogen grund til at spille tid. Du skal bare glemme alt hvad der er skrevet til nu.
Det er bare en simpel dropdown list jeg vil have lavet så skal hentes fra databasen.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="css.css" rel="stylesheet" type="text/css"> </head>
så vil jeg gerne have at den går ind i databasen og henter navnet på kategorien og id´en. Og så når jeg gemmer opskriften så indsætter den id´en for hvor opskriften høre til.
Der udover vil jeg have lavet så det var muligt at vælge flere kategorier fra fx højtider så jeg kan indsætte opskriften under både jul og nytår.
With Response .Write"<td width='150'>" .Write"<li>" & strLink & "</li>" .Write"</td>" & vbcrlf End With if (i mod 3) = 0 then Response.Write "</tr><tr>" & vbcrlf end if i = i + 1 rs.MoveNext wend end if ' her afsluttes dit check.
if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = "where hojtid in ('"& Request.Form("hojtidIDer") &"') " else sql = "and hojtid in ('"& Request.Form("hojtidIDer") &"') " end if end if end if
Når alle ID ligger i samme kolonne vil du havde det som en komma seperet streng. hojtid = "2,4,7,11"
Så kan man ikke længere tjekke på om den er = "1" så må man søge efter den man ønsker at tjekke for. Hvis man søger efter "1" uden noget omkring vil den så tro "1" er i strengen pga. 11. Så derfor sættes komma omkring alle tal ",2,4,7,11," så søger man efter <komma>ID<komma> eksempel ",1,". Så vil den kun finde hvor der står 1.
jeg indsat dette men den gider ikke ud som ,1,30,11 men kun som enkel id
if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = "where instr(','+'" & Request.Form("hojtidIDer") & "'+',',', in (hojtid) " else sql = "and ','+'"& Request.Form("hojtidIDer") &"'+',',', in (hojtid) " end if end if end if
<% set rs = conn.Execute("select * from kategorier Order By hojtidnavn") do while not rs.eof response.write "<input type=""checkbox"" name=""hojtidIDer"" value="""& rs("hojtid") &""">"& rs("hojtidnavn") response.write "<br>" rs.MoveNext loop
Så Request.Form("hojtidIDer") kan være en liste. Så er man nød til at splitte dem op så dette : if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = "where instr(','+'" & Request.Form("hojtidIDer") & "'+',',', in (hojtid) " else sql = "and ','+'"& Request.Form("hojtidIDer") &"'+',',', in (hojtid) " end if end if end if
bliver:
if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & arr(i) & " in (hojtid)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/sogresultat.asp, line 142
if Request.Form("checkbox6") <> "" then if Request.Form("maltidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("maltidIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (kategoriid)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
<% OpenDatabase sql = "" if Request.Form("textfield") <> "" then if sql = "" then sql = "where navn like '%"& Request.Form("textfield") &"%' " else sql = "and navn like '%"& Request.Form("textfield") &"%' " end if end if sql = "" if Request.Form("textfield1") <> "" then if sql = "" then sql = "where in1 like '%"& Request.Form("textfield1") &"%' " else sql = "and in1 like '%"& Request.Form("textfield1") &"%' " end if end if if Request.Form("textfield2") <> "" then if sql = "" then sql = "where tid <= '"& Request.Form("textfield2") &"' " else sql = "and tid <= '"& Request.Form("textfield2") &"' " end if end if if Request.Form("textfield3") <> "" then if Request.Form("checkbox") <> "" then if sql = "" then sql = "where personer <= "& Request.Form("textfield3") &" " else sql = "and personer <= "& Request.Form("textfield3") &" " end if end if if Request.Form("checkbox2") <> "" then if sql = "" then sql = "where personer >= "& Request.Form("textfield3") &" " else sql = "and personer >= "& Request.Form("textfield3") &" " end if end if end if if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (hojtid)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox4") <> "" then if Request.Form("emeIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("emmeIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (emme)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox5") <> "" then if Request.Form("katIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("katIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (vare)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox6") <> "" then if Request.Form("maltidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("maltidIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (kategoriid)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn") response.write "<table width='500' border='0' cellspacing='10' align='center'>" f = 0 do while not rs.eof if f mod 3 = 0 then response.write "</tr><tr><td width='225'>" else response.write "<td width='225'>" end if
Prøv at udskrive SQL sætningen i stedet for at udføre den med conn.Execuete sådan her:
response.write "select opskrifter.* from opskrifter "& sql &" order by navn" response.end set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn")
Så et tit lettere at se om der er noget som mangler. Du kan evt. prøve at poste det ind her. Og fejlen med mindre det er den samme som før.
set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn") Med:
response.write "select opskrifter.* from opskrifter "& sql &" order by navn" response.end set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn")
udskriver den dette:
select opskrifter.* from opskrifter where ('8' in (kategoriid) OR ' 7' in (kategoriid)) order by navn
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.