27 - INSERT (y consulta de otra tabla)


La realidad nos presenta que muchas veces se requieren varias tablas donde se almacenan los datos. Consideremos el problema de la tabla artículos, si necesitamos almacenar el rubro al que pertenece el artículo lo mas conveniente es definir una segunda tabla "rubros" y codificar todos ellos. En la tabla artículos debemos definir un campo más para almacenar el código de rubro al que pertenece dicho artículo.

Nuestro formulario para la carga de los artículos deberá ser una página dinámica asp, ya que debemos cargar en un control HTML todos los rubros existentes.

Nuestras dos tablas tienen la siguiente estructura:

create table articulos(
  codigo int identity,
  descripcion varchar(30) not null,
  precio float,
  codigorubro int
)

create table rubros(
  codigo int identity,
  descripcion varchar(30) not null,
)

Veremos ahora el algoritmo completo para dar de alta un registro en una tabla y rescatar un dato consultando otra tabla.

pagina1.asp

<%option explicit%>
<html>
<head>
<title>problema</title>
</head>
<body>
<form action="pagina2.asp" method="post">
Descripcion del articulo:
<input type="text" name="descripcion" size="30"><br>
Precio:
<input type="text" name="precio" size="10"><br>
Rubro:<select name="codigorubro">
<%
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 from rubros",conexion
do while not registros.eof
  response.write("<option value=""" & registros("codigo")    & """>" & _
    registros("descripcion") & "</option>")
  registros.movenext
loop
conexion.close
%>
</select><br>
<input type="submit" value="Confirmar"><br>
</form>
</body>
</html> 

Recordemos bien que como se requiere consultar la tabla rubros debemos hacer un archivo asp.

Debemos disponer un control HTML de tipo select con todos los rubros con sus respectivos códigos. Esta tarea la llevamos a cabo dentro de una estructura repetitiva:

do while not registros.eof
  response.write("<option value=""" & registros("codigo")    & """>" & _
    registros("descripcion") & "</option>")
  registros.movenext
loop

Es decir que nuestro control HTML select tendrá tantos elementos HTML option como registros tenga la tabla rubros. Recordemos que un control HTML option retorna el valor almacenado en la propiedad value y muestra dentro del control el texto que dispongamos entre las marcas de comienzo y fin de option.

Como podemos ver lo engorroso es generar el control HTML select con las descripciones y códigos de todos los rubros.

Ahora veamos el archivo que procede a efectuar el alta en la tabla articulos (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("insert into articulos(descripcion,precio,codigorubro)" & _
   "values ('" & request.form("descripcion") & _
   "'," & request.form("precio") & ",'" & _
   request.form("codigorubro") & "')")
conexion.close
response.write("Datos cargados")
%>
</body>
</html>

Lo único que varió con respecto al comando SQL insert que habíamos visto es que debemos agregar el campo codigorubro que lo rescatamos del control HTML select:

conexion.execute("insert into articulos(descripcion,precio,codigorubro)" & _
   "values ('" & request.form("descripcion") & _
   "'," & request.form("precio") & ",'" & _ 
   request.form("codigorubro") & "')")


Retornar