Ti posto il mio esempio:
showdata.asp
codice:
<%
set conn = server.createObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mapPath("\database\test.mdb")
sql = "SELECT * FROM tabellaDati"
set rs = conn.execute(sql)
if not rs.eof then
%>
<form method="post" action="updatedata.asp">
<%
do until rs.eof
%>
<input type="text" name="<%=rs(1).name%>_<%=rs("campoID")%>" value="<%=rs("campoTitolo")%>">
<textarea name="<%=rs(2).name%>_<%=rs("campoID")%>" cols="20" rows="10"><%=rs("campoTesto")%></textarea>
</p>
<%
rs.moveNext
loop
%>
<input type="submit" value="VAI">
</form>
<%
end if
rs.close
set rs = nothing
conn.close
set conn = nothing
%>
In questa pagina seleziono tutti i record della tabella "tabellaDati" e creo i campi form dando loro come nome una stringa composta da nomeCampo_valoreID.
Il submit manda alla pagina updatedata.asp
codice:
<%
set conn = server.createObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mapPath("\database\test.mdb")
for each item in request.Form
if instr(item,"_") > 0 then
temp = split(item,"_")
fieldName = temp(0)
fieldName = replace(fieldName,"'","''")
idValue = temp(1)
fieldValue = request.form(item)
fieldValue = replace(fieldValue,"'","''")
sql = "UPDATE tabellaDati set " & fieldName & " = '" & fieldValue & "' WHERE campoID = " & idValue
conn.execute(sql)
end if
next
conn.close
set conn = nothing
response.redirect("showdata.asp")
%>
In questa pagina con un ciclo for leggo le voci presenti nella collection request.form. Ottenere il nome del campo è il valore id è molto facile. Basta fare lo split del valore item in base al carattere underscore _ . L'elemento 0 dell'array rappresentato dalla variabile temp corrisponde al nome campo della tabella del db, mentre l'elemento 1 rappresenta il valore id. Il testo digitato sta in request.form(item)
A questo punto la query SQL verrà composta dinamicamente. fieldName rappresenta il nome del campo della tabella, idValue il valore ID del record da aggiornare, mentre fieldValue il testo digitato. Con questo sistema non si aggiornano i record aggiornando in blocco ogni singolo record, ma aggiornando ad uno ad uno ogni singolo campo.
Nel mio esempio ho predisposto una tabella con 3 campi:
campoID - contatore
campoTitolo - testo
campoTesto - memo
Nella pagina showdata.asp ho previsto solo due campi FORM uno per campoTitolo e uno per campoTesto, prendendo i nomi dei campi mendiante rs(1).name e rs(2).name.
Lo so che sembra complicato e macchinoso, ma penso che sia una soluzione molto pratica in fin dei conti.