Access - Recordset guardar cambios

   
Vista:

Recordset guardar cambios

Publicado por Gemelas (22 intervenciones) el 01/10/2011 02:24:48
Hola, encontre un Modulo de clase creado por Jeferson Jimenez ,Cabimas, Venezuela, lo encontré genial.
Intente utilizarlo pero dice que debe modificar su estructura para funcionar con software con estructura de 64 bits.
Si alguien sabe como hacerlo por favor me diga. Voy a copiar aquí el modulo de clase.
Desde ya Gracias

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder