25 - UPDATE (Modificación de un registro de una tabla - SQL Server)


Otra actividad habitual es la modificación de datos almacenados en una tabla.
El lenguaje SQL tiene un comando llamado Update que permite modificar algunos campos de una tabla.

Para ver su funcionamiento procederemos a modificar la descripción y precio de un artículo. Ingresaremos el código del artículo para su búsqueda.

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>

pagina1.asp

<%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 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>
<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>

Esta página tiene varios conceptos nuevos. Como podemos ver podemos 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:

<input type="text" name="descripcion" size="30"
value="<%response.write(registros("descripcion"))%>">

Como podemos ver agregamos un trozo de código ASP dentro del HTML.

De igual forma procedemos a cargar la propiedad value para el precio:

<input type="text" name="precio" size="10"
value="<%response.write(registros("precio"))%>">

Como el código no se modifica procedemos a cargarlo en un control oculto, es decir de tipo hidden. Esto nos permite rescatarlo en la siguiente página donde procederemos a modificar la tabla de la base de datos propiamente dicha:

<input type="hidden" name="codigo"
value="<%response.write(registros("codigo"))%>">

Tengamos en cuenta que este formulario llama a una tercer página llamada pagina2.asp.

pagina2.asp

<%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") & "'," & _
    "precio=" & request.form("precio") & _
    " where codigo=" & request.form("codigo"))
conexion.close
response.write("Los datos fueron modificados")
%>
</body>
</html>

En esta página procedemos a rescatar los tres datos almacenados en el formulario (los dos que se ingresan por teclado y el del control oculto) y ejecutamos el comando Update:

conexion.execute("update articulos set descripcion='" & _
request.form("descripcion") & "'," & _
    "precio=" & request.form("precio") & _
    " where codigo=" & request.form("codigo"))


Retornar