Error 440 en formulario (tiempo de ejecucion)

Probé la solución que me distes para buscar e insertar clientes con dlook y me da este error al pasar del formulario de crear clientes al de reservas.

Después te amplio un poco la información.

El error 440 en tiempo de ejecución

¿Y me dice algo de campo activo debe coincidir con la clave de combinación? O algo así porque hablo de memoria.

1 respuesta

Respuesta
1

Pues espero a que me amplíes la información.

Perdona el retraso pero he estado muy liado.

A ver si te puedo explicar.

Tengo una BD donde gestiono las reservas a un parque de aventuras.

En esta BD, tengo las tablas de clientes [1_contactos_INDIVIDUALES] y una tabla de reservas [AP2_ficha_inscripcion_particulares]. hay otras tablas para los cuadros combinados de estas tablas principales.

por otra parte, tengo un formulario para las reservas [AP2_ficha_inscripcion_particulares error 404] con una serie de campos. tengo colocado un botón que me abre un formulario de clientes ya existentes [subformularios_insertar_cliente_individual] en el que puedo buscar algún cliente, y en este formulario tengo un botón que me inserta el cliente en el formulario de reservas mediante el siguiente código:

Private Sub Comando68_DblClick(Cancel As Integer)
Forms![AP2_ficha_inscripcion_particulares error 404].id_contacto_part = Me.id_contacto
DoCmd.Close
End Sub

si lo hago así, me funciona correctamente.El problema viene cuando en el campo nombre y apellidos introduzco algún nombre. mediante un código que me mandaste con dlookup hace una búsqueda y si existe me manda al formulario de [subformularios_insertar_cliente_individual] filtrado por el nombre existente (hasta ahí muy bien, lo único es que me gustaría que en vez de buscar literalmente, que buscara coincidencias como cuando filtras marcándole "cualquier parte del que campo", así si busco maría, me aparecieran todo lo que contenga maría). bueno. sigo. cuando encuentra la coincidencia me abre el formulario para insertar el cliente y al darle al botón de insertar (comando68) me sale el error 404.

a su vez, si el cliente no existe se me abre el formulario de crear cliente, lo creo y al intentar copiarlo al formulario de reserva me vuelve a dar el error 404 de tiempo de ejecución.

lo que he comprobado, que si pongo un nombre y me lleva a cualquiera de los formularios de crear o existentes, y antes de insertar me paso al de reservas y le doy a nuevo, se me inserta bien el cliente. creo que al rellenar el campo de nombre, automáticamente se le crea un id, y al pasar al formulario de crear o de insertar e intentar insertarlo en la reserva, el id que traemos se encuentra de que ya hay uno en el campo id de reservas. me echo un poco de lio explicándolo.

he preparado la BD para enviártela si me dices a donde te la puedo hacer llegar. (mail o lo que sea).

el código de dlookup que me mandaste es este:

Private Sub Nombre_y_apellidos_AfterUpdate()
Dim miID As Integer
Dim mi nombre As String
'Si dejas el campo vacío, limpia Mail, Teléfono y sale
If IsNull(Me.Nombre_y_apellidos) Then
Me.Email = ""
Me.móvil = ""
Exit Sub
End If
'Si no, busca el nombre en la tabla tbClientes
mi nombre = Me.Nombre_y_apellidos.Value
miID = Nz(DLookup("Id_contacto", "1_contactos_INDIVIDUALES", "[Nombre y apellidos]='" & mi nombre & "'"), 0)
'Si el cliente no está registrado (miID=0)
If miID = 0 Then
DoCmd.OpenForm "FCreaClientes", , , , acFormAdd
Forms!FCreaClientes.[Nombre y apellidos] = mi nombre
Else
DoCmd.OpenForm "subformularios_insertar_cliente_individual", , , "[Nombre y apellidos]='" & mi nombre & "'"
End If

muchas gracias por estar ahí.

Sube la BD a un servidor tipo filebig.net o similar y pega aquí el enlace de descarga. Tan pronto pueda, le echo un vistazo y te doy una respuesta.

http://filebig.net/files/U8NuJa9R74

subido....

Gracias de nuevo

Por lo que veo, el error viene dado porque en el formulario [AP2_ficha_inscripcion_particulares error 404] estás mezclando dos tablas difierentes, y cuando entras en un campo de los que se corresponden a la tabla [1_contactos_INDIVIDUALES], te intenta crear, en el formulario, un nuevo registro para esa tabla, y choca con la relación que existe entre ambas....

La solución está en poner como origen del formulario únicamente la tabla [AP2_ficha_inscripcion_particulares], y los cuadros de texto que están debajo del botón "buscar contacto", menos [id_contacto_part] y [observaciones], los pones sin origen de control, es decir, como cuadros de texto independientes. Luego, modificas el código que te trae el id del cliente para que te traiga el resto de los datos del mismo de la tabla/formulario correspondiente. Algo así:

Private Sub Comando68_DblClick(Cancel As Integer)
With Forms![AP2_ficha_inscripcion_particulares error 404]
.id_contacto_part = Me.id_contacto
.Tipo_cliente = Me.Tipo_cliente
.Organización___Centro = Me.Organización___Centro
.Nombre_y_apellidos = Me.Nombre_y_apellidos
.Teléfono = Me.Teléfono
.móvil = Me.móvil
.Email = Me.Email
.dni = Me.dni
.fecha_nacimiento = Me.fecha_nacimiento
End With
DoCmd.Close
End Sub

Y Para acabar, en el evento al activar registro (Form_Current) de ese formulario, le añades este otro código, para que te muestre los valores de los que ya tienes registrados:

Dim miID As Integer
If Me.id_contacto_part = "" Or IsNull(Me.id_contacto_part) Then
Me.Tipo_cliente = ""
Me.Organización___Centro = ""
Me.Nombre_y_apellidos = ""
Me.Email = ""
Me.Teléfono = ""
Me.móvil = ""
Me.dni = ""
Me.fecha_nacimiento = ""
Else
miID = Me.id_contacto_part
Me.Tipo_cliente = Nz(DLookup("Tipo_cliente", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
Me.Organización___Centro = Nz(DLookup("[Organización / Centro]", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
Me.Nombre_y_apellidos = Nz(DLookup("[Nombre y apellidos]", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
Me.Email = Nz(DLookup("Email", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
Me.Teléfono = Nz(DLookup("Teléfono", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
Me.móvil = Nz(DLookup("móvil", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
Me.dni = Nz(DLookup("dni", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
Me.fecha_nacimiento = Nz(DLookup("fecha_nacimiento", "1_contactos_INDIVIDUALES", "[id_contacto]=" & miID), "")
End If

Para la otra cuestión, que no te haga búsquedas por valor exacto, prueba con este otro código:

Private Sub Nombre_y_apellidos_AfterUpdate()
Dim miID As Integer
Dim mi nombre As String
'Si dejas el campo vacío, limpia Mail, Teléfono y sale
If IsNull(Me.Nombre_y_apellidos) Then
Me.Email = ""
Me.móvil = ""
Exit Sub
End If
'Si no, busca el nombre en la tabla tbClientes
mi nombre = Me.Nombre_y_apellidos.Value
miID = Nz(DLookup("Id_contacto", "1_contactos_INDIVIDUALES", "[Nombre y apellidos] LIKE '" & mi nombre & "*'"), 0)
'Si el cliente no está registrado (miID=0)
If miID = 0 Then
DoCmd.OpenForm "FCreaClientes", , , , acFormAdd
Forms!FCreaClientes.[Nombre y apellidos] = mi nombre
Else
DoCmd.OpenForm "subformularios_insertar_cliente_individual", , , "[Nombre y apellidos] LIKE '" & miNombre & "*'"
End If
End Sub

Y por último, comentarte que vi una cosa rara en tu es relaciones: no entiendo por qué tienes relacionadas dos veces la tabla 1_contactos_INDIVIDUALES con la tabla AP2_ficha_inscripcion_particulares, y dos veces la tabla AP2_ficha_inscripcion_particulares con la tabla actividad_part. Si borras esas dos relaciones, la BD funciona igualmente...

Un saludo.

PD: te resubo aquí la bd, con los cambios que hice. Úsala sólo para verlos y/o copiar el código o los formularios, pues tuve que hacerle un pequeño apaño a las tablas para pasarla a Access 2007, que es el que tengo en casa, y le tuve que eliminar los campos calculados de las tablas.

http://filebig.net/files/qKXBymw7uF

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas