Domina la propiedad OpenArgs en Access

Hablábamos de pasada, en el artículo sobre como utilizar el comando DoCmd.OpenForm, de la propiedad OpenArgs y aquí os traigo este artículo donde vamos a ver como darle algunos usos.

La propiedad OpenArgs que utilizamos en Microsoft Access es de solo lectura y podemos utilizarla a la hora de abrir un formulario o un informe, pues ambos la admiten, cuando lo hacemos a través del método OpenForm del Objeto DoCmd. Es decir, OpenArgs nos permite enviar una información al formulario o informe que estamos abriendo y después, desde dicho formulario, leerla y actuar en consecuencia con ella.

OpenArgs se puede utilizar de dos formas, bien a través de VBA o mediante Macros, en este artículo vamos a emplear código VBA para darle utilidad.

Ejemplo: Buscando un cliente

Supongamos un formulario de una Factura con los datos del cliente y nuestra intención es que si hacemos DobleClick sobre el Cliente o su Id nos abra el Formulario de Clientes y nos muestre toda su información. Los pasos a seguir serían:

  1. Desde el formulario Factura abrir el de clientes enviando, mediante OpenArgs, el Id del cliente
  2. Desde el formulario Clientes buscar el cliente cuyo Id corresponde con el que tenemos en OpenArgs

Vamos a ello, utilizaremos el Id que será su Nif, DNI, CIF, o cualquier otro dato que identifique al cliente. Desde el formulario Factura, en un botón dispuesto junto al cliente, en su evento “Al hacer Click” escribiremos el siguiente código:

A la hora de abrir el formulario de Clientes podemos controlar la información que acabamos de enviarle al Formulario de la siguiente manera:

Otro método que podríamos usar para buscar al empleado concreto podría ser:

Otro Ejemplo: Tomar decisiones a la hora de abrir un formulario en función del OpenArgs que reciba.

Vamos a suponer que tenemos un formulario de búsqueda de Clientes al que podemos darle multitud de usos según desde el formulario que se abra el de clientes.  Nuestra finalidad es que, al hacer Doble Click sobre un cliente realicemos una acción u otra en función de quien haya llamado al formulario de Clientes.

La forma de llamar al formulario de clientes desde cualquier otro podría ser más o menos así:

o así:

o:

Lo que estamos haciendo es, desde tres formularios o tres botones, lo mismo da, llamar al formulario de Clientes buscando tres funcionalidades distintas. El parámetro que le estamos pasando al OpenArgs en un texto y será este el que analicemos al hacer Doble Click sobre el Cliente Buscado, mas o menos así:

Otra opción que podemos implementar, ya que estamos, es informar al usuario de que va a ocurrir cuando hagamos Doble Click sobre el IdCliente. Para ello podemos tener una etiqueta en el formulario de Clientes cuyo texto modificaremos al abrir el formulario en función del OpenArgs que contenga, mas o menos así:

Como ves se le puede dar multitud de utilidades a la propiedad OpenArgs. Aquí es como todo, es otra herramienta más que, sabiendo que existe, quizás mañana puedas implementarla en tu base de datos.

Dejaremos para un próximo artículo como hacer lo mismo a través de Macros por si no te atreves a indagar en el código VBA.

Desarrollador de software para pequeña y mediana empresa con más de veinte años de experiencia.

8 Comments

  1. Responder Carlos

    Si no quiero colocar argumento en OpenArgs que debo colocar al final? Si deje sin nada despues de la coma me da error, si coloco una coma mas tambien me da error.
    Gracias

    • Responder @docebit

      Simplemente no pongas la coma. La coma se pone si se quiere usar ese parámetro pero, sino se quiere utilizar, simplemente no se pone la coma.

  2. Responder ebuschacho

    Hola, queria hacer una consulta. Yo soy un amateur de la programación. Tengo un formulario, adonde la clave principal (ID) es el DNI del cliente.
    Tengo otro formulario (#2) adonde cargo IDcliente en un campo y pongo la fecha del registro y luego agrego texto en un campo predeterminado.
    Mediante un botón con macro incrustado, abre ese segundo formulario. Lo que busco es que el ID del formulario principal sea copiado en un registro nuevo del formulario #2 y no tenga necesidad de hacer todas las veces “copy paste” desde el formulario principal. Me dio la impresión que podría hacerlo con este comando. ¿hay algun código sencillo para hacerlo o necesitare dárselo a un programador?
    Mil gracias igual.

  3. Responder NirVano

    Hola, muchas gracias por el artículo. Tengo una inquietud: el OpenArgs es una variable temporal, de un solo acceso, o está disponible durante toda la vida del formulario vinculado, es decir, puede ser accesado más de una vez desde diferentes subrutinas.
    Salu2

  4. Responder luis

    tengo el siguiente codigo, donde solo consigo que se me pase el paramatro openArgs en el primer Docmd , que ser alo que no estoy considerando?

    Private Sub btnDoctorFecha02_Click()
    If txtFechaDesde “” And txtFechaHasta “” And cmbDoctor “” Then
    If txtFechaDesde = txtFechaHasta Then
    txtDesFecha = txtFechaDesde
    Else
    txtDesFecha = “Desde ” & txtFechaDesde & vbCrLf & “Hasta ” & txtFechaHasta
    End If
    res = “hola”
    DoCmd.OpenReport “InfPagoDoctor1”, acViewPreview, entreFechas, “fechaPago >= #” & Format(txtFechaDesde, “mm-dd-yyyy”) & “# and fechaPago = #” & Format(txtFechaDesde, “mm-dd-yyyy”) & “# and fechaPago <= #" & Format(txtFechaHasta, "mm-dd-yyyy") & "# and ( Doctor = '" & cmbDoctor & "')", acWindowNormal, txtDesFecha
    End If
    Else
    P = MsgBox("Debe indicar ambas Fechas y seleccionar un Doctor", vbExclamation, "Aviso")
    End If

    End Sub

  5. Responder luis

    Private Sub btnDoctorFecha02_Click()
    If txtFechaDesde “” And txtFechaHasta “” And cmbDoctor “” Then
    If txtFechaDesde = txtFechaHasta Then
    txtDesFecha = txtFechaDesde
    Else
    txtDesFecha = “Desde ” & txtFechaDesde & vbCrLf & “Hasta ” & txtFechaHasta
    End If
    res = “hola”
    DoCmd.OpenReport “InfPagoDoctor1”, acViewPreview, entreFechas, “fechaPago >= #” & Format(txtFechaDesde, “mm-dd-yyyy”) & “# and fechaPago = #” & Format(txtFechaDesde, “mm-dd-yyyy”) & “# and fechaPago <= #" & Format(txtFechaHasta, "mm-dd-yyyy") & "# and ( Doctor = '" & cmbDoctor & "')", acWindowNormal, txtDesFecha
    End If
    Else
    P = MsgBox("Debe indicar ambas Fechas y seleccionar un Doctor", vbExclamation, "Aviso")
    End If

    End Sub

  6. Pingback: Open Args (Pasar Varios Parámetros"Matriz") - Tutorial

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies