Necesito información para modificar registros mediante formularios con una aplicación en access

Tengo una aplicación hecha en access para la cual hice 3 formularios uno seria por el cual arranco y exploro los registros llamado "ficha", el cual tiene 2 botones que conducen a otros 2 formularios uno es para la alta de registros que anda perfecto y el otro para la modificación de registro (llamado "modificacion"), el tema es que cuando apretó desde el formulario principal el botón modificar registro, me abre el formulario "modificacion" posicionado en el primer registro de la base de datos y yo en realidad quiero que me aparezca el registro que elegí o que estoy parado en el formulario "ficha". Y probé de varias maneras y no puedo enganchar la manera correcta. Te paso el código del formulario "modificacion":
Private Sub Form_Open(Cancel As Integer)
    campo_id_juicio = Form_ficha.id_juicio
    campo_dependencia = Form_ficha.dependencia
    campo_titular = Form_ficha.titular
    campo_fecha = Form_ficha.fecha
    campo_hora = Form_ficha.hora
    campo_au_tran = Form_ficha.au_tran
    campo_ipp_tran = Form_ficha.ipp_tran
    campo_au_ley13943 = Form_ficha.au_ley13943
    campo_ipp_ley13943 = Form_ficha.ipp_ley13943
End Sub
Private Sub actualiza_registro_Click()
On Error GoTo Err_actualiza_registro_Click
        If campo_dependencia <> "" And campo_titular <> "" And campo_fecha <> "" _
           And campo_hora <> "" And campo_au_tran <> "" And campo_ipp_tran <> "" _
           And campo_au_ley13943 <> "" And campo_ipp_ley13943 <> "" Then
                dependencia = campo_dependencia
                titular = campo_titular
                fecha = campo_fecha
                hora = campo_hora
                au_tran = campo_au_tran
                ipp_tran = campo_ipp_tran
                au_ley13943 = campo_au_ley13943
                ipp_ley13943 = campo_ipp_ley13943
                MsgBox "au_ley13943: " & au_ley13943, vbInformation, "Cartel"
                MsgBox "GRABO!!", , "Cartel"
            DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        Else
                MsgBox "Debe completar TODOS los campos", , "ATENCION...!"
        End If
Exit_actualiza_registro_Click:
    Exit Sub
Err_actualiza_registro_Click:
    MsgBox Err.Description
    Resume Exit_actualiza_registro_Click
End Sub
Y acá te paso el código del botón del formulario "ficha" que apretó para abrir el formulario "modificacion"
Private Sub va_hacia_modificacion_Click()
On Error GoTo Err_va_hacia_modificacion_Click
    DoCmd.OpenForm "modificacion"
Exit_va_hacia_modificacion_Click:
    Exit Sub
Err_va_hacia_modificacion_Click:
    MsgBox Err.Description
    Resume Exit_va_hacia_modificacion_Click
End Sub

1 respuesta

Respuesta
1
Perdona el retraso en mi respuesta.
Llevo un par de semanas atareadísimo y no tengo tiempo de entrar por aquí.
Dime si ya has resuelto el problema. Sino mañana intento verlo.
Lo dicho, perdona por no contestarte antes.
Hola, gracias por contestarme, todavía NO lo he resuelto!
Gracias
Lo que creo que resolvería tu problema es que al abrir el formulario "modificación" seleccionases sólo el registro que tienes marcado en el formulario 'ficha'.
Para ello, modifica y ajusta este código:
Private Sub va_hacia_modificacion_Click()
    dim txtWhere as string
    txtWhere = "id_juicio=" & forms$("ficha").fields("id_juicio") ' Supongo que es un número y clave única
    DoCmd.OpenForm "modificacion", acNormal,,txtWhere
End Sub
Ese código es suficiente si el campo 'id_juicio' es una clave única (que no se puede repetir).
Si no fuese único, tendrías que añadir más partes a la cláusula "where". Sería algo así:
    txtWhere = "id_juicio=" & forms$("ficha").fields("id_juicio") ' Supongo que es un número y clave única
    txtWhere = txtWhere & " and dependencia='" & forms$("ficha").fields("dependencia") & "'" ' Suponiendo que es un texto
    txtWhere = txtWhere & " and titular='" & forms$("ficha").fields("titular") & "'" ' Suponiendo que es un texto
    txtWhere = txtWhere & " and fecha=dateserial(" & format$(forms$("ficha").fields("fecha"),"yyyy,mm,dd") & ")" ' Suponiendo que es una fecha
    ...
id_juicio es clave única y le puse ese código que me pasaste y me tiro el siguiente error..! "Error definido por la aplicación o el objeto"
Gracias por tu ayuda!
Saludos
El 'id_juicio' es numérico o de tipo texto. Si fuera de tipo texto habría que ponerlo de esta forma:
txtWhere = "id_juicio='" & forms$("ficha").fields("id_juicio") & "'" ' Clave única tipo texto
Mira a ver si es eso.
No che ! Me hace lo mismo!, me tira el mismo error y te comento que id_juicio es autonumérico y no permite repeticiones...
Perdona, es que no uso mucho esa clausula porque normalmente trabajo modificando la propiedad 'recordsource' del formulario en lugar de usar el parámetro where.
Es posible que falte la palabra reservada 'WHERE'. Sería:
    txtWhere = "WHERE id_juicio=" & forms$("ficha").fields("id_juicio")
A ver si en este intento ya acierto.
Hola, te comento algo que me olvide, en todos los casos que me mandaste me tiro un error de compilación, y si le saco el símbolo $ de forms, compila ok, y después lo pruebo y me tira el error "Error definido por la aplicación o el objeto", con este ultimo código que me mandaste también me tira error..!
 txtWhere = "WHERE id_juicio=" & forms$("ficha").fields("id_juicio")
Gracias nuevamente, saludos!
No sé en qué estaría pensando yo. El "forms" nunca lleva el "$" detrás.
¿Dónde te está dando exactamente el error? ¿Qué mensaje de error te da?
Envíame el procedimiento completo en el que estás poniendo este código; desde el inicio del "Sub ..." hasta el "End Sub". A ver si el problema está en otro sitio.
Hola, mira acá te paso el código del botón que cuando lo accionas te debería pasar al formulario "modificacion"
Private Sub va_hacia_modificacion_Click()
On Error GoTo Err_va_hacia_modificacion_Click
  'este código me lo pasaste vos....
    dim txtWhere as string
    txtWhere = "id_juicio=" & forms("ficha").fields("id_juicio") ' Supongo que es un número y clave única
    DoCmd.OpenForm "modificacion", acNormal,,txtWhere
Exit_va_hacia_modificacion_Click:
    Exit Sub
Err_va_hacia_modificacion_Click:
    MsgBox Err.Description
    Resume Exit_va_hacia_modificacion_Click
End Sub
Y el mensaje de error es el siguiente
"Error definido por la aplicación o el objeto"
Saludos y Gracias
Si quieres enviame una dirección de mail y te envío el programa directamente, no pesa tanto..!
Gracias
El correo que tengo 'con espacio' es [email protected]. Si me mandas algo ahí, avisame por aquí para que lo mire, ya que suelo usar otros correos en los que no cabe casi nada.
Por cierto, envía lo que sea comprimido en 'zip' y no olvides poner quién eres. No sería la primera vez que recibo cosas y no sé ni de quién es ni lo que hay que hacer.
Y por último indicarte que he tenido un gran error. Mea culpa. No sé porqué pensaba que tu consulta era sobre Access y no sobre Visual Basic.
Al leer tu mensaje de hoy me he dado cuenta de ese fallo y, lógicamente, hay diferencias entre el código de uno y del otro.
Si me envías el programa te escribo yo lo que necesitas.
Hola Santiago te envíe el mail, el asunto es "problema de modificación de registro", te recuerdo que el programa se ejecuta desde el formulario "ficha", y cuando me posiciono en un registro y le pongo modificar, me debería abrir el formulario "modificacion" parado en el registro que le envíe desde el formulario principal y así poder modificarlo y guardar el cambio .
Muchas Gracias!
Antonio
Perdona el retraso pero últimamente no tengo tiempo para nada.
Pon este código en el formulario 'ficha' (es para las altas y para las modificaciones):
Private Sub va_hacia_altas_Click()
    On Error Resume Next
    DoCmd.OpenForm "altas"
    DoCmd.GoToRecord acDataForm, "altas", acNewRec
    If Err <> 0 Then MsgBox Err.Description
    On Error GoTo 0
End Sub
Private Sub va_hacia_modificacion_Click()
    Dim txtWhere As String
    txtWhere = "id_juicio=" & Me.id_juicio
    On Error Resume Next
    DoCmd.OpenForm "modificacion", , , txtWhere
    If Err <> 0 Then MsgBox Err.Description
    On Error GoTo 0
End Sub
El formulario de modificaciones no debería permitir agregar registros. Eso lo puedes poner en las propiedades del formulario. Y, por lo mismo, el formulario de altas no debería presentarte los registros que ya existen. Eso lo podrías hacer poniendo una condición que nunca se cumpla al abrirlo, como por ejemplo:
   DoCmd.OpenForm "altas", , , 1=2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas