29 - UPDATE (Modificación de un registro trabajando con dos tablas) |
Ya habíamos visto que para modificar datos de una tabla debemos utilizar el comando SQL UPDATE.
Veremos ahora como generar un formulario con los datos actuales de un registro de una tabla rescatando información de otra tabla.
Confeccionararemos una serie de páginas que permitan modificar la descripción, precio y rubro de un artículo. Mostraremos en un control select los rubros y dispondremos como seleccionado el que corresponde.
pagina1.html
<html> <head> <title>problema</title> </head> <body> <form action="pagina1.asp" method="post"> Ingrese el código del artículo a modificar: <input type="text" name="codigo"><br> <input type="submit" value="Buscar"><br> </form> </body> </html>
Ahora veamos el código de la pagina1.asp donde se encuentran los conceptos nuevos:
<%option explicit%> <html> <head> <title>problema</title> </head> <body> <% dim conexion set conexion = Server.CreateObject("ADODB.Connection") conexion.ConnectionString = "Provider=SQLOLEDB.1;" & _ "Data Source=.;" & _ "Integrated Security=SSPI;" & _ "Persist Security Info=False;" & _ "Initial Catalog=wi630629_aspya" conexion.Open dim registros set registros = Server.CreateObject("ADODB.RecordSet") registros.open "select codigo,descripcion,precio,codigorubro from articulos where codigo=" _ & request.form("codigo") ,conexion if not registros.eof then %> <form action="pagina2.asp" method="post"> Descripcion del articulo: <input type="text" name="descripcion" size="30" value="<%response.write(registros("descripcion"))%>"><br> Precio: <input type="text" name="precio" size="10" value="<%response.write(registros("precio"))%>"><br> Rubro: <select name="codigorubro"> <% dim registrosru set registrosru = Server.CreateObject("ADODB.RecordSet") registrosru.open "select codigo,descripcion from rubros" ,conexion do while not registrosru.eof if registrosru("codigo")=registros("codigorubro") then response.write("<option value=""" ®istrosru("codigo")& _ """ selected>" & registrosru("descripcion")& "</option>") else response.write("<option value=""" & registrosru("codigo")& _ """>" ®istrosru("descripcion")&"</option>") end if registrosru.movenext loop %> </select><br> <input type="hidden" name="codigo" value="<%response.write(registros("codigo"))%>"> <input type="submit" value="Confirmar"><br> </form> <% else response.write("No existe ningún artículo con dicho código") end if conexion.close %> </body> </html>
Disponer distintos bloques de asp dentro de la misma página. Lo primero que hacemos en forma similar a conceptos anteriores es verificar si existe el código de artículo ingresado por el operador:
registros.open "select codigo,descripcion,precio from articulos where codigo=" _ & request.form("codigo") ,conexion if not registros.eof then
En caso que la condición if se verifique verdadera debemos disponer en la página un formulario HTML que muestre los datos actuales de dicho artículo. Lo más adecuado es escribir el formulario en un bloque HTML clásico y agregarle a la propiedad value de cada control el dato rescatado de la base de datos:
Descripcion del articulo: <input type="text" name="descripcion" size="30" value="<%response.write(registros("descripcion"))%>"><br>
Ahora debemos disponer en un select todos los rubros con sus respectivos códigos y además debemos mostrar seleccionado el rubro que pertenece el artículo a modificar. Para esto rescatamos todos los rubros de la tabla "rubros" y dentro de un while verificamos uno a uno si el código de rubro rescatado coincide con el del artículo seleccionado.
El if dentro del while permite disponer la propiedad selected al elemento option respectivo:
if registrosru("codigo")=registros("codigorubro") then response.write("<option value=""" ®istrosru("codigo")& _ """ selected>" & registrosru("descripcion")& "</option>") else response.write("<option value=""" & registrosru("codigo")& _ """>" ®istrosru("descripcion")&"</option>") end if
Tengamos en cuenta que el contenido del control HTML debemos cargarlos con todos los rubros de la tabla "rubros", pero además debemos dejar seleccionado el que corresponde al artículo que estamos modificando.
Por último recordemos que almacenamos en un control oculto, es decir de tipo hidden, el código de artículo. Esto nos permite rescatarlo en la siguiente página donde procederemos a modificar la tabla de la base de datos propiamente dicha.
La última página (pagina2.asp) procede a la modificación propiamente dicha de la tabla:
<%option explicit%> <html> <head> <title>problema</title> </head> <body> <% dim conexion set conexion = Server.CreateObject("ADODB.Connection") conexion.ConnectionString = "Provider=SQLOLEDB.1;" & _ "Data Source=.;" & _ "Integrated Security=SSPI;" & _ "Initial Catalog=wi630629_aspya" conexion.Open conexion.execute("update articulos set descripcion='" & _ request.form("descripcion") & "'," & _ "codigorubro=" & request.form("codigorubro") & "," & _ "precio=" & request.form("precio") & _ " where codigo=" & request.form("codigo")) conexion.close response.write("Los datos fueron modificados") %> </body> </html>