Access y los autonuméricos

A tod@s l@s expert@s:
Tengo una consulta a realizar a quien me pueda contestar. La consulta es l siguiente:
Estoy desarrollando una aplicación con Access y utilizo tablas con autonuméricos como clave primaria, y el problema es conocer el siguiente autonumérico a ser insertado o el autonumérico recién insertado para introducirlo en otras tablas como clave ajena. Yo se que en SQL Server se utiliza 'select @@identity from <tabla>' utilizando la misma conexión que en la inserción y te devuelve el incremental introducido en la tabla. La solución en Access, ¿alguien la conoce?
Gracias a tod@s.

1 Respuesta

Respuesta
1
Te voy a comentar los métodos que yo utilizo para saber que autonumérico corresponde aplicar ante una posible relación entre tablas.
Metodo1: Cuando estoy insertando el registro en la tabla primaria, si empleo el método addnew, creo una variable y a esta la asigno el valor del campo autonumérico, en el momento de la edición y antes de aplicar update. Esto es posible en Access, contra tablas de Access (vinculadas o no), pero en SQL no se puede emplear.
Metodo2: Cuando trabajo contra tablas SQL, el proceso que utilizo es crear una función que me devuelva el registro insertado en la tabla primaria. Por ejemplo, supongamos que la tabla primaria tiene tres campos (Campo1, Campo2 y Campo3), que el campo1 es el autonumérico y que la clave primaria esta formada por los campos 2 y 3. En el momento en que he realizado la actualización del registro insertado, es decir justo después de update, llamo a la función, que ahora te explico como la creo, y el valor que devuelve, se lo asigno a una variable que creo para conservar el valor del campo autonumérico.
La función tiene la siguiente estructura:
Localizar_Id(Campo2,Campo3)
on error goto error_Localizar_Id
Localizar_Id=False
Dim DB As Database
Set DB=CurrentDB()
Dim sql as string
sql="SELECT * FROM Table1"
sql=sql & " WHERE Table1.Campo2=" & Campo2
sql=sql & " AND Table1.Campo3=" & Campo3
Dim T_REC as Recordset
SET T_REC=DB.OpenRecordset(sql,dbopensnapshot)
If T_REC.Recordcount <>0 then
Localizar_Id=T_REC.Campo1
End If
T_REC.Close
Exit Function
Error_LocalizarId:
msgbox, Error$,48,"Titulo"
Exit Function
End Function
Este método es mucho más rapido que identify y nunca da problemas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas