Dudas sobre el uso de formularios y cargar datos utilizando Microsoft Access
Hola! Te cuento.. Tengo un formulario de una factura, y cuando necesito cargar a la misma un cliente que no esta en la lista, desde la misma factura abro un formulario para cargar los datos del nuevo cliente, al volver a la factura no vuelve al registro que yo estaba cargando, se va al primer registro ( la primer factura cargada). ¿Qué podría hacer para que al regresar a la factura desde el formulario de clientes se posicione en la que estaba cargando? Espero haberme explicado.. Desde ya muchas gracias! Saludos!
Primero que nada, eso no tendría que suceder si la factura queda abierta mientras cargás el cliente, por lo que deduzco que se cierra al abrir el otro formulario. Si es así, te diría que la dejes abierta, así no sería tanto lio... De todo modos acá te paso un truco para el formulario se abra en el mismo registro que estaba cuando se cerró: No existe una opción por defecto, pero se puede añadir un pequeño código para que se guarde el ultimo registro visualizado y Access vuelva a el al ser abierto el mismo formulario. Los pasos a seguir son: 1º) Crear una tabla auxiliar (que aquí vamos a llamar Acceso) para almacenar el ultimo registro visualizado en el formulario. Contendrá dos campos, uno (que llamaremos CampoClave para guardar el nombre del campo clave principal de la tabla asociada al formulario y otro para guardar el valor de dicha clave: Campos tipo CampoClave Texto (Clave principal) Valor Texto El campo CampoClave se ha descrito como de tipo texto pero puede ser también de tipo numérico o autonumérico. Ello dependerá del tipo de campo que sea el campo clave principal de la tabla asociada al formulario. En este ejemplo suponemos que ese campo es de tipo texto y que su nombre es ClaveFormul. En cada formulario deberemos tomar nota del nombre de ese campo y de su tipo. 2º) Añadir el siguiente código al evento Al descargar del formulario deseado: Private Sub Form_Unload(Cancel As Integer) Dim Valor As String If IsNull(Me![ClaveFormul]) Then ' Cambiar [ClaveFormul] por el nombre del campo clave principal Valor = 'acNewRec' Else Valor = Me![ClaveFormul] ' Cambiar [ClaveFormul] por el nombre del campo clave principal End If Set rst = db.OpenRecordset(Sql, dbOpenDynaset) If rst.RecordCount = 0 Then rst.AddNew rst![CampoClave] = Me.Name rst![Valor] = Valor rst.Update Else rst.Edit rst![Valor] = Valor rst.Update End If rst.Close End Sub 3º) Añadir el siguiente código al evento Al cargar del formulario, el cual efectúa una búsqueda en la tabla Acceso del campo clave del registro abierto, toma el valor de la clave y se coloca en el: Private Sub Form_Load() Set db = CurrentDb Sql = 'SELECT * FROM Acceso WHERE CampoClave = '' & Me.Name & ''' Set rst = db.OpenRecordset(Sql, dbOpenSnapshot) If rst.RecordCount > 0 Then If Not IsNull(rst![Valor]) Then If rst!Valor <> 'acNewRec' Then Set rstFrm = Me.RecordsetClone ' Si el campo clave principal ('ClaveFormul' en este ejemplo) es de tipo texto, ' la instruccion a incluir seria esta: rstFrm.FindFirst '[ClaveFormul] = '' & rst![Valor] & ''' ' Cambiar [ClaveFormul] por el nombre del campo clave principal ' Si el campo clave principal ('ClaveFormul' en este ejemplo) es de tipo ' numerico, la instruccion seria: ' rstFrm.FindFirst '[ClaveFormul] = ' & rst![Valor] ' Cambiar [ClaveFormul] por el nombre del campo clave principal If Not rstFrm.NoMatch Then Me.Bookmark = rstFrm.Bookmark End If rstFrm.Close Else DoCmd.GoToRecord , acNewRec End If End If End If rst.Close End Sub No hay que olvidar que no solo hay que incluir el código, sino asegurarnos que en la hoja de propiedades del formulario quedan marcados ambos eventos: Al cargar y Al descargar con [Procedimiento de evento]. 4º) Estando abierto el formulario en modo de diseño, pulsar el botón Código y añadir en la sección Declaraciones el siguiente código: Option Compare Database Option Explicit Dim db As Database Dim rst As Recordset Dim rstFrm As Recordset Dim Sql As String Las dos primeras lineas ya estarán escritas al acceder a esa sección. Lo mismo ocurre con las lineas primera y ultima del código de los eventos. Simplemente hay que procurar no repetirlas. Por cualquier consulta, no dudes en preguntar.