MS Access 2003: Cree una consulta de transferencia para recuperar nextval de una secuencia de Oracle usando código VBA

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

MS Access 2003: Cree una consulta de transferencia para recuperar nextval de una secuencia de Oracle usando código VBA

Este tutorial de MSAccess muestra cómo usar el código VBA en Access 2003 para crear una consulta de transferencia para recuperar NextVal de una secuencia de Oracle (con capturas de pantalla e instrucciones paso a paso).

Pregunta: En Microsoft Access 2003/XP/2000/97, quiero crear una consulta de transferencia para que NextVal pueda recuperarse de una secuencia de Oracle. Luego quiero asignar NextVal a un campo en el formulario de acceso.

¿Cómo puedo hacer esto?

Respuesta: Para asignar NextVal (de una secuencia de Oracle) a un campo en un formulario, debe crear una consulta de paso mediante código VBA.

Lo primero que debe hacer es crear una conexión ODBC a la base de datos de Oracle utilizando el controlador {Microsoft ODBC para Oracle}.

Para hacer esto, vaya al icono ODBC de origen de datos en el Panel de control y cree un nuevo origen de datos utilizando el controlador {Microsoft ODBC para Oracle}.

Configure su conexión ODBC.

En este ejemplo, configuramos una fuente de datos denominada AAAA, el nombre de usuario BBBB y un servidor de Oracle denominado CCCC. Debe configurar la conexión ODBC con su propia configuración.

Abra su base de datos de Access, haga clic en la pestaña Módulos y cree un nuevo módulo. Pegue el siguiente código:

Function AssignNextVal() As Long

   Dim db As Database
   Dim LPassThrough As QueryDef
   Dim Lrs As dao.Recordset
   Dim LSQL As String

   On Error GoTo Err_Execute

   Set db = CurrentDb()

   'Create a temporary passthrough query to retrieve the NextVal from an Oracle sequence
   Set LPassThrough = db.CreateQueryDef("qryTemp")

   'Use {Microsoft ODBC for Oracle} ODBC connection
   LPassThrough.Connect = "ODBC;DSN=AAAA;UID=BBBB;PWD=DDDD;SERVER=CCCC"
   LPassThrough.SQL = "Select member_id_seq.nextval as NV From Dual"
   LPassThrough.ReturnsRecords = True

   Set Lrs = LPassThrough.OpenRecordset(dbOpenSnapshot)

   'Retrieve NextVal from Oracle sequence
   If Lrs.EOF = False Then
      AssignNextVal = Lrs("NV")
   Else
      AssignNextVal = 0
   End If

   'Remove query definition when done
   CurrentDb.QueryDefs.Delete "qryTemp"

   Exit Function

Err_Execute:
   'Remove query definition when done
   CurrentDb.QueryDefs.Delete "qryTemp"

   'Return 0 if an error occurred
   AssignNextVal = 0

End Function

Ahora ha creado un asignar el siguiente valor Esto devolverá NextVal de la secuencia de Oracle.

Tenga en cuenta que debe personalizar las siguientes líneas de código:

LPassThrough.Connect = "ODBC;DSN=AAAA;UID=BBBB;PWD=DDDD;SERVER=CCCC"

de modo que:

AAAA es el nombre de la fuente de datos ODBC que configuró.
BBBB es el nombre de usuario que utilizará para iniciar sesión en Oracle.
CCCC es el nombre de su servidor Oracle.
DDDD es la contraseña que utilizará para iniciar sesión en Oracle.

Ahora, si desea asignar NextVal a un campo en un formulario de Access, simplemente llame a la función AssignNextVal en el evento Before Insert del formulario.

Por ejemplo, si quisiera asignar NextVal a un campo llamado Member_ID, podría insertar el siguiente código en el evento Before Insert del formulario.

Private Sub Form_BeforeInsert(Cancel As Integer)

   Member_ID = AssignNextVal()

End Sub

Si después de probar este ejemplo obtiene un error “indefinido” en la declaración “Dim db as Database”, debe seguir algunas instrucciones adicionales.