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
'********************************************************************************************