Tabellen som det ska hämtas ifrån heter "red" och kolumnen "namn".
Kan man även göra så när man trycker på ett namn så kommer dennes Email upp i rutan Email??
Du kan använda en loop eller spara värdena i en array och sedan använda for.
Nedan har du ett exempel för en loop
Sql sattsen får du sköta själv.
<%
If not objRs.Eof Then
response.write("<select name=""skribenter"" size=""3"" onChange=""this.form.namn.value=this[this.selectedIndex].value;"" style=""width: 150px;"">")
Do until objRs = nothing
response.write(<option value=""" & objRs("värde") & """>" & objRs("värde") & "</option>")
objRs.MoveNext
Loop
response.write("</select>")
End If
%>
<select name="namn" onChange="document.forms[0].email.value=this[this.selectedIndex].value;" style="width: 150px;">
<%set RS=objConn.execute("SELECT epost, namn FROM red order by namn")
if not RS.eof then
Do until RS.EOF
response.write "<option value="""&RS("epost")&""">"&RS("namn") & "<option>"
RS.Movenext
Loop
RS.close
else
rs.close
end if
%>
</select>
<input type="text" name="email" size="45">
men får följande felmeddelande:
Microsoft JET Database Engine (0x80040E10)
Det har inte angetts något värde för en eller flera nödvändiga parametrar.
på rad: <%set RS=objConn.execute("SELECT epost, namn FROM redaktionen order by namn")
namnen stämmer, kan det vara i konflikt med något annat i koden? Jag hade tänkt att anv. denna till att kunna välja skribentens namn som har skrivit nyheten. Så nyheten sparas i en annan tabell i samma databas som man hämtar skribentens namn och epost ifrån
Lite långsökt, men testa sätt [] runt namn, epost och red, botar om du använt reserverade ord. Dock, inget av de bör vara det, inte ens på en svensk access-version. Reservation för 'red', men det är ju ett ord, vilket som.
Dubbel och trippelkolla så fälten och tabellen är rätt, posta annars mer av koden.
Jag tipsar om att du inte ska spara namnet i databasen knutet till nyheten, du spar personens id (räknare).
När man konstruerar databaser gäller att data endast ska finnas på ett ställe, dvs namn (+id och epost, ev mfl) i skribent-tabellen, och skribentens id-nummer är sedan det som sparas tillsammans med nyheten.
kan visa lite mer kod som jag har
den som ska hämta skribenternas namn och epost:
<select name="namn" onChange="document.forms[0].email.value=this[this.selectedIndex].value;" style="width: 150px;">
<%
Set objRS = objConn.Execute("SELECT epost, namn FROM red order by namn")
if not RS.eof then
Do until RS.EOF
response.write "<option value="""&RS("epost")&""">"&RS("namn") & "<option>"
RS.Movenext
Loop
RS.close
else
rs.close
end if
%>
</select>
<input type="text" name="email" size="45">
koden som ska spara nyheten (vet att den går att förminska en del)
<%
' Stänger och förstör alla objekt
objRS.Close : Set objRS = nothing
objConn.Close : Set objConn = nothing
' Sparar nyheten
ElseIf Request.QueryString("visa") = "nyhetspara" AND Session("Admin") = "true" Then
strDatum = now()
strRubrik = SafeSQL(Request.Form("rubrik"))
strNyhet = SafeSQL(Request.Form("nyhet"))
strSkribent = SafeSQL(Request.Form("Skribent"))
strlank = SafeSQL(Request.Form("lank"))
strlanknamn = SafeSQL(Request.Form("lanknamn"))
stremail = SafeSQL(Request.Form("email"))
strkategori = SafeSQL(Request.Form("kategori"))
objConn.Execute("INSERT INTO nyheter(Datum,Rubrik,Nyhet,Skribent, lank, lanknamn, email,kategori) VALUES('" & strDatum & "','" & strRubrik & "','" & strNyhet & "','" & strSkribent & "','" & strlank & "','" & strlanknamn & "','" & stremail & "','" & strkategori & "')")
' Stänger och förstör alla objekt
Set objRS = nothing : objConn.Close : Set objConn = nothing
Response.Redirect sidnamn & "?visa=nyhet"
' Ändrar nyheten
ElseIf Request.QueryString("visa") = "nyhetandrat" AND Session("Admin") = "true" Then
strRubrik = SafeSQL(Request.Form("rubrik"))
strNyhet = SafeSQL(Request.Form("nyhet"))
strSkribent = SafeSQL(Request.Form("skribent"))
strlank = SafeSQL(Request.Form("lank"))
strlanknamn = SafeSQL(Request.Form("lanknamn"))
stremail = SafeSQL(Request.Form("email"))
strkategori = SafeSQL(Request.Form("kategori"))
strDatum = now()
objConn.execute("Update nyheter Set Rubrik='" & strRubrik & "', Nyhet='" & strNyhet & "', Skribent='" & strSkribent & "', lank='" & strlank & "', lanknamn='" & strlanknamn & "', email='" & stremail & "', datum='" & strdatum & "', kategori='" & strkategori & "' Where id = "& SafeSQL(CLng(Request.Querystring("id"))))
' Stänger och förstör alla objekt
Set objRS = nothing : objConn.Close : Set objConn = nothing
Response.Redirect sidnamn & "admin.asp?visa=nyhet"
' Tar bort nyheten
ElseIf Request.QueryString("visa") = "tabort" AND Session("Admin") = "true" Then
objConn.Execute("DELETE FROM nyheter WHERE id="& SafeSQL(CLng(Request.Querystring("id"))))
Response.Redirect sidnamn & "?visa=nyhet"
' Stänger och förstör alla objekt
Set objRS = nothing : objConn.Close : Set objConn = nothing
End If
%>
så jag vill alltså att man väljer sitt namn när man skriver nyheten, sen så ska namnet och emailen sparas tillsamans med nyheten.
Du använder både objRs och RS
Ändra objRs -> RS så borde det fungera
<%
Set [b]RS[/b] = objConn.Execute("SELECT epost, namn FROM red order by namn")
if not RS.eof then
Do until RS.EOF
response.write "<option value="""&RS("epost")&""">"&RS("namn") & "<option>"
RS.Movenext
Loop
RS.close
else
rs.close
end if
%>
</select>
<input type="text" name="email" size="45">
I den nedre kodsnutten borde du först och främst kolla så du använder en av sätten att kalla objektet RS. Vill du använda RS så gör det överallt. När du använder Set RS = så döper du objektet till rs och kommer därför att använda RS tills du stänger det då du skriver RS.Close : set RS = nothing och INTE objRs.Close
Samma med databasobjektet (i ditt fall objConn)
Tänk på att använda så få databasöppningar som möjligt.
<%
' Stänger och förstör alla objekt
RS.Close : Set RS = nothing
objConn.Close : Set objConn = nothing
' Sparar nyheten
ElseIf Request.QueryString("visa") = "nyhetspara" AND Session("Admin") = "true" Then
strDatum = now()
strRubrik = SafeSQL(Request.Form("rubrik"))
strNyhet = SafeSQL(Request.Form("nyhet"))
strSkribent = SafeSQL(Request.Form("Skribent"))
strlank = SafeSQL(Request.Form("lank"))
strlanknamn = SafeSQL(Request.Form("lanknamn"))
stremail = SafeSQL(Request.Form("email"))
strkategori = SafeSQL(Request.Form("kategori"))
objConn.Execute("INSERT INTO nyheter(Datum,Rubrik,Nyhet,Skribent, lank, lanknamn, email,kategori) VALUES('" & strDatum & "','" & strRubrik & "','" & strNyhet & "','" & strSkribent & "','" & strlank & "','" & strlanknamn & "','" & stremail & "','" & strkategori & "')")
' Stänger och förstör alla objekt
Varför stänga objRs när den inte är skapad? ta bort detta -> [b]Set objRS = nothing[/b] : objConn.Close : Set objConn = nothing
Response.Redirect sidnamn & "?visa=nyhet"
' Ändrar nyheten
ElseIf Request.QueryString("visa") = "nyhetandrat" AND Session("Admin") = "true" Then
strRubrik = SafeSQL(Request.Form("rubrik"))
strNyhet = SafeSQL(Request.Form("nyhet"))
strSkribent = SafeSQL(Request.Form("skribent"))
strlank = SafeSQL(Request.Form("lank"))
strlanknamn = SafeSQL(Request.Form("lanknamn"))
stremail = SafeSQL(Request.Form("email"))
strkategori = SafeSQL(Request.Form("kategori"))
strDatum = now()
objConn.execute("Update nyheter Set Rubrik='" & strRubrik & "', Nyhet='" & strNyhet & "', Skribent='" & strSkribent & "', lank='" & strlank & "', lanknamn='" & strlanknamn & "', email='" & stremail & "', datum='" & strdatum & "', kategori='" & strkategori & "' Where id = "& SafeSQL(CLng(Request.Querystring("id"))))
' Stänger och förstör alla objekt
Samma här, ta bort -> [b]Set objRS = nothing[/b] : objConn.Close : Set objConn = nothing
Response.Redirect sidnamn & "admin.asp?visa=nyhet"
' Tar bort nyheten
ElseIf Request.QueryString("visa") = "tabort" AND Session("Admin") = "true" Then
objConn.Execute("DELETE FROM nyheter WHERE id="& SafeSQL(CLng(Request.Querystring("id"))))
Response.Redirect sidnamn & "?visa=nyhet"
' Stänger och förstör alla objekt
samma ta bort -> [b]Set objRS = nothing[/b] : objConn.Close : Set objConn = nothing
End If
%>
Nu kanske det blev luddigt, skrev detta som hastigast pga tidsbrist
Fråga om du inte förstår vad jag menar
För att slippa skriva stäng- och förstörkod på varje sidan, lägg det i en include-fil, använd därefter den sub som behövs.
Sub close_rs_db()
RS.close
Set RS=nothing
Conn.Close
Set Conn=nothing
End Sub
'stänger övriga rs, genom tex Call Close_rs(rs3)
Sub Close_rs(byRef RS)
RS.Close
Set RS = Nothing
End Sub
'om endast finns Conn att stänga
Sub Close_db()
Conn.Close
Set Conn = Nothing
End Sub
Det räcker med Close_db() när du använt insert/update/delete alltså.
ok, tack. gjorde tvärt om RS--> objRS, för objRS anv. i databaskopplingen men det ska väll inte vara någon skillnad?
<%
Set objRS = objConn.Execute("SELECT epost, namn FROM redaktionen order by namn")
if not objRS.eof then
Do until objRS.EOF
response.write "<option value="""&objRS("epost")&""">"&objRS("namn") & "<option>"
objRS.Movenext
Loop
objRS.close
else
objRS.close
end if
%>
Tyvärr så hjälpte inte detta, får fortfarande:
Microsoft JET Database Engine (0x80040E10)
Det har inte angetts något värde för en eller flera nödvändiga parametrar.
på raden:
Set objRS = objConn.Execute("SELECT epost, namn FROM red order by namn")
Nej, du kan ha flera samma fält med i alla tabeller om du vill. Man namnger fältet tabell.fält då. Men, eftersom du endast är i en tabell, påverkar det inte!
Alt 1 borde inte ge det.
SELECT * FROM red ORDER BY namn
(hämtar alla fält, och sorterar dem)
Alt 2 borde ge det.
SELECT epost FROM produkter ORDER BY flt
(hämta värde från en annan tabell, försöker sedan visa ett recordsetvärde som inte finns, tex epost från produkttabell)
Alt 3 borde inte heller ge det.
SELECT epost, namn FROM red
(hämtar alla fält från rätt tabell)
Har du verkligen skrivit enligt ovan, gör du något väldigt konstigt!
Nu använder du nyheter, är det den tabellen som gäller, eller du missförstod mig? Min tanke var att du skulle testa de tre förslagen var för sig på den tabellen du hade från början, red (alt redaktionen), och se vad som händer.
Att du får fel nu förstår du säkert varför; epost finns inte i tabellen nyheter.
Jag tror det enklaste är att du tänker igenom vad du försöker göra, vad heter fälten, tabellen, hur hämtar jag data och hur skriver jag ut det.
ok, gjorde det först då jag fick felmeddelandet:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
ser nu när jag försökte igen att det inte felet ligger Set objRS = objConn.Execute("SELECT * FROM redaktionen") utan på response.write "<option value="""&objRS("epost")&""">"&objRS("namn") & "<option>"
oj, ser nu att den inte heter epost utan email
Men hur gör man nu när man ska spara namnet på den man har valt i dropdownrutan? bara emailen sparas nu. Sen så är det lite "luft" emellan varje namn, hur löser man det?
255 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a