webForumDet fria alternativet

For Each ITem i Requestform pryl vägrar funka?!??

ASP

12 svar · 334 visningar · startad av brw

Medlem sedan juli 2000619 inlägg
Frågan#1

Jag har en sida där jag listar poster från en databas.
Det är 5 poster med 3 värden på varje post ex:

Namn     Telnr  Faxnr
Olle     21     22
Benny    25     18
Kristin  10     15

Jag listar värdena i ett formulär typ:

<form name="formular" action="update.asp" method="post">

<%Do until RS.EOF%>

<input type="hidden" value="<%=RS("id")%>" name="hidden">

<input type="text" name="namn" value="<%=RS("namn")%>">
<input type="text" name="telnr" value="<%=RS("telnr")%>">
<input type="text" name="faxnr" value="<%=RS("faxnr")%>">

<% move next osv... bla bla.%>

<input type="submit" value="Uppdatera poster">

</form>

Frågan är nu hur jag ska göra med sidan som skall ta emot värdena.. Hur jag ska använda
For each item

Jag har försökt lite...

  Set RS = Server.CreateObject("ADODB.Recordset")

For each item in Request.Form

  Uppdatera = "SELECT * FROM personer WHERE Id = " & Request.Form("id") & " "
  RS.Open Uppdatera, Connection, adOpenStatic, adLockOptimistic 

	RS("namn") = FixaTecken(Request.Form("namn"))
	RS("telnr") = FixaTecken(Request.Form("telnr"))
	RS("faxnr") = FixaTecken(Request.Form("faxnr"))

RS.Update

Next
RS.Close
Connection.Close

Någon som vet hur jag ska göra?

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan dec. 19996 721 inlägg
#2

Baserat på din kod:

Set RS = Server.CreateObject("ADODB.Recordset")
For i=1 to Request.Form("hidden").count

Uppdatera = "SELECT * FROM personer WHERE Id = " & Request.Form("hidden")(i)
RS.Open Uppdatera, Connection, adOpenStatic, adLockOptimistic 

RS("namn") = FixaTecken(Request.Form("namn")(i))
RS("telnr") = FixaTecken(Request.Form("telnr")(i))
RS("faxnr") = FixaTecken(Request.Form("faxnr")(i))

RS.Update

Next
RS.Close
Connection.Close
Medlem sedan juli 2000619 inlägg
#3

Hmmm blir följande fel:

ADODB.Recordset fel '800a0e78'

Åtgärden som programmet begärt är inte tillåten om objektet är stängt.

Och sen uppdaterar den inte värdena heller kan det saknas något?

/brw

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan dec. 19996 721 inlägg
#4

Hmmm...lustigt. Nåja, gör uppdateringen med en UPDATE-sats i stället, så blir det bättre på alla sätt..

Uppdatera = "UPDATE personer SET namn='" & FixaTecken(Request.Form("namn")(i)) & "',telnr='" & FixaTecken(Request.Form("telnr")(i)) & "',faxnr='" & FixaTecken(Request.Form("faxnr")(i)) & "' WHERE Id = " & Request.Form("hidden")(i)

Connection.Execute Uppdatera
Medlem sedan juli 2000619 inlägg
#5

Hehe den kör allt och det ser ut att fungera när jag kör med din senaste kod men den uppdaterar inte i databasen. jag kör response.write på alla prylar och allt ser ut att funka men den uppdaterer tamefan inte i databasen.. jag har accessdatabas om det kan vara något som stör ut?

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan juli 2000619 inlägg
#6

Nu har jag kommit på det... den struntar i allt som står efter For satsen fram till next av nån konstig anledning?

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan juli 2000619 inlägg
#7

Emission... Vad är det för fel?
Varför struntar den i For satsen?

/brw

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan dec. 19996 721 inlägg
#8

Läggs ID-numret verkligen i ett fält som heter "hidden"?

Medlem sedan juli 2000619 inlägg
#9

Nej det heter ID jag skrev fel till dig men det har jag ändrat till nu typ..

koden ser ut exakt som du skrivit den till mig. Jag kan typ skriva vad som helst i SQLsatsen typ select * from nisse utan att det blir något fel när jag kör sidan..

när jag kör response.write på alla värden som kommer så ser det korrekt ut.. men den struntar i allt som står inom FOR satsen verkar det som?

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan dec. 19996 721 inlägg
#10

Om den heter "ID" så ska det vara:

For i=1 to Request.Form("ID").count
Uppdatera = "SELECT * FROM personer WHERE Id = " & Request.Form("ID")(i)

------------------
-------------------
What a waste it is to lose one's mind. Or not to have a mind is being very wasteful. How true that is.
Dan Quayle

Medlem sedan juli 2000619 inlägg
#11

Hmm koden ser ut enligt följande nu:

Response.Write Request.Form("namn") & "<br>"
Response.Write Request.Form("telnr") & "<br>"
Response.Write Request.Form("faxnr") & "<br>"

Set RS = Server.CreateObject("ADODB.Recordset")
For i=1 to Request.Form("id").count
Uppdatera = "SELECT * FROM personer WHERE Id = " & Request.Form("id")(i)
RS.Open Uppdatera, Connection, adOpenStatic, adLockOptimistic 

RS("namn") = FixaTecken(Request.Form("namn")(i))
RS("telnr") = FixaTecken(Request.Form("telnr")(i))
RS("faxnr") = FixaTecken(Request.Form("faxnr")(i))

RS.Update

Next
'RS.Close
Connection.Close

Och anledningen till att RS.Close är förbockat är att jag annars får felet:
ADODB.Recordset fel '800a0e78'

Åtgärden som programmet begärt är inte tillåten om objektet är stängt.

i övrigt ser allt ut att fungera

och jag skulle kunna skriva följande:

Response.Write Request.Form("namn") & "<br>"
Response.Write Request.Form("telnr") & "<br>"
Response.Write Request.Form("faxnr") & "<br>"

Set RS = Server.CreateObject("ADODB.Recordset")
For i=1 to Request.Form("id").count
Uppdatera = "SELECT * FROM nisse WHERE Id = " & Request.Form("id")(i)
RS.Open Uppdatera, Connection, adOpenStatic, adLockOptimistic 

blblaljadsfkjadfkjaösdf

RS("namn") = FixaTecken(Request.Form("namn")(i))
RS("telnr") = FixaTecken(Request.Form("telnr")(i))
RS("faxnr") = FixaTecken(Request.Form("faxnr")(i))

RS.Update

Next
'RS.Close
Connection.Close

och jag får inget felmeddelande.. verkar som om den struntar i for-satsen

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan mars 20002 836 inlägg
#12

Hello,

är det en uppdatering av redan befintliga data eller ska det in ny info i db?

cya,

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

Medlem sedan mars 20002 836 inlägg
#13

Hello,

ok, om det är en uppdatering kan du använda dig av följande kod.
Med den kan du lista hur många du vill och endast uppdatera de som du har ändrat.
OBS!!! ändra ConnectionString så att den överensstämmer med sökvägen till din db. Du kanske får ändra lite mer, men hoppas att det funkar rakt av:

personer.asp

<%
Option Explicit

Response.Buffer = True
%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY bgcolor="#FFFFFF">
<form method="post" action="personer_upd.asp">
  <table border="0" cellspacing="0" cellpadding="0">
    <tr> 
      <td>Namn</b></td>
      <td>Telnr</td>
      <td>Faxnr</td>
      <td align="center">Ändra</td>
    </tr>
<%
Dim objConn
Dim strSQL
Dim objRS
Dim intId
Dim strNamn
Dim strTelnr
Dim strFaxnr

Set objConn = Server.CreateObject("ADODB.Connection")
With objConn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=x:\db-kat\dbnamn.mdb"
	.Open
End With

strSQL = "SELECT id, namn, telnr, faxnr " & _
		"FROM personer " & _
		"ORDER BY id ASC"
		
Set objRS = Server.CreateObject("ADODB.Recordset")
	objRS.Open strSQL, objConn, 0, 1
	
	While Not objRS.EOF
		intId = objRS(0)
		strNamn = objRS(1)
		strTelnr = objRS(2)
		strFaxnr = objRS(3)
%>
    <tr> 
      <td> 
        <input type="text" name="txtNamn<% =intId%>" size="40" value="<% =strNamn%>">
      </td>
      <td> 
        <input type="text" name="txtTelnr<% =intId%>" size="20" value="<% =strTelnr%>">
      </td>
      <td> 
        <input type="text" name="txtFaxnr<% =intId%>" size="20" value="<% =strFaxnr%>">
      </td>
      <td align="center"> 
        <input type="checkbox" name="id" value="<% =intId%>">
      </td>
    </tr>
<%
		objRS.MoveNext
	Wend
	
	objRS.Close
Set objRS = nothing
%>
    <tr align="center"> 
      <td colspan="3"><br>
        <input type="submit" name="Submit" value="Ändra">
      </td>
    </tr>
  </table>
</form>
</BODY>
</HTML>
<%
	objConn.Close
Set objConn = nothing
%>

personer_upd.asp

<%
Option Explicit

Response.Buffer = True
%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY bgcolor="#FFFFFF">
<%
Dim strRFid
Dim arrRFid
Dim objConn
Dim intId
Dim strNamn
Dim strTelnr
Dim strFaxnr
Dim i
Dim strSQL

strRFid = Request.Form("id")

Set objConn = Server.CreateObject("ADODB.Connection")
With objConn
	.Provider = "Microsoft.Jet.OLEDB.4.0"
	.ConnectionString = "Data Source=x:\db-kat\dbnamn.mdb"
	.Open
End With

	arrRFid = Split(strRFid,",")
	
	For i = 0 TO UBound(arrRFid)
		intId = Trim(arrRFid(i))
		strNamn = Request.Form("txtNamn" & intId)
		strTelnr = Request.Form("txtTelnr" & intId)
		strFaxnr = Request.Form("txtFaxnr" & intId)
		
		strSQL = "UPDATE personer SET " & _
				"namn = '" & strNamn & "'," & _
				"telnr = '" & strTelnr & "'," & _
				"faxnr = '" & strFaxnr & "' " & _
				"WHERE id = " & intId
				
			objConn.Execute(strSQL)
	Next
	
	objConn.Close
Set objConn = nothing
%>
</BODY>
</HTML>

cya

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

277 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)