Ti posto il mio esempio:
showdata.asp
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.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 %>
Il submit manda alla pagina updatedata.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)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") %>
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.

Rispondi quotando