Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Función Dlookup con multiples condiciones

498 views
Skip to first unread message

cartapok

unread,
Jul 2, 2009, 1:11:10 PM7/2/09
to

Intento a�adirle a la funci�n:

estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#")

otro criterio, con AND, pero no consigo aclararme con los par�ntesis, las
comillas, y los # .
Lo que intento que cumpla como segunda condici�n es lo siguiente:

"[id_empleado] = " & Me.[Id Datos]

Deber�a ser algo as� como esto:

estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#" And
"[id_empleado] ='" & Me.[Id Datos] & "'")

o esto:
estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#" And
"[id_empleado] = " & Me.[Id Datos] & "")

pero no funcionan. Dan el error que no coinciden los tipos. �pod�is
echarme una mano?.

Saludos.

Emilio

unread,
Jul 2, 2009, 1:35:53 PM7/2/09
to

--------------------------------------------------------------------------
�Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvi� o no la respuesta dada. Muchas gracias
--------------------------------------------------------------------------
Hola!
prueba con

estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "# And

"[id_empleado] = " & Me.[Id Datos])

siempre que Id Datos sea num�rico.


Saludos a tod@s
Emilio [MS-MVP Access 2006/9]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio

"cartapok" <cart...@hotmail.com> escribi� en el mensaje de noticias
news:OCB9cgz%23JHA...@TK2MSFTNGP02.phx.gbl...

> __________ Informaci�n de ESET Smart Security, versi�n de la base de
> firmas de virus 4210 (20090702) __________
>
> ESET Smart Security ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>


__________ Informaci�n de ESET Smart Security, versi�n de la base de firmas de virus 4210 (20090702) __________

ESET Smart Security ha comprobado este mensaje.

http://www.eset.com

cartapok

unread,
Jul 2, 2009, 1:53:34 PM7/2/09
to

Gracias Emilio. Id Datos si es num�rico, pero no funciona. Se pone en rojo
la expresi�n en el editor de VBA.
Intentar� variaciones sobre tu propuesta.

"Emilio" <miliuco56 ALGARROBA hotmail PUNTO com> escribi� en el mensaje
news:OaKNOuz%23JHA...@TK2MSFTNGP05.phx.gbl...

Blackbelt

unread,
Jul 2, 2009, 2:20:18 PM7/2/09
to

Solamente le sobran unas comillas, quedaría asi:

estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "# And
id_empleado= " & Me.[Id Datos])


Blackbelt


"cartapok" escribió:

> Gracias Emilio. Id Datos si es numérico, pero no funciona. Se pone en rojo
> la expresión en el editor de VBA.
> Intentaré variaciones sobre tu propuesta.
>
> "Emilio" <miliuco56 ALGARROBA hotmail PUNTO com> escribió en el mensaje

> news:OaKNOuz%23JHA...@TK2MSFTNGP05.phx.gbl...
> > --------------------------------------------------------------------------
> > ¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te

> > sirvió o no la respuesta dada. Muchas gracias


> > --------------------------------------------------------------------------
> > Hola!
> > prueba con
> >
> > estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "# And
> > "[id_empleado] = " & Me.[Id Datos])
> >

> > siempre que Id Datos sea numérico.


> >
> >
> > Saludos a tod@s
> > Emilio [MS-MVP Access 2006/9]
> > miliuco56 ALGARROBA hotmail.com
> > http://www.mvp-access.com/foro
> > http://www.mvp-access.es/emilio
> >

> > "cartapok" <cart...@hotmail.com> escribió en el mensaje de noticias
> > news:OCB9cgz%23JHA...@TK2MSFTNGP02.phx.gbl...
> >> Intento añadirle a la función:


> >>
> >> estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#")
> >>

> >> otro criterio, con AND, pero no consigo aclararme con los paréntesis, las


> >> comillas, y los # .

> >> Lo que intento que cumpla como segunda condición es lo siguiente:


> >>
> >> "[id_empleado] = " & Me.[Id Datos]
> >>

> >> Debería ser algo así como esto:


> >>
> >> estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#" And
> >> "[id_empleado] ='" & Me.[Id Datos] & "'")
> >>
> >> o esto:
> >> estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#" And
> >> "[id_empleado] = " & Me.[Id Datos] & "")
> >>

> >> pero no funcionan. Dan el error que no coinciden los tipos. ¿podéis
> >> echarme una mano?.
> >>
> >> Saludos.
> >>
> >>
> >>
> >>
> >> __________ Información de ESET Smart Security, versión de la base de

> >> firmas de virus 4210 (20090702) __________
> >>
> >> ESET Smart Security ha comprobado este mensaje.
> >>
> >> http://www.eset.com
> >>
> >>
> >>
> >
> >

> > __________ Información de ESET Smart Security, versión de la base de

cartapok

unread,
Jul 2, 2009, 2:47:08 PM7/2/09
to

Ahora SI, muchas gracias a los dos.

Desde luego ha sido uno de las veces que mas pruebas he hecho... la mayor
parte de ellas cambiando cosas por cambiarlas, pero es que la ayuda de
Access en esta funci�n es muy poca y no he llegado a comprender el orden de
tanto par�ntesis, comillas y dem�s simbolos, y eso que me he bajado ejemplos
de uni�n de condiciones mediante AND.
Bueno, muchas gracias de nuevo.

"Blackbelt" <Blac...@discussions.microsoft.com> escribi� en el mensaje
news:594F49F8-6F5C-47F4...@microsoft.com...
> Solamente le sobran unas comillas, quedar�a asi:


> estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "# And
> id_empleado= " & Me.[Id Datos])
>
>
> Blackbelt
>
>

> "cartapok" escribi�:
>
>> Gracias Emilio. Id Datos si es num�rico, pero no funciona. Se pone en
>> rojo
>> la expresi�n en el editor de VBA.
>> Intentar� variaciones sobre tu propuesta.
>>
>> "Emilio" <miliuco56 ALGARROBA hotmail PUNTO com> escribi� en el mensaje


>> news:OaKNOuz%23JHA...@TK2MSFTNGP05.phx.gbl...
>> > --------------------------------------------------------------------------
>> > �Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si
>> > te

>> > sirvi� o no la respuesta dada. Muchas gracias


>> > --------------------------------------------------------------------------
>> > Hola!
>> > prueba con
>> >
>> > estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#
>> > And
>> > "[id_empleado] = " & Me.[Id Datos])
>> >

>> > siempre que Id Datos sea num�rico.


>> >
>> >
>> > Saludos a tod@s
>> > Emilio [MS-MVP Access 2006/9]
>> > miliuco56 ALGARROBA hotmail.com
>> > http://www.mvp-access.com/foro
>> > http://www.mvp-access.es/emilio
>> >

>> > "cartapok" <cart...@hotmail.com> escribi� en el mensaje de noticias
>> > news:OCB9cgz%23JHA...@TK2MSFTNGP02.phx.gbl...


>> >> Intento a�adirle a la funci�n:
>> >>

>> >> estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#")
>> >>

>> >> otro criterio, con AND, pero no consigo aclararme con los par�ntesis,

>> >> las
>> >> comillas, y los # .

>> >> Lo que intento que cumpla como segunda condici�n es lo siguiente:


>> >>
>> >> "[id_empleado] = " & Me.[Id Datos]
>> >>

>> >> Deber�a ser algo as� como esto:


>> >>
>> >> estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#"
>> >> And
>> >> "[id_empleado] ='" & Me.[Id Datos] & "'")
>> >>
>> >> o esto:
>> >> estat = DLookup("[estado]", "tbl_estado", "[fech] = #" & fechh & "#"
>> >> And
>> >> "[id_empleado] = " & Me.[Id Datos] & "")
>> >>

>> >> pero no funcionan. Dan el error que no coinciden los tipos. �pod�is
>> >> echarme una mano?.
>> >>
>> >> Saludos.
>> >>
>> >>
>> >>
>> >>
>> >> __________ Informaci�n de ESET Smart Security, versi�n de la base de


>> >> firmas de virus 4210 (20090702) __________
>> >>
>> >> ESET Smart Security ha comprobado este mensaje.
>> >>
>> >> http://www.eset.com
>> >>
>> >>
>> >>
>> >
>> >

>> > __________ Informaci�n de ESET Smart Security, versi�n de la base de

Patxi Sanz

unread,
Jul 3, 2009, 11:13:29 AM7/3/09
to

El problema lo tienes con la fecha.

Tanto en VBA como en SQL, cuando encierras una fecha entre almohadillas
(#03/07/2009# por ejemplo), esperan una de las siguientes configuraciones:

- Formato norteamericano: mes/d�a/a�o
- Formato ISO: a�o/mes/d�a

Pero los que tenemos en nuestra configuraci�n regional que el formato de
fecha es d�a/mes/a�o, nos enfrentamos al problema con el que te acabas de
encontrar. En la fecha que he puesto arriba, nosotros leemos 3 de julio de
2009, porque entendemos que el formato es d�a/mes/a�o. Pero tanto el SQL
como el VBA suponen que el formato es norteamericano, y leen la fecha como 7
de marzo de 2009.

�Y la soluci�n? Pues formatear la fecha antes de concatenarla con el resto
del criterio, para que siempre sea formada seg�n quieren el VBA y el SQL:

Private Sub Comando6_Click()
Dim fech_max As Date
Dim max_estado As String
Dim criterio As String

criterio = "[id_estado] = " & Me.[id_persona]
fech_max = (DMax("[fech]", "tbl_estado", criterio))

MsgBox "fech_max: " & fech_max & Chr$(13) & "id_persona: " & Me.[id_persona]
& vbCrLf & "Con el criterio: " & criterio

criterio = "[fech] = #" & Format(fech_max, "mm/dd/yyyy") & "# AND id_estado
= " & Me.[id_persona]

max_estado = Nz(DLookup("[estado]", "tbl_estado", criterio), "No encuentro
nada")

MsgBox "max_estado: " & max_estado & vbCrLf & "Con el criterio: " & criterio

End Sub

Nota: El Nz que he agregado al DLookup es porque esta funci�n devuelve un
valor nulo si no encuentra nada, pero la variable max_estado, al ser de tipo
String, no puede guardar valores nulos, y obtendr�s un error si DLookup no
encuentra nada y devuelve un valor nulo.

--
Un saludo,


Patxi Sanz
Tudela (NA)

cartapok

unread,
Jul 3, 2009, 4:35:10 PM7/3/09
to

Gracias, Patxi. He sustituido el c�digo que me propones por el m�o en la
aplicaci�n de ejemplo que adjunt� y no llega a mostrarse el valor de
max_estado. Da el error 2001 en tiempo de ejecuci�n. Voy a intentar
comprender las modificaciones... que para mi nivel no es poco y ya comentar�
algo. Saludos.

"Patxi Sanz" <patxisanz[ARROBA]yahoo[PUNTO]es> escribi� en el mensaje
news:41F0B40C-9870-4B2C...@microsoft.com...

cartapok

unread,
Jul 3, 2009, 5:07:11 PM7/3/09
to
OK, ya lo he arreglado, era un peque�o retoque. Ha quedado as�. La verdad es
que hay que montar una buena por culpa de la dichosa fecha, cuando los
americanos lo pueden calcular con una sola sentencia.
Gracias.

Private Sub Comando6_Click()
Dim fech_max As Date
Dim max_estado As String
Dim criterio As String
criterio = "[id_estado] = " & Me.[id_persona]
fech_max = (DMax("[fech]", "tbl_estado", criterio))
MsgBox "fech_max: " & fech_max & Chr$(13) & "id_persona: " & Me.[id_persona]
& vbCrLf & "Con el criterio: " & criterio
criterio = "[fech] = #" & Format(fech_max, "mm/dd/yyyy") & "# AND
[id_estado] = " & Me.[id_persona]
MsgBox "fech_max: " & fech_max & Chr$(13) & "id_persona: " & Me.[id_persona]
& vbCrLf & "Con el criterio: " & criterio
max_estado = Nz(DLookup("[estado]", "tbl_estado", criterio), "No encuentro
nada ")
MsgBox "max_estado: " & max_estado & vbCrLf & "Con el criterio: " & criterio
End Sub

"cartapok" <cart...@hotmail.com> escribi� en el mensaje
news:%23uAGJ3B$JHA....@TK2MSFTNGP05.phx.gbl...

Patxi Sanz

unread,
Jul 4, 2009, 6:22:13 AM7/4/09
to

:-)
0 new messages