ACC2002: DBúsq(): uso, ejemplos y solución de problemas

Seleccione idioma Seleccione idioma
Id. de artículo: 285866 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E285866
Principiante: se requieren conocimientos de la interfaz de usuario en equipos de usuario único.

Este artículo se refiere a una base de datos de Microsoft Access (.mdb) y a un proyecto de Microsoft Access (.adp).

Para obtener una versión de Microsoft Access 2000 de este artículo, consulte 208786.
Expandir todo | Contraer todo

Resumen

Este artículo explica cómo utilizar la función DBúsq() e incluye ejemplos y sugerencias.

En este artículo se incluyen los temas siguientes:
  • Sintaxis y uso de la función DBúsq().
  • Los siguientes ejemplos de la función DBúsq():
    • Una función sin criterios
    • Especificar criterios numéricos
    • Especificar criterios numéricos obtenidos de un campo de un formulario
    • Especificar criterios de texto
    • Especificar criterios de texto obtenidos de un campo de un formulario
    • Especificar criterios de fecha
    • Especificar múltiples campos en el criterio
  • Sugerencias para solucionar problemas y depurar expresiones DBúsq().
Tenga en cuenta que la mayoría de los problemas derivados del uso de la función Dbúsq() se producen por no configurar y proporcionar correctamente la expresión de criterio. La expresión de criterio es común a muchas otras funciones de agregado (totales) como DSuma(), DPrim(), DÚltimo(), DMín(), DMáx() y DCont(). Por tanto, el material que se incluye en este artículo puede resultarle útil para comprender las funciones de agregado de dominio, además de la función DBúsq().

Más información

Sintaxis y uso de la función DBúsq()

Puede utilizar la función DBúsq() en una expresión o en una función de Visual Basic para Aplicaciones para obtener el valor de un campo en un dominio o en un conjunto de registros especificado.

La sintaxis de la función DBúsq() es la siguiente:
 
DBúsq(Expresión, Dominio [, Criterio])
La función tiene tres argumentos: expresión , dominio y criterio (observe que el argumento criterio es opcional).

El argumento expresión se utiliza para identificar el campo que contiene los datos del dominio que desea obtener o para realizar operaciones con los datos del campo.

El argumento Dominio es el nombre del conjunto de registros que identifica el dominio. Puede tratarse de una tabla o de una consulta.

El argumento Criterio es una expresión de cadena opcional que puede utilizar para restringir el alcance de los datos en los que se ejecuta la función DBúsq(). Tenga en cuenta que el argumento criterio es idéntico a la cláusula WHERE en una expresión SQL (excepto en que no se utiliza la palabra clave WHERE).

La función DBúsq() devuelve un valor de un único campo, incluso si hay más de un registro que satisface los criterios. Si ninguno de los registros cumple los criterios, o si el dominio no contiene ningún registro, DBúsq() devuelve un valor nulo (Null).

Ejemplos de la función DBúsq()

El siguiente ejemplo muestra cómo utilizar DBúsq() para encontrar o devolver valores de una tabla o una consulta. Estos ejemplos se refieren a la base de datos de ejemplo, Neptuno.mdb, y puede incluirlos en la propiedad OrigenDelControl de un cuadro de texto de un formulario o un informe.

NOTA: en las expresiones de ejemplo siguientes se utiliza un carácter de subrayado (_) al final de una línea para indicar que ésta continúa. Quite el carácter de subrayado del final de la línea cuando escriba esta expresión.

Funciones sin criterio:

Este ejemplo muestra cómo utilizar la función DBúsq() en su forma más sencilla, sin especificar criterio alguno. El ejemplo devuelve el valor contenido en el campo Apellidos del primer registro de la tabla Empleados:
 
=DBúsq("[Apellidos]", "Empleados")

Especificar criterios numéricos:

Para buscar el apellido del empleado cuyo número de Id. es 7, especifique un criterio para limitar el número de registros utilizados:
 
=DBúsq("[Apellidos]", "Empleados", "[IdEmpleado] = 7")

Especificar criterios numéricos obtenidos de un campo de un formulario:

Si no desea especificar un determinado valor en la expresión (como en el ejemplo anterior), utilice en su lugar un parámetro en el criterio. Los siguientes ejemplos muestran cómo especificar un criterio obtenido de otro campo del formulario actual. Puede probar estos ejemplos en el formulario Pedidos de la base de datos de ejemplo Neptuno.mdb.
   =DBúsq("[Apellidos]", "Empleados", _
      "[IdEmpleado] = Form![IdEmpleado]")

   =DBúsq("[Apellidos]", "Empleados", _
      "[IdEmpleado] = " & [IdEmpleado])

   =DBúsq("[Apellidos]", "Empleados", _
      "[IdEmpleado] = " & Forms![Pedidos]![IdEmpleado])
Estos tres ejemplos devuelven el mismo resultado.

En el primero, Form![IdEmpleado] aparece dentro de las comillas que limitan el criterio. "Form" indica a Microsoft Access que la referencia al campo, "IdEmpleado", pertenece al formulario actual. Si lo omite, Microsoft Access compara IdEmpleado consigo mismo en la tabla Empleados y devuelve el apellido del primer registro de dicha tabla (el mismo resultado que si no especifica ningún criterio). Esto ocurre porque el valor del campo IdEmpleado en el primer registro de la tabla Empleados es 1, por lo que el argumento:
 
"[IdEmpleado]] = [IdEmpleado]"
se resuelve como:
 
"1 = 1"
y por tanto sería el primer registro que cumpliría el criterio.

Los criterios de los otros dos ejemplos se crean concatenando dos expresiones de cadena mediante un signo de y comercial (&). En el tercer ejemplo, el criterio termina con una referencia a un campo de un formulario.

Al evaluar los criterios, en primer lugar se evalúa cada uno de los elementos que lo componen, se anexan o concatenan y después se calcula el valor completo.

Si el valor actual del campo IdEmpleado del formulario Pedidos es 7, la expresión del criterio original
 
"[IdEmpleado] = " & [IdEmpleado]
se resolvería como
 
"[IdEmpleado] = " & 7
que, al concatenarse, se resuelve como:
 
"[IdEmpleado] = 7"
Si no especifica la referencia completa al formulario (como en el segundo de los ejemplos anteriores), Microsoft Access supone que se refiere al formulario actual.

El siguiente ejemplo deriva del tercero de los ejemplos anteriores:
 
   =DBúsq("[Apellidos]", "Empleados", _
      "[IdEmpleado] = Forms![Pedidos]![IdEmpleado]")
En este ejemplo, la referencia al formulario aparece dentro de las comillas que limitan el criterio. En este caso, Microsoft Access busca correctamente el valor al abrir el formulario por primera vez, pero sólo hasta que se cambia el campo IdEmpleado al modificar un registro o agregar un nuevo registro. Microsoft Access no vuelve a calcular automáticamente el nuevo valor del apellido del empleado después de tales cambios. Si desea volver a calcular manualmente la expresión, coloque el punto de inserción en el control y presione F9.

Si desea que el campo se actualice automáticamente cuando cambie el criterio, haga que el criterio sea una variable; para ello, concatene las partes de la expresión como se describió anteriormente. Tenga en cuenta que al cambiar de registro los cuadros de texto de DBúsq() que se actualizan automáticamente mostrarán #Error hasta que escriba algo en el cuadro de texto IdEmpleado.

Especificar criterios de texto:

Todos los ejemplos anteriores muestran cómo utilizar la función DBúsq() con criterios numéricos. Si los campos del criterio son campos de texto, incluya el texto entre comillas simples, como en el siguiente ejemplo:
 
   =DBúsq("[Cargo]", "Empleados", "[Apellidos] = 'Pérez'")
Tenga en cuenta que también puede utilizar comillas dobles en lugar de comillas simples, aunque es preferible utilizar estas últimas. Utilice dos comillas dobles para reemplazar una comilla simple. El ejemplo siguiente utiliza comillas dobles y equivale al anterior:
   DBúsq("[Cargo]", "Empleados", "[Apellidos] = 'Pérez'")

Especificar criterios de texto obtenidos de un campo de un formulario:

El siguiente ejemplo muestra cómo encontrar el nombre del contacto de un cliente en el formulario Pedidos. El campo IdCliente utiliza una clave de texto para el criterio, por lo que la instrucción DBúsq() es:
 
   =DBúsq("[NombreContacto]", "[Clientes]", _
      "[IdCliente]='" & [IdCliente] & "'")
O bien
 
   =DBúsq("[NombreContacto]", "[Clientes]", _
      "[IdCliente]='" & Forms![Pedidos]![IdCliente] & "'")
En el segundo ejemplo, para crear el criterio se concatenan tres expresiones de cadena. La primera es "[IdCliente] = '", la segunda es el valor que aparece en el campo IdCliente real y la tercera es la comilla simple de cierre que aparece entre comillas dobles.

Al evaluar este criterio se evalúa en primer lugar cada uno de los elementos y a continuación se anexan o concatenan los resultados obtenidos. Por último se evalúa el valor completo.

Si el valor seleccionado actualmente en el cuadro combinado IdCliente del formulario Pedidos es Alfreds Futterkiste, la columna enlazada con el cuadro combinado devuelve el valor ALFKI para IdCliente. La expresión del criterio original
 
   "[IdCliente] = '" & [IdCliente] & "'"
se evalúa como
 
   "[IdCliente] = '" & "ALFKI" & "'"
que, al concatenarse, se evalúa como
 
"[IdCliente] = 'ALFKI'"

Especificar criterios de fecha:

Si los campos del criterio corresponden a valores de fecha u hora, incluya su valor entre signos de número (#). Por ejemplo, utilice el siguiente criterio si desea encontrar un empleado que cumpla años en una fecha determinada:
   =DBúsq("[Apellidos]", "Empleados", "[FechaNacimiento] = #12-08-68#")

Especificar múltiples campos en el criterio:

La expresión del criterio puede ser cualquier cláusula WHERE de SQL válida (sin la palabra clave WHERE). Esto implica que es posible utilizar más de un campo para especificar criterios para la función DBúsq().

Para buscar el IdPedido de uno de los pedidos vendidos por el empleado "Andrew Fuller", cuyo Id. de empleado (IdEmpleado) es 2 (valor numérico), al cliente "Restaurante Simons", cuyo Id. de cliente (IdCliente) es SIMOB (texto), use la instrucción DBúsq() del siguiente ejemplo:
   =DBúsq("[IdPedido]", "Pedidos", _ "[IdCliente] = 'SIMOB' And [IdEmpleado] = 2")
Esta instrucción devuelve el valor 10556 para IdPedido, que corresponde al primer IdPedido que coincide con el criterio. El IdPedido con el valor 10669 también cumple el criterio.

El ejemplo anterior utiliza valores fijos (incluidos en el código) para IdCliente e IdEmpleado. Si desea utilizar variables en lugar de valores para dichos criterios, puede utilizar Visual Basic para Aplicaciones con el fin de concatenar varias expresiones de cadena. El siguiente ejemplo de Visual Basic muestra este método:

Sub subTest
    'Declara las variables.
    Dim CustID As String
    Dim EmpID As Long
    Dim Result

    'Asigna valores a las variables para utilizarlos en el criterio.
    CustID = "SIMOB"
    EmpID = 2
    Result = DBúsq("[IdPedido]", "Pedidos", _
             "[IdCliente] = '" & CustID & "' And [IdEmpleado] = " & EmpID)

   MsgBox Result
End Sub
Si la función DBúsq() no se ejecuta correctamente, la variable Result contiene un valor Null.

Observe que el criterio está formado por cuatro elementos que se evalúan individualmente. A continuación, los resultados se concatenan y se evalúan en conjunto. La expresión del criterio original:
 
   "[IdCliente] = '" & CustID & "' And [IdEmpleado] = " & EmpID
se evalúa como
   "[IdCliente] = '" & "SIMOB" & "' And [IdEmpleado] = " & 2
que, al concatenarse, se evalúa como
   "[IdCliente] = 'SIMOB' And [IdEmpleado] = 2"
Puede utilizar el siguiente ejemplo para encontrar un empleado que cumpla años en la fecha de hoy:
 
   =DBúsq("[Apellidos]", "Empleados", _
      "Month([FechaNacimiento]) = " & Month(Date) & " And Day([FechaNacimiento]) _
      = " & Day(Date))
Si la fecha de hoy es 2/12/2001, la expresión del criterio original
   "Month([FechaNacimiento]) = " & Month(Date) & " And Day([FechaNacimiento]) = " _
      & Day(Date)
se evalúa como
   "Month([FechaNacimiento]) = " & 12 & " And Day([FechaNacimiento]) = " & 2
que, al concatenarse, se evalúa como
 
   "Month([FechaNacimiento]) = 12 And Day([FechaNacimiento]) = 2"

Sugerencias para solucionar problemas y depurar las expresiones DBúsq()

Para solucionar problemas con estas expresiones, divídalas en componentes más pequeños y pruebe cada uno de estos componentes individualmente en la ventana Inmediato para comprobar que funcionan correctamente. Si todos estos componentes menores funcionan correctamente, puede reunirlos de nuevo, uno a uno, hasta que la expresión final también funcione correctamente.

Puede utilizar la ventana Inmediato para facilitar la depuración de módulos de Visual Basic. Utilice la ventana Inmediato para probar y evaluar expresiones independientemente del formulario o la macro en los que se utilicen. Puede crear expresiones en la ventana Inmediato, ejecutarlas y ver el resultado al instante.

El siguiente ejemplo muestra una estrategia para dividir la expresión DBúsq() en componentes más pequeños que se puedan probar en la ventana Inmediato. Suponga que hay algún problema con la siguiente instrucción:
   =DBúsq("[IdPedido]", "Pedidos", _
      "[IdCliente] = '" & Forms![MiFormulario]![IdCliente] _
      & "' And [IdEmpleado] = " & Forms![MiFormulario]![IdEmpleado])
Observe que el criterio de búsqueda incluye varios campos, de los cuales uno es numérico y otro es un campo de texto.

Para solucionar los problemas de esta expresión, pruebe los siguientes pasos:
  1. Presione CTRL+G para abrir la ventana Inmediato.
  2. Pruebe la función sin criterios. Para ello, escriba el código siguiente en la ventana Inmediato y presione ENTRAR:
     
    ? DBúsq("[IdPedido]", "Pedidos")
  3. Compruebe si las referencias del formulario son correctas. Para ello, abra el formulario Pedidos de la base de datos de ejemplo Neptuno.mdb y escriba las siguientes líneas en la ventana Inmediato. Presione ENTRAR después de cada línea.
     
    ? Forms![MiFormulario]![IdCliente]
    y
     
    ? Forms![MiFormulario]![IdEmpleado]
  4. Intente conseguir que los campos del criterio funcionen independientemente, incluyendo los valores en el código de la expresión. Para ello, escriba las siguientes líneas en la ventana Inmediato y presione ENTRAR después de cada una de ellas:
     ? DBúsq("[IdPedido]", "Pedidos", "[IdCliente] = 'SIMOB'")
    y
     ? DBúsq("[IdPedido]", "Pedidos", "[IdEmpleado] = 2)
  5. Intente conseguir que los campos del criterio funcionen independientemente con un parámetro en la consulta. Para ello, escriba las siguientes líneas en la ventana Inmediato y presione ENTRAR después de cada una de ellas:
     
    ? DBúsq("[IdPedido]", "Pedidos", _ "[IdCliente] = '" & Forms![MiFormulario]![IdCliente] & "'")
    y
     
    ? DBúsq("[IdPedido]", "Pedidos", _ "[IdEmpleado] = " & Forms![MiFormulario]![IdEmpleado])

Propiedades

Id. de artículo: 285866 - Última revisión: lunes, 24 de noviembre de 2003 - Versión: 5.1
La información de este artículo se refiere a:
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Access 2003
Palabras clave: 
kbdta kbfaq kbhowto KB285866

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com