Access - Se puede mejorar un cuadro combinado

   
Vista:

Se puede mejorar un cuadro combinado

Publicado por Jesus (29 intervenciones) el 04/01/2012 22:18:16
Hola, tengo una duda, he estado buscando y no lo encuentro. No se si se podrá hacer lo que os digo. En un formulario DatosIDent de una tabla DatosIDent he hecho un cuadro combinado con el asistente para que me muestre a partir del DNI (campo principal/clave) el registro completo. Mi pregunta es la siguiente qué se le puede añadir al código para que si el DNI no está en la tabla valla a un nuevo registro. Se podría poner esto en alguna parte DoCmd.GoToRecord , , acNewRec. Ahora lo tengo arreglado con un boton que va a un nuevo registro. Pero lo primero sería ideal.

1
2
3
4
5
6
7
8
9
Private Sub Cuadro_combinado17_AfterUpdate()
    ' Buscar el registro que coincida con el control.
    Dim rs As Object
 
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[DNI] = '" & Me![Cuadro combinado17] & "'"
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
 
End Sub

Muchas gracias
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

Se puede mejorar un cuadro combinado

Publicado por Neckkito (1104 intervenciones) el 04/01/2012 23:49:40
Hola!

Vamos a intentar una cosa, a ver si sale a la primera.Intenta probar este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Cuadro_combinado17_AfterUpdate()
' Buscar el registro que coincida con el control.
Dim rs As Object
 
Set rs = Me.Recordset.Clone
rs.FindFirst "[DNI] = '" & Me![Cuadro combinado17] & "'"
If rst.nomatch then
docmd.runcommand accmdRecordsGoToNew
' Si le añades la línea siguiente te copiará el dni buscado en el campo correspondiente del nuevo registro. Sólo tienes que quitarle la comilla simple del principio
' Me.DNI.Value = Me![Cuadro combinado17].Value
Exit Sub
End if
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
 
End Sub

...

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

Se puede mejorar un cuadro combinado

Publicado por Jesus (29 intervenciones) el 05/01/2012 09:33:52
Hola de nuevo, da un error tanto si selecciono un DNI de los existentes como si pongo uno nuevo.
Error 424 y en el código se marca en amarillo If rst.NoMatch Then.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Cuadro_combinado17_AfterUpdate()
 ' Buscar el registro que coincida con el control.
 Dim rs As Object
 
Set rs = Me.Recordset.Clone
 rs.FindFirst "[DNI] = '" & Me![Cuadro combinado17] & "'"
 If rst.NoMatch Then
 DoCmd.RunCommand acCmdRecordsGoToNew
 ' Línea para copiar el dni buscado en el campo  del nuevo registro.
 Me.DNI.Value = Me![Cuadro combinado17].Value
 Exit Sub
 End If
 If Not rs.EOF Then Me.Bookmark = rs.Bookmark
 
End Sub

Saludo y gracias
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

Se puede mejorar un cuadro combinado

Publicado por Neckkito (1104 intervenciones) el 05/01/2012 11:47:32
¿Tienes la biblioteca "Microsoft DAO 3.6 Object Library" registrada?

Ya me dirás.

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

Se puede mejorar un cuadro combinado

Publicado por Jesus (29 intervenciones) el 05/01/2012 15:18:50
ufff! A ver la BD la tengo con Access 2003, tengo instlado Microsoft Professional Edition 2003.
He mirado por la web lo de la libreria de Microsoft Dao 3.6 Object Library y, he copiado el archivo dao360.dll a System32 y, sigue danto el mismo erro???????????? no sé.

Saludos
Jesus
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

Se puede mejorar un cuadro combinado

Publicado por Neckkito (1104 intervenciones) el 05/01/2012 16:13:08
Por Dios!!!!!!!! Si estuvieras por aquí podrías darme bofetones hasta en el DNI!!!!! Qué error más tonto!!!!!

Lo que ha pasado es por "deformación profesional". Cuando yo creo un recordset siempre lo llamo rst, y al contestarte he utilizado la misma terminología sin mirar que tu recordset no se llama rst, sino rs. Es lógico que así no encontrara el objeto.

Cambia tu línea

If rst.NoMatch Then

por

If rs.NoMatch Then

A ver como te "pirula".

Mil disculpas

Ya me dirás.

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

Se puede mejorar un cuadro combinado

Publicado por Jesus (29 intervenciones) el 05/01/2012 18:28:12
Disculpas??????????? por Dios!!!!!!!! si el que no da una soy yo.
Bueno, ahora se ha dado un paso, estoy como al principio. Cuando pongo un DNI de la tabla o lista, aparece el registro pero si pongo uno nuevo aparece un error "2046" (La acción o comando 'RegistrosIrANuevo' no está disponible ahora.)y en amarillo:DoCmd.RunCommand acCmdRecordsGoToNew

Saludos
Jesus
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

Se puede mejorar un cuadro combinado

Publicado por Neckkito (1104 intervenciones) el 05/01/2012 19:26:12
Apreciado Jesús:

Ahí sí que no puedo darte una respuesta sin ver la BD, porque desconozco cómo tienes estructurado el tema de tus formularios.

Si quieres pásame la BD comprimida en zip o rar a mi correo, que es neckkito(ARROBA)yahoo.es, y si eres tan amable indícame cuál es el formulario "conflictivo" en el mail, que yo le echaré un vistazo e intentaré darte una solución.

Espero tus noticias.

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
Imágen de perfil de Neckkito

Se puede mejorar un cuadro combinado

Publicado por Neckkito (1104 intervenciones) el 06/01/2012 10:00:28
Hola!

Tras examinar tu BD y ver cómo la tenías montada te paso aquí el código que espero te sea de utilidad. Le he metido un pequeño control para confirmar la introducción del nuevo DNI, donde se solicita la confirmación por parte del usuario. El código sería el siguiente:
...
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
Private Sub Cuadro_combinado17_AfterUpdate()
    Dim rs As Object
    Dim vDNI As Variant
    Dim resp As Integer
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[DNI] = '" & Me![Cuadro combinado17] & "'"
'--Si el DNI existe aplicamos el filtro
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
'--Si el DNI no existe...
    If rs.NoMatch Then
        'Pillamos el valor del DNI introducido en el cuadro combinado
    vDNI = Me.Cuadro_combinado17.Value
        'Si el combo estuviera en blanco salimos del proceso
    If IsNull(vDNI) Then Exit Sub
        'Avisamos al usuario de que el DNI no existe, y pedimos si se debe añadir
    resp = MsgBox("El DNI introducido no existe. ¿Desea darlo de alta?", vbQuestion + vbYesNo, "DNI INEXISTENTE")
            'Si responde que NO limpiamos el combo y salimos
        If resp = vbNo Then
            Me.Cuadro_combinado17.Value = Null
            Exit Sub
        Else
                'Si responde que SI...
                'Cerramos el form actual y...
            DoCmd.Close acForm, Me.Name
                'Lo añadimos como nuevo registro en el form ForDatosIDentAñad
            DoCmd.OpenForm "ForDatosIDentAñad", , , , acFormAdd
            With Forms!ForDatosIDentAñad
                .Texto21.Value = vDNI
                .NombreApell.SetFocus
            End With
        End If
    End If
End Sub

...
Ya me dirás qué tal.
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

Se puede mejorar un cuadro combinado

Publicado por Jesus (29 intervenciones) el 06/01/2012 13:37:48
Muchas gracias por todo, era exactamente lo que buscaba. Ahora si, en vez de con el DNI nuevo abrir el formulario "ForDatosIDentAñad", quisiera abrir el mismo formulario que esta en pantalla "DatosIdent" en un nuevo registro con el DNI nuevo???
Bueno quizá esto ya sea incordiar demás.......... Muchísimas gracias por todo
De maravilla Neckkito, la de tiempo y vueltas que le llevaba dando y buscando.....
Un Saludo
Por cierto tu web es estupenda.........
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

Se puede mejorar un cuadro combinado

Publicado por Neckkito (1104 intervenciones) el 06/01/2012 21:38:15
Hola!
Ante todo te agradezco mucho tu comentario sobre la web... La verdad es que la idea es que os sea útil... y si encima es "estupenda", pues mucho mejor!

He analizado tu formulario y si lo colocas en vista diseño y sacas sus propiedades -> Pestaña Datos, verás que tienes el formulario configurado con estas propiedades:
- Permitir agregar: NO
- Permitir eliminación: NO

Como tienes bloqueada, por la primera propiedad citada, la adición de registros, es normal que te saliera el error 2046 que comentabas.

Dado que no sé si esas propiedades están configuradas así por algún motivo en especial te comento que probablemente sí se podría añadir un registro nuevo en el propio formulario (tengo que comprobarlo) donde buscas el DNI, pero ello implicaría cambiar la propiedad "Permitir agregar" a Sí.

Si me confirmas que se puede cambiar esa propiedad le echo un vistazo cuando tenga un momento.

Ya me dirás.

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

Se puede mejorar un cuadro combinado

Publicado por Jesus (29 intervenciones) el 07/01/2012 08:41:52
Hola! de nuevo.
Es cierto, en principio puse así las propiedades para no poder cambiar datos en los registros y si hubiera que añadir tener que pasar por el formulario "ForDatosIDentAñad". Claro en este supuesto que ahora propongo debo cambiarlo.
He hecho la prueba he modificado las propiedades y la parte final del código la he cambiado por:

1
2
3
4
5
6
7
8
9
10
11
12
 'Si responde que SI...
                'Cerramos el form actual y...
            DoCmd.Close acForm, Me.Name
                'Lo añadimos como nuevo registro en el form ForDatosIDentAñad
            DoCmd.OpenForm "DatosIDent", , , , acFormAdd
            With Forms!DatosIDent
                .DNI.Value = vDNI
                .NombreApell.SetFocus
            End With
        End If
    End If
End Sub

(vamos cerrar y abir de nuevo).

Mi intención era quitar la línea DoCmd.Close y añadir algo como:
DoCmd.RunCommand acCmdRecordsGoToNew
o como:
DoCmd.GoToRecord , , acNewRec
pero con esto da error.

Un saludo y, gracias de nuevo

Al respecto de tu web, lo de estupenda desde mi punto de vista es porque se van explicando los pasos y para los que no tenemos ni idea (como habrás observado) es una forma genial de enterder o ir asimilando todo esto.
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

Se puede mejorar un cuadro combinado

Publicado por Neckkito (1104 intervenciones) el 07/01/2012 11:57:09
Hola!

Te paso la solución, que consta de dos fases:

1.- Te he cambiado las propiedades del formulario. Ahora las tienes como si hubieras creado un formulario a partir de cero, basado en la tabla donde están los datos.

2.- El código asignado al combo es el siguiente:

...
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
Private Sub Cuadro_combinado17_AfterUpdate()
    Dim rs As Object
    Dim vDNI As Variant
    Dim resp As Integer
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[DNI] = '" & Me![Cuadro combinado17] & "'"
'--Si el DNI existe aplicamos el filtro
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
'--Si el DNI no existe...
    If rs.NoMatch Then
        'Pillamos el valor del DNI introducido en el cuadro combinado
    vDNI = Me.Cuadro_combinado17.Value
        'Si el combo estuviera en blanco salimos del proceso
    If IsNull(vDNI) Then Exit Sub
        'Avisamos al usuario de que el DNI no existe, y pedimos si se debe añadir
    resp = MsgBox("El DNI introducido no existe. ¿Desea darlo de alta?", vbQuestion + vbYesNo, "DNI INEXISTENTE")
            'Si responde que NO limpiamos el combo y salimos
        If resp = vbNo Then
            Me.Cuadro_combinado17.Value = Null
            Exit Sub
        Else
                'Si responde que SI...
                'Lo añadimos como nuevo registro en el form
            DoCmd.RunCommand acCmdRecordsGoToNew
            With Me
                .DNI.Value = vDNI
                .NombreApell.SetFocus
            End With
        End If
    End If
End Sub

...

Pruébalo, a ver cómo te va.

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

Se puede mejorar un cuadro combinado

Publicado por Jesus (29 intervenciones) el 07/01/2012 13:59:03
Gracias de nuevo.
Va perfecto. Cuando yo hice la prueba colocando la línea DoCmd.RunCommand acCmdRecordsGoToNew (suponiendo estuviera en el mismo lugar colocada) , me daba error y claro era por lo que me has dicho había que cambiar las propiedades del formulario.

MUCHISIMAS GRACIAS POR TODO, ¡ERES UN CRACK!
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