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

'********************************************************************************************