Access - Codigo buscar

   
Vista:

Codigo buscar

Publicado por blas (143 intervenciones) el 08/09/2012 13:51:44
Hola a todos amigos.

Hace tiempo me pasaron el código que muestro mas abajo (ahora retocado) para utilizarlo como buscador en un pequeño programilla. El funcionamiento es muy sencillo, en un combox independiente se introduce el número de DNI de un cliente y busca datos en una tabla, mas abajo en una caja de texto me enseña el número de factura, y mas abajo aún en otra caja de texto mas grande me enseña varios datos mas de las misma tabla.

Pues funciona bien hasta que se encuentra con que hay 2 registros con el mismo DNI. Aunque el combo muestra los 2 DNI iguales al desplegarlo, en las cajas de datos solo me muestra los datos del primer registro. Alguien me puede ayudar. He probado muchas cosas, desde refrescar el combox, las cajas de texto con Me.Refresh, Me.Requery etc. a cambiar algo en el código, pero nada de nada. Alguien me puede ayudar. Muchas gracias.

El combo independiente donde ingreso los datos se llama: DNI

En el evento: Despues de actualizar esta el código que muestro completo mas abajo y en el origen de la fila esta consulta SQL

SELECT GENERAL.DNI, GENERAL.Factura
FROM [GENERAL]
ORDER BY GENERAL.DNI;


El campo donde muestra el numero de factura se llama: Factura

El campo donde muestra mas datos se llama: Post

La tabla se llama: GENERAL

Un botón que limpia las cajas de texto y combo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Private Sub DNI_AfterUpdate()
On Error GoTo Err_Procedimiento
 
    Dim strDNI As String
    Dim strTabla As String
    Dim strFiltro As Strin
 
    '¿Hay datos válidos ingresados?
    strDNI = Trim(Nz(Me.DNI, ""))
 
    If strDNI = "" Then
 
        'limpio los datos
        Me.Factura = Null
        Me.Post = Null
 
    Else
        'defino los datos para realizar la búsqueda de datos
        strTabla = "GENERAL"
        strFiltro = "DNI = '" & strDNI & "'"
 
        'obtengo y asigno los datos que me interesan
 
            'Me.Factura = Nz(DLookup("Factura", strTabla, strFiltro), "")
 
            Me.Post = "Nº Acta: " & Nz(DLookup("DNI", strTabla, strFiltro), "") & vbCrLf & _
         "Nom Cliente: " & Nz(DLookup("CLIENTENOMBRE", strTabla, strFiltro), "") & vbCrLf & _
        "Apelli Cliente: " & Nz(DLookup("CLIENTEAPELLIDOS", strTabla, strFiltro), "") & rLf& _
        "Direccion : " & Nz(DLookup("NOMBRECALLE", strTabla, strFiltro), "") & vbCrLf & _
          "Agente 1: " & Nz(DLookup("NUMCALLE", strTabla, strFiltro), "")
 
    End If
 
Exit_Procedimiento:
    Exit Sub
 
Err_Procedimiento:
    MsgBox Err.Description, vbCritical, "Error " & Err.Number
    Resume Exit_Procedimiento
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito

Codigo buscar

Publicado por Neckkito (1104 intervenciones) el 10/09/2012 10:44:31
Hola!
Es normal que te pase lo que comentas porque el dlookup te devuelve la primera coincidencia.
Lo que deberías hacer es ampliar tu filtro, para que te busque por dos criterios, que son los campos origen de tu combo (doy por supuesto que el segundo campo también se te muestra en el combo).
Suponiendo que factura es de tipo numérico (si fuera de tipo texto la variable que te recoge el valor de la factura debería ir entre comillas simples en la definición del filtro, tal y como tienes ahora filtrado el valor del DNI), tu código debería quedar modificado así:
1.- Debes añadir la definición de una nueva variable
Dim vFactura As Long 'String si el valor es de tipo texto
2.- Debes coger el valor del combo a través de
vFactura = me.DNI.Column(1)
3.- Debes ampliar tu filtro de la siguiente manera:
strFiltro = "DNI = '" & strDNI & "' AND [Factura]=" & vFactura
Así en teoría debería filtrarte por dos criterios y darte los datos que necesitas.
Pruébalo y ya me dirás qué tal.
Un saludo,
Neckkito
... http://neckkito.eu5.org ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codigo buscar

Publicado por blas perdón "queria responder" (143 intervenciones) el 10/09/2012 21:50:40
Hola Neckkito.

El combox solo muestra el campo DNI y los dos campos de la tabla son de tipo texto.

Con las modificaciones que me has aconsejado el Código me ha quedado como sigue pero me da error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub DNI_AfterUpdate()
On Error GoTo Err_Procedimiento
 
Dim strDNI As String
Dim strTabla As String
Dim strFiltro As String
Dim vFactura As String
 
'¿Hay datos válidos ingresados?
strDNI = Trim(Nz(Me.DNI, ""))
vFactura = Me.DNI.Column(1)
 
If strDNI = "" Then
 
'limpio los datos
Me.Factura = Null
Me.Post = Null
 
Else
 
'defino los datos para realizar la búsqueda de datos
strTabla = "GENERAL"
strFiltro = "DNI = '" & strDNI & "'" And [Factura] = " vFactura"
 
'obtengo y asigno los datos que me interesan
 
'Me.Factura = Nz(DLookup("Factura", strTabla, strFiltro), "")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Codigo buscar

Publicado por Neckkito (1104 intervenciones) el 10/09/2012 22:21:11
Hola!
Si me dices que tu combo tiene como origen la SQL

SELECT GENERAL.DNI, GENERAL.Factura
FROM [GENERAL]
ORDER BY GENERAL.DNI;

Estás manejando dos campos. Si sólo te sale uno es que tienes el combo "mal" (por decirlo de alguna manera) configurado.
Para configurarlo saca las propiedades del combo y te vas a la Pestaña Formato ->
Número de columnas: 2
Ancho de columnas: 2cm;2cm
(El ancho de columnas es orientativo, y puedes poner los valores que mejor te vayan)

Por otra parte, el filtro que has construido no tiene una sintaxis correcta, si me dices que el campo [Factura] es tipo texto. Tu filtro debería ser así:

strFiltro = "DNI = '" & strDNI & "'" And [Factura] ='" & vFactura & "'"

A ver si con esto te funciona.

Un saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codigo buscar

Publicado por blas (143 intervenciones) el 11/09/2012 10:54:20
Hola Neckkito. Perdón por tantan molestia.

He corregido la SQL, efectivamente en "número de columnas" tenia sólo una, ya está en dos.
En formato he entendido que ponga el signo mayor que >. Lo del ancho de las columnas casi
que da igual, he dejado ver la segunda también pero yo no quiero que se vea porque hace un
poco feo el combo.

En cuanto al filtro, lo he corregido y me seguia dando el error 13. Lo he llevado haciendo el copiar y pegar del tuyo por si no viera bién algunas comillas pero se marca en rojo y da un error de compilación, en la ayuda dice: Se espera: <varios>. No se que puede estar mal. Sigo probando haciendo cambios en todo, te cuento. Saludos, Blas

Mi versión de Access es 2002
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codigo buscar

Publicado por Ruben (1 intervención) el 02/07/2014 03:02:40
como saber cuando no ubica el registro, como hacer para poner un mensaje
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codigo buscar

Publicado por JOSE (741 intervenciones) el 11/09/2012 13:13:40
saludos blas

lo mismo que en la vida real no puede haber dos personas con el mismo dni el ordenador, si te permite introducirlo , no distinguirá los datos de un o u otro.

si como parece quieres hacer que un mismo cliente tenga dos fichas deberás identificarlos por iotro codigo que los individualice.

si no lo queres hacer así añade un caraceter al dni para diferenciarlo por ejemplo 13.711.418n-a

o bien poniendo puntos que son m.as discretos 13714235b. o 202365124s..

y de esta forma discreta puedes tener varios clientes con varias fichas


espero que ésta ñapa te sirva, aunque no es muy ortodoxa.

un saludo - jose manuel desde el astillero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codigo buscar

Publicado por blas (143 intervenciones) el 11/09/2012 13:39:59
Hola Jose. Muchas gracias por tu ayuda, pero el tema está en el código.

Neckkito va por buen camino, lo que ocurre es que no encuentro el error para que haga que el código finalice correctamente. Sigo depurandolo. Hasta que no lo resulva no lo dejare. No me quiero dar por vencido. Espero que entre Neckkito y yo lo resolvamos, eso si alguien mas no aporta otra solución antes. Muchas gracias Jose.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codigo buscar final

Publicado por blas (143 intervenciones) el 12/09/2012 21:37:47
Hola Neckkito, quien la sigue la consigue. ¡RESUELTO!.

He quitado unas comillas despues del And y he puesto entre corchetes el vFactura y resulto.
Me ha costado pero lo he conseguido. Gracias Neckkito.

strFiltro = "DNI = '" & strDNI & "' And Factura = '" & [vFactura] & "'"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito

Codigo buscar final

Publicado por Neckkito (1104 intervenciones) el 13/09/2012 12:52:43
Hola, Blas!

Me alegra que lo hayas podido solventar. Sinceramente, ni se me hubiera ocurrido darte la solución que comentas...

Bueno... Cosas de la vida (y de Access). Me alegra que por fin lo hayas solventado.

Un gran saludo,

Neckkito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar