Guardar Datos a la Tabla . ? Form Access Como en VB

Te gustaria un Form en Access, al cual pudieras tratar como los Form de VB ..?
que detectara cuando un registro a cambiado y/o se ha añadido nuevo......
 
 
***  EL CODIGO   (EN UN MODULO CLASE)   ***
 
Option Compare Database
'***************************************************************
'&                                                            &*
'&                                                            &*
'&                                                            &*
'&                                                            &*
'&               Jefferson Jimenez (JJJT)                     &*
'&                 Cabimas - Venezuela                        &*
'&                    Julio - 2010                            &*
'&                                                            &*
'&                                                            &*
'&                                                            &*
'&                                                            &*
'&                                                            &*
'***************************************************************
Option Explicit
'Declaramos al API que me servira para detectar la tecla pulsada
Private Declare Function GetAsyncKeyState _
                                    Lib "user32" ( _
                                    ByVal vKey As Long) As Integer
'Declaro las Variables
Dim WithEvents frm                  As Form
Dim Detectar                        As Long
'Al llamar la funcion
Function GuardaCambios(frmActivo As Form)
    Set frm = frmActivo 'Establezco el Form
    Set frm.Recordset = CurrentDb.OpenRecordset(frm.RecordSource, dbOpenDynaset) 'Me cargo la ruta de Origen
    DBEngine.BeginTrans 'inicio una transacción nueva, pero desconectada como Unidad
    With frm
        .Modal = True
        .Caption = .Caption & "           ""F8:Deshacer""          y            ""F9:Guardar"""
        .TimerInterval = 10 'le paso el tiempo
        .OnCurrent = "[Event Procedure]" 'Al producirse el evento
        .AfterDelConfirm = "[Event Procedure]"
        .AfterInsert = "[Event Procedure]"
        .AfterUpdate = "[Event Procedure]"
        .OnUnload = "[Event Procedure]"
        .OnTimer = "[Event Procedure]"
        .OnDirty = "[Event Procedure]"
    End With
   
End Function
Private Sub frm_Unload(Cancel As Integer)
With DBEngine
 If Detectar > 0 Then 'Si la variable se ha modificado
    Dim Pr As Long
     Pr = MsgBox("Se ha modificado o agregado un registro, desea guardar..?", vbYesNoCancel + vbDefaultButton1, "Guardar")
      Select Case Pr
          Case 6
               .CommitTrans 'Guardo los cambios
               .Idle 'Si es muy grande la BD.. Por si acaso
          Case 7
               .Rollback 'Lo elimino
          Case Else
               Cancel = True 'Me devuelvo
       End Select
  Else
    .Rollback 'Si sale intespectivamente lo elimino
  End If
End With
End Sub
'Creo los Eventos del Formulario
Private Sub frm_Timer()
    Dim i As Long
    'para los 255 códigos Ascii
    For i = 0 To 255
        'si se ha pulsado una tecla la APi devuelve -32737
        If GetAsyncKeyState(i) = -32767 Then
           Select Case i
            Case 120 ' Si se pulsa F9
                frm.Dirty = False 'Como voy a guardar le indico al Form
                   With DBEngine
                        .CommitTrans 'Guardo los cambios
                        .Idle 'Si es muy grande la BD.. Por si acaso
                        .BeginTrans 'Sigo conectado
                    End With
                  Detectar = 0 'Le indico a la variable que no ha pasado nada
              MsgBox "se han guardado el registro", vbInformation, "Ok"
            Case 119 'Si se pulsa F8
                frm.Undo 'Deshago todo en el form y lo devuelvo hasta la ultima modificacion
                With DBEngine
                     .Rollback 'Lo elimino
                     '.Idle
                     .BeginTrans 'sigo conectado
                End With
             Detectar = 0 'Le indico a la variable que no ha pasado nada
           End Select
        End If
    Next i
End Sub
Private Sub frm_AfterUpdate()
    Detectar = 1 'Si detecto algo se lo paso a la variable
End Sub
Private Sub frm_AfterInsert()
    Detectar = 1 'Si detecto algo se lo paso a la variable
End Sub
Private Sub frm_Current()
If Detectar = 1 Then
    Dim Pr As Long
     Pr = MsgBox("Se ha modificado o agregado el registro anterior, desea guardarlo..?", vbYesNo + vbDefaultButton1, "Guardar")
      Select Case Pr
            Case 6
                frm.Dirty = False 'Como voy a guardar le indico al Form
                   With DBEngine
                        .CommitTrans 'Guardo los cambios
                        .Idle 'Si es muy grande la BD.. Por si acaso
                        .BeginTrans 'Sigo conectado
                    End With
                  Detectar = 0 'Le indico a la variable que no ha pasado nada
              MsgBox "se han guardado el registro", vbInformation, "Ok"
            Case 7
                frm.Undo 'Deshago todo en el form y lo devuelvo hasta la ultima modificacion
                With DBEngine
                     .Rollback 'Lo elimino
                     '.Idle
                     .BeginTrans 'sigo conectado
                End With
             Detectar = 0 'Le indico a la variable que no ha pasado nada
     End Select
End If
End Sub
Private Sub frm_Dirty(Cancel As Integer)
Detectar = 1 'Si detecto algo se lo paso a la variable
End Sub
'********************************************************************************************
'Para Usarlo :
'Crea un Modulo Clase, Pega este Codigo y dale por Nombre ClsJJJT_FDes
'En el Formulario que elijas, declara este Modulo Clase
'
'  Option Compare Database
'  Private MiFrm As New ClsJJJT_FDes
'
'
'     Private Sub Form_Load()
'          MiFrm.GuardaCambios Me
'     End Sub
'********************************************************************************************
SelectionFile type iconFile nameDescriptionSizeRevisionTimeUser
ċ

Descargar
Descargue el Ejemplo  187 kb v. 1 5 jul. 2010 20:02 Jefferson Jimenez
Comments