Crear botón de búsqueda avanzado

Hace unos días puse un tema de hacer búsquedas y que esta información se pusiera en unos campos

La respuesta fue buena por que me sirvió mucho.

Pero ahora tengo un problema similar

Como puedo crear una búsqueda: ejemplo

Que me busque los datos que ya se habían puesto anteriormente como se ve en la imagen

Pero como ven en la imagen todos los campos no tienen informacion

Entonces que me busque la informacion según el numero de orden, que me ponga la información en los campos correspondientes y como todavía falta por llenar los demás campos . Entonces lo termino de llenar y que al dar guardar se llene en la misma del numero de orden,

Por que lo hice pero que pasa, que me crea un nuevo registro

Este es el código que tengo en el botón guardar

Gracias por la ayuda ....

Private Sub Comando91_Click()
DoCmd.SetWarnings False
 If Not IsNull(fecha1) And Not IsNull(orden1) And Not IsNull(supervisor1) And Not IsNull(turno1) Then
    DoCmd.RunSQL "Insert into dbo_CapturaDatos (Fecha,Turno,Supervisor,Operario,Maquina,OrdenFabricacion,Referencia,Articulo,Calibre,Metraje_Inicial,HoraRegistro_Metraje_Inicial,Metraje_Final,HoraRegistro_Metraje_Final,Metraje_Total,Duracion_Turno,Observaciones) Values (fecha1,turno1,supervisor1,operario1,maquina1,orden1,referencia1,articulo1,calibre,metrajei1,registro1,metrajef1,registrof1,TotalMetraje,duracion1,observaciones1)"
     MsgBox " Se Guardo el Registro"
 fecha1 = Null
 turno1 = Null
 supervisor1 = Null
 operario1 = Null
 maquina1 = Null
 orden1 = Null
 referencia1 = Null
 articulo1 = Null
 calibre = Null
 metrajei1 = Null
 registro1 = Null
 metrajef1 = Null
 registrof1 = Null
 TotalMetraje = Null
 duracion1 = Null
 observaciones1 = Null
fecha1.SetFocus
fecha1.BackColor = vbWhite
turno1.BackColor = vbWhite
supervisor1.BackColor = vbWhite
orden1.BackColor = vbWhite
Me.registro1.Enabled = True
Me.registrof1.Enabled = True
Else
 If IsNull(fecha1) Then
 fecha1.BackColor = vbRed
Fecha1. SetFocus
ElseIf IsNull(turno1) Then
 turno1.BackColor = vbRed
Turno1. SetFocus
ElseIf IsNull(supervisor1) Then
 supervisor1.BackColor = vbRed
Supervisor1. SetFocus
ElseIf IsNull(orden1) Then
orden1.BackColor = vbRed
orden1.SetFocus
 End If
End If
End Sub

1 Respuesta

Respuesta
2

No dices si el formulario es dependiente de una tabla o es independiente. Primero vamos a suponer que es independiente, y aprovecho una tabla que ya tengo y uso el Idcliente cono si fuera tu NOrden. Supongamos que tengo una tabla Clientes

Puedes ver que hay 8.

Ahora tengo un formulario( repito que independiente), con un cuadro de texto llamado Buscar donde voy a escribir un número( en este caso el 3)

Cuando pulso Enter

Me rellena los cuadros de texto, buscando sus valores en la tabla Clientes en función del Idcliente que he escrito. Relleno los demás cuadros de texto vacíos

Y cuando pulso guardar me crea un registro nuevo en la tabla Clientes ya con esos datos, y además me "borra" los cuadros de texto por si quiero hacer una nueva búsqueda

No le hagas caso al nuevo Idcliente, ya que lo tengo como autonumérico y había borrado registros para que cupieran en la imagen.

El código del formulario es mucho más sencillo de todo lo que has escrito

Private Sub Buscar_AfterUpdate()
IdCliente = Buscar
NombreCliente = DLookup("nombrecliente", "clientes", "idcliente=" & Me.Buscar & "")
NombreContacto = DLookup("nombrecontacto", "clientes", "idcliente=" & Me.Buscar & "")
CargoContacto = DLookup("cargocontacto", "clientes", "idcliente=" & Me.Buscar & "")
Ciudad = DLookup("ciudad", "clientes", "idcliente=" & Me.Buscar & "")
Pais = DLookup("pais", "clientes", "idcliente=" & Me.Buscar & "")
End Sub
Private Sub Guardar_Click()
DoCmd. RunSQL "insert into clientes(nombrecliente, nombrecontacto, cargocontacto, ciudad, pais, fecha, turno, supervisor, operario)values" _
& "(nombrecliente,nombrecontacto,cargocontacto,ciudad,pais,fecha,turno,supervisor,operario)"
For Each Control In Form.Controls
If Control.ControlType = acTextBox Then
Control.value = ""
End If
Next
End Sub

En caso de que quisieras que te pusiera "en blanco" también los combinados sería

For each control in form.controls

If control.controltype=actextbox or control.controltype=accombobox then

control.value=""

end if

next

En el caso de que el formulario fuera dependiente de la tabla, te lo explico en la ampliación, que voy a hacer nuevas imágenes.

Vamos a suponer que usas el formulario para "rellenar" campos que antes no habías rellenado. En este caso, el formulario tiene su origen de registro en la tabla, de forma que cuando lo abro, lógicamente se va al primer registro, pero da igual, en el cuadro Buscar voy a escribir un 5

Cuando pulso Enter, el origen de registros del formulario es aquel de la tabla en que Idcliente=5

Ahora relleno los controles vacíos

Y cuando pulso Guardar, la tabla ya me queda

En este caso el código del formulario es

Private Sub Buscar_AfterUpdate()
Me.RecordSource = "select * from clientes where idcliente=" & Me.Buscar & ""
End Sub
Private Sub Guardar_Click()
If Not Me.NewRecord Then
DoCmd.RunSQL "update clientes set fecha=#" & Me.Fecha & "#,turno=" & Me.Turno & ",supervisor='" & Me.Supervisor & "'," _
& "operario='" & Me.Operario & "' where idcliente=" & Me.Buscar & ""
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas