Problema para ver ficha de un registro seleccionado

Dudas sobre código
JoseraGR
Nivel 1
Mensajes: 14
Registrado: Jue Jul 30, 2020 12:45 pm

Problema para ver ficha de un registro seleccionado

Mensajepor JoseraGR » Dom Dic 12, 2021 8:13 pm

Buenas

Ando atascado con el desarrollo de la BD que estoy realizando. El problema es el siguiente:

Realizo la busqueda mediante el filtro indicado en el siguiente formulario:
Pantalla Busqueda-1.PNG

Todo correcto hasta aqui, pero el problema lo tengo cuando al seleccionar el registro que quiero ver y pulso el botón 'Ficha modelo'. En ese botón tengo el siguiente código

Código: Seleccionar todo

Private Sub cmdSeleccionFicha_Click()
    'Declaramos variables
    Dim VReferencia As String
    'Obtnenemos el valor del campo Referencia del registro seleccionado
    VReferencia = Me.txtReferencia
    'Cerramos el formulario de busqueda
    DoCmd.Close
    'Abrimos el formulario principal con la ficha del modelo seleccionado mediante Referencia
       DoCmd.OpenForm "F_Principal", acNormal, , "[Referencia] ='" & VReferencia & "'"
End Sub


Se abre la ficha pero el registro lo toma de la consulta que he realizado no me lo busca en la tabla que incluye todos los registros (T_ModeloGeneral), que es lo que me interesa para poder manipular todas las tablas relacionadas con esta.
Lo he intentado haciendo una variación del código anterior por el siguiente:

Código: Seleccionar todo

Private Sub cmdSeleccionFicha_Click()
    'Declaramos variables
    Dim VReferencia As String
    'Obtnenemos el valor del campo Referencia del registro seleccionado
    VReferencia = Me.txtReferencia
    'Cerramos el formulario de busqueda
    DoCmd.Close
    'Buscamos el registro seleccionado en la tabla modelo generico
    DoCmd.SearchForRecord acDataTable, "T_ModeloGeneral", acFirst, "[Referencia] ='" & VReferencia & "'"
    'Abrimos el formulario principal con la ficha del modelo seleccionado mediante Referencia
    DoCmd.OpenForm "F_Principal", acNormal
End Sub

pero cuando se ejecuta me da el error que la tabla T_ModeloGeneral no esta abierta.

¿Hay alguna forma de poder realzarlo de la forma que quiero?

Un saludo y gracias

pitxiku
VIP
Reto02
Mensajes: 580
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor pitxiku » Lun Dic 13, 2021 8:02 pm

Si ese formulario "F_Principal" tiene en su propiedad Origen del registro esa consulta, no obtendrás registros de oro sitio. Si quieres buscar en todos los registros de la tabla "T_ModeloGeneral", tendrás que asignar ese origen al formulario, o crear uno nuevo y usarlo en ese código.

JoseraGR
Nivel 1
Mensajes: 14
Registrado: Jue Jul 30, 2020 12:45 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor JoseraGR » Mar Dic 14, 2021 8:58 pm

Buenas

Tanto en el formulario "F_Principal" como en el "F_MenuBusqueda" el origen del registro es la tabla T_ModeloGeneral".

pitxiku
VIP
Reto02
Mensajes: 580
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor pitxiku » Mié Dic 15, 2021 3:06 pm

Con esta línea:

DoCmd.OpenForm "F_Principal", acNormal, , "[Referencia] ='" & VReferencia & "'"

Estás diciendo que abra el formulario F_Principal, y que filtre los registros de la tabla para que muestre sólo los que tengas la referencia que indicas.

Si necesitas ver todos los registros pero posicionarte en el que tiene esa referencia, en vez de filtrar tendrás que buscar:

- https://docs.microsoft.com/es-es/office ... findrecord

Si tampoco es esto lo que estás buscando, te estoy entendiendo mal y necesito algo más de información o un ejemplo de lo que tienes y qué tiene que aparecer.

JoseraGR
Nivel 1
Mensajes: 14
Registrado: Jue Jul 30, 2020 12:45 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor JoseraGR » Lun Dic 27, 2021 10:20 pm

Buenas
Para explicar mejor el problema que tengo he incluido un archivo de Word donde explico lo que pasa, este es el enlace:

http://www.filebig.net/files/6XqxcwLjTA

Y aqui os añado el código que utilizo en la parte de los botones de navegación por los registros y los cuadros de texto que nos dice en que registro nos encontramos y los números de registro que tenemos.

-. Código del cuadro de texto que indica el numero de registro donde nos encontramos:

Código: Seleccionar todo

Private Sub txtNumeroRegistro_AfterUpdate()
On Error Resume Next ' me ahorro un monton de lieas poniendo solo esta
' posibles errores
' nulo o cero
' Valores negativos
' mayor que el numero de registros
' que no sean numeros
' no me importa que se genere un error
' estan controlaos, lo importante es que no se muestre mensaje
' y no se detenga la ejecucion del codigo
    DoCmd.GoToRecord acDataForm, "F_Principal", acGoTo, txtNumeroRegistro
End Sub


-. Botón registro siguiente

Código: Seleccionar todo

Private Sub cmdRegistroSiguiente_Click()
On Error GoTo Err_Handler

    cmdPrimerRegistro.Enabled = True
    cmdUltimoRegistro.Enabled = True
    cmdRegistroAnterior.Enabled = True
   
   'modify the next line to fit your database
    If Me.CurrentRecord = DCount("Referencia", "T_ModeloGeneral") Then
        cmdUltimoRegistro.Enabled = False
        'cmdRegistroSiguiente.Enabled = False
    End If
    DoCmd.GoToRecord , , acNext
    DoEvents

    'Application.Echo True
   
Exit_Handler:
    Exit Sub
   
Err_Handler:
    If Err.Number = 2105 Then
        MsgBox "SE ENCUENTRA EN EL ULTIMO REGISTRO", vbOKOnly + vbInformation
    End If
    Resume Exit_Handler
End Sub


-. Botón último registro

Código: Seleccionar todo

Private Sub cmdUltimoRegistro_Click()
On Error GoTo Err_Handler

    'Application.Echo False

   'modify the next line as appropriate
    'intFileID = DMax("id_item", "aa_DatosRecibidos")
   
    DoCmd.GoToRecord , , acLast
    cmdRegistroAnterior.SetFocus
    cmdPrimerRegistro.Enabled = True
    cmdUltimoRegistro.Enabled = False
   
    'Application.Echo True
   
Exit_Handler:
    Exit Sub
   
Err_Handler:
    MsgBox "Error " & Err.Number & " in cmdLast_Click procedure : " & Err.Description, vbOKOnly + vbCritical
    Resume Exit_Handler
   
End Sub


Espero que con esto se aclare un poco el problema que indico.

Un saludo y gracias.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1390
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor Sveinbjorn » Mar Dic 28, 2021 12:50 pm

Hola, por lo que yo veo, el problema está en cómo rellenas el cuadro de texto con el número total de registros, que supongo lo haces contando los registros que tienes en la tabla.

Cuando abres el formulario filtrado (con DoCmd.OpenForm "F_Principal", acNormal, , "[Referencia] ='" & VReferencia & "'"), en la tabla sigues teniendo todos los registros, pero en el formulario solo tienes el registro o registros que cumplen esa condición, por eso te da la impresión de que no funciona correctamente.

La solución pasa por rellenar ese cuadro de texto contando solo los registros activos, por ejemplo añadiendo el mismo filtro al DCount()
Sveinbjorn El Rojo

JoseraGR
Nivel 1
Mensajes: 14
Registrado: Jue Jul 30, 2020 12:45 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor JoseraGR » Mar Dic 28, 2021 6:41 pm

Buenas

Por aclararme un poco, DCount nos devuelve cuantos registros cumple el criterio que se le indica. He hecho una pequeña prueba y efectivamente solo me devuelve 1.
Llevo toda la mañana indagando en la ayuda de VBA de Microsoft, y creo que la opción seria identificar que posición ocupa en la tabla el registro, en el ejemplo que puse en el Word era el registro 16, y luego mostrar en el formulario F_Principal el registro 16, indicando que nos encontramos en ese "Registro 16 de 54" como en el ejemplo.
Pero no doy que método puede darme la posición que ocupa el registro seleccionado en la tabla. Lo he intentado con CurrentRecord, pero o bien no atino a como ponerlo o no sirve realmente. Y luego como mostrarlo en el formulario.
Bueno sigo en ello mientras a alguno me puede dar pistas de como hacerlo.

Un saludo.

JoseraGR
Nivel 1
Mensajes: 14
Registrado: Jue Jul 30, 2020 12:45 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor JoseraGR » Sab Ene 08, 2022 2:43 pm

Hola
Aqui seguimos indagando en el problema. Creo que este es originado por la formula en la que están diseñados los formularios.
El que realiza la búsqueda con el filtro es un formulario continuo (propiedad vista de formulario), mientras el que muestra el registro que hemos seleccionado en la búsqueda es un formulario único.

Cuando lo selecciono y pulso mostrar ficha se abre perfectamente en el formulario único, pero ya no realiza correctamente desde ese formulario la navegación por todos los registros de la tabla, solamente me muestra el seleccionado y nuevo registro.

He probado varias cosas sin resultado ya no se que hacer. Alguna idea??.

Un saludo

P.D.: Si es necesario cuelgo un ejemplo o la BD.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1390
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor Sveinbjorn » Mar Ene 11, 2022 4:58 pm

Si el segundo formulario no te navega por todos los registros que tengas en el primer formulario puede ser por una de estas causas:
.-Que tengan un origen de datos distinto
.-Que lo abras filtrado

El que sean continuos o único no es el problema.

Igual no es mala idea que subas un ejemplo o una copia simplificada de la BD, porque me da la impresión de que haces "algo" en algún momento que no estás contando...
Sveinbjorn El Rojo

JoseraGR
Nivel 1
Mensajes: 14
Registrado: Jue Jul 30, 2020 12:45 pm

Re: Problema para ver ficha de un registro seleccionado

Mensajepor JoseraGR » Mié Ene 12, 2022 8:49 pm

Buenas
Gracias Sveinbjorn, al final mirando un montón de sitios en YouTube y varias web he dado con el problema y ya me funciona correctamente como yo quería.

Os explico aqui la solución por si a alguien alguna vez desea hacer lo mismo. La solución ha sido utilizando la propiedad OpenArgs en el método DoCmd.OpenForm, y variando el código tanto del botón mostrar ficha del formulario de búsqueda, como el código del formulario principal en el evento al abrir. Os pongo aqui ambos códigos:

Botón Seleccion ficha

Código: Seleccionar todo

Private Sub cmdSeleccionFicha_Click()
    'Abrimos el formulario principal con la ficha del modelo seleccionado mediante Referencia
    DoCmd.OpenForm "F_Principal", acNormal, , , , , Me.vtxtReferencia
    'Cerramos el formulario de busqueda
    DoCmd.Close acForm, "F_MenuBusqueda", acSaveNo
   
End Sub


Evento al abrir Formulario principal

Código: Seleccionar todo

Private Sub Form_Open(Cancel As Integer)
    'Declaramos variables
    Dim vReferencia As String
    'Comprobamos que la propiedad OpenArgs
    If IsNull(Me.OpenArgs) Then
        'Nos situamos para introducir un registro nuevo
        DoCmd.RunCommand acCmdRecordsGoToNew
        'Desactivamos al cargar el formulario las paginas Digital y sonido
        Me.FichasPrincipal.Pages(2).Enabled = False
        Me.FichasPrincipal.Pages(3).Enabled = False
        Me.FichasPrincipal.Pages(4).Enabled = False
    Else
        'Guardamos el contenido de la propiedad OpenArgs en la en la variable vReferencia
        vReferencia = Me.OpenArgs
        'Situamos el foco en el cuadro de texto referencia
        DoCmd.GoToControl "txtReferencia"
        'Buscamos el registro que coincida con el valor de vReferencia
        DoCmd.FindRecord vReferencia
    End If

End Sub


Gracias por vuestra ayuda.


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados