Recoger valor del campo autonumérico después de insertar en ASP |
|
|
Al hacer una inserción de un registro en una tabla, si el identificador es autonumérico, generalmente no sabemos cuál habrá tocado. Aquí enseñamos a obtener el identificador después de la inserción.
Cuando en una base de datos tenemos dos tablas relacionadas con una relación uno a varios, la clave primaria de la tabla con cardinalidad 1 se encuentra en la tabla con cardinalidad n como clave foránea. Normalmente las claves primarias suelen utilizar campos de tipo autoincremento.
El presente artículo detalla cómo averiguar el valor que se ha asignado a la clave primaria en una operación de inserción, para de esta manera poder introducir registros en la tabla relacionada que cuenta con la clave foránea.
Para el ejemplo, utilizaremos las siguientes tablas:
En un principio vamos a partir que tenemos un nuevo pedido para el cual tenemos que añadir varios detalles. En este supuesto, necesitamos insertar primero el pedido, recoger el valor que la base de datos le ha asignado al campo IdPedido, y a continuación insertar los distintos detalles con ese valor de IdPedido.
Para hacer esto, vamos a utilizar un objeto recordset:
Dim rspedidos
Set rspedidos=Server.CreateObject("ADODB.Recordset")
A continuación abrimos el Recordset:
With rspedidos
.open "Pedidos" ,adOpenDynamic, AdLockOptimistic,adCmdTableDirect
adOpenDynamic: Cursor que no tiene un conjunto único de registros, y en el que los cambios serán visibles en el recordset.
AdLockOptimistic: El registro no se bloquea hasta que no se insertan los datos
adCmdTableDirect: sirve para indicar el nombre de la tabla
La combinación de cursor, tipo de bloqueo y si el campo esta indexado o no hace que podamos recoger el campo ID, otras combinaciones pueden no funcionar.
A continuación, creamos un nuevo registro, e insertamos en el los valores de los campos:
.AddNew
.Fields("idcliente")=16
.Fields("cargo")=500
.Fields("destinatario")="pepe"
Una vez se han introducido todos los valores de los campos, se actualiza el recordset
.update
Y a continuación, sacamos el ID que le ha asignado la base de datos:
MiID= .Fields("IdPedido")
End With
Ahora contamos con una variable miID que nos permite hacer los inserts correspondientes en la base de datos, bien con recordsets o con sentencias sql del tipo Insert Into.
Código completo:
Dim rspedidos
Set rspedidos=Server.CreateObject("ADODB.Recordset")
With rspedidos
.open "Pedidos" ,adOpenDynamic, AdLockOptimistic,adCmdTableDirect
.AddNew
.Fields("idcliente")=16
.Fields("cargo")=500
.Fields("destinatario")="pepe"
.update
MiID= .Fields("IdPedido")
End With
Nota: Puede ser que nuestro sistema no tenga declaradas las variables del sistema del tipo adOpenDynamic, AdLockOptimistic o adCmdTableDirect. Para que queden definidas debemos incluir el archivo "adovbs.inc". |
|