Access - cuadro combinado que busca e ingresa desde un filtro cuando no esta en la lista

   
Vista:

cuadro combinado que busca e ingresa desde un filtro cuando no esta en la lista

Publicado por Daniel (15 intervenciones) el 26/05/2017 12:08:56
Tengo un formulario1 (hoja de datos) con un cuadro combinado CComb con clientes. Los clientes salen de su tabla origen por su IdCliente y una instrucción sql lo muestra en el cuadro combinado por su apellido y nombre. Cuando escribo un nombre que no está en la lista me abre el formulario clientes (hoja de datos) para buscar si está escrito parecido

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Idcliente_NotInList(NewData As String, Response As Integer)
  If MsgBox("Agregar un nuevo cliente?" & vbCr & vbCr, vbExclamation + vbDefaultButton2 + vbYesNo) = vbYes Then
    no_en_lista_busca = NewData
        DoCmd.OpenForm "clientes"
    Me.IdPaciente.Text = ""
    Me.Requery
 End If
   Response = acDataErrAdded
End Sub
 
Private Sub Form_Open(Cancel As Integer)
Texto18 = no_en_lista_busca
DoCmd.ApplyFilter , "apellido & ' ' & nombre like '*" & Texto18 & "*'"
End Sub

quisiera que haciendo doble click sobre algún registro me permita ingresarlo en el cuadro combinado de donde partí; o si no es uno de los que filtré me permita ingresar un nuevo cliente y que después me aparezca en el cuadro combinado.
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

cuadro combinado que busca e ingresa desde un filtro cuando no esta en la lista

Publicado por Daniel (15 intervenciones) el 27/05/2017 11:07:16
En la línea 5 me equivoqué. Debe decir: Me.Idcliente.Text = ""
Probé esto:

1
2
3
4
5
6
7
8
9
10
'Abrí un módulo para declarar variables públicas:
Public codigo_paciente As Integer
Public no_en_lista_busca As String
 
'En el formulario clientes, en el cuadro de texto Idcliente:
Private Sub Idcliente_DblClick(Cancel As Integer)
codigo_cliente = Idcliente
formularios!formulario1!Idcliente = codigo_cliente
DoCmd.Close
End Sub

Pero sale un error que dice que no reconoce al objeto formulario1
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

cuadro combinado que busca e ingresa desde un filtro cuando no esta en la lista

Publicado por Daniel (15 intervenciones) el 28/05/2017 14:34:22
Me equivoqué al principio. El cuadrocombinado no se llama CComb sino Idcliente.
Alguien que me ayude a entender qué hice mal o me plantee una mejor alternativa, por favor
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

cuadro combinado que busca e ingresa desde un filtro cuando no esta en la lista

Publicado por Anonimo (942 intervenciones) el 28/05/2017 17:33:48
Hay algunas cosas mejorables o que precisan su modificacion de forma inmediata.

Línea cinco, evento 'NotInList':
.- Quitar la referencia a la propiedad 'TEXT' (en Access) solo existe para el objeto activo (una diferencia con Visual Basic), se puede utilizar 'Value' o NADA, pues es la propiedad por defecto

Para que un formulario sea 'reconocido', ha de estar abierto (sea normal, minimizado oculto o incluso en modo diseño) si no es asi para Access 'no existe'.

Se pueden enviar datos a un formulario o informe en su apertura (lee algo sobre la propiedad OpenArgs) ello evita la obligatoriedad de declarar variables.

Nota:
Precaucion con la sentencia 'DoCmd.Close', cerrara el objeto activo, se aconseja utilizar sus parametros y definir exactamente lo que se cierra
Si se desease cerrar el formulario actual bastaria esto:
1
DoCmd.Close acForm, Me.Name
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

cuadro combinado que busca e ingresa desde un filtro cuando no esta en la lista

Publicado por Daniel (15 intervenciones) el 29/05/2017 15:42:23
Muchas gracias Anonimo por tu amable y clara respuesta! Corregí los errores que me señalaste. Ahora abro el formulario clientes directamente filtrado:

1
DoCmd.OpenForm "clientes", , , "apellido & ' ' & nombre like '*" & NewData & "*'", , , NewData

Y en el formulario clientes no sabría cómo capturar el Idcliente para llevarlo al formulario1:

1
2
3
4
5
6
Private Sub Idcliente_DblClick(Cancel As Integer)
codigo_cliente = Idcliente
Forms!formulario1!Idcliente.SetFocus
Forms! formulario1! Idcliente.Value = codigo_cliente
DoCmd.Close acForm, Me.Name
End Sub

No he conseguido resultado. Ahora no da error pero inserta el Id en el primer registro del filtro del formulario1 (otro filtro) y no en el registro del cual partí. Tendría que usar un “Response = acDataErrContinue”?
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
Revisar política de publicidad