Ver Mensaje Individual
  #7 (permalink)  
Antiguo 24/11/2005, 09:30
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Ya está

Hola amigos

Seguramente habrá una forma más fácil de hacer lo mismo, pero aquí os pongo la que he encontrado y me funciona.

Hay cuatro bases diferentes:
- Una de los ingresos actuales.
- Otra de los ingresos del histórico (meses anteriores al actual).
- Otra de los gastos.
- Otra de resultados.

He desistido de emplear DSNs.

Y el código es éste, por si a alguien le hace falta:

*****************

'Conexiones y Recordsets
Dim Conecta01 As New Connection
Dim Tabla01 As New Recordset
Dim Conecta02 As New Connection
Dim Tabla02 As New Recordset
Dim Conecta03 As New Connection
Dim Tabla03 As New Recordset
Dim Conecta04 As New Connection
Dim Tabla04 As New Recordset

Dim VAñoMes As String 'Año y Mes. Ejm: 0511
Dim VIngAct As Double 'Ingresos en Base Actual
Dim VIngHis As Double 'Ingresos en Base Histórico
Dim VIngTot As Double 'Para sumatoria de ingresos
Dim VGas As Double 'Gastos
Dim VGasTot As Double 'Para sumatoria de gastos
Dim VRes As Double 'Resultado
Dim VPeríodoVacío As Boolean 'Período Vacío

Private Sub cAUTI_Click()
'INGRESOS BASE ACTUAL:
Tabla01.MoveFirst
Do While Not Tabla01.EOF
If Tabla01!AML <> "" Then
VAñoMes = Tabla01!AML
VIngAct = Tabla01!TEMPRESA
Tabla04.MoveFirst
Do While Not Tabla04.EOF
If Tabla04!AÑOMES = VAñoMes Then
VIngTot = Tabla04!INGRESOS
VIngTot = VIngTot + VIngAct
Tabla04!INGRESOS = VIngTot
Tabla04.Update
Exit Do
Else
Tabla04.MoveNext
End If
Loop
' Tabla04.Close
Else
Tabla01.MoveNext
End If
If Tabla01.EOF = True Then
Exit Sub
Else
Tabla01.MoveNext
End If
Loop
End Sub

Private Sub cCLose_Click()
Tabla01.Close: Set Tabla01 = Nothing
Conecta04.Close: Set Conecta04 = Nothing
Conecta03.Close: Set Conecta03 = Nothing
Conecta02.Close: Set Conecta02 = Nothing
Conecta01.Close: Set Conecta01 = Nothing
End Sub

Private Sub cGASTO_Click()
'GASTOS:
Tabla03.MoveFirst
Do While Not Tabla03.EOF
If Tabla03!AML <> "" Then
VAñoMes = Tabla03!AML
VGas = Tabla03!IMPORTE
Tabla04.MoveFirst
Do While Not Tabla04.EOF
If Tabla04!AÑOMES = VAñoMes Then
VGasTot = Tabla04!GASTOS
VGasTot = VGasTot + VGas
Tabla04!GASTOS = VGasTot
Tabla04.Update
Exit Do
Else
Tabla04.MoveNext
End If
Loop
' Tabla04.Close
Else
Tabla03.MoveNext
End If
If Tabla03.EOF = True Then
Exit Sub
Else
Tabla03.MoveNext
End If
Loop
End Sub

Private Sub cHIST_Click()
'INGRESOS BASE HISTÓRICO:
Tabla02.MoveFirst
Do While Not Tabla02.EOF
If Tabla02!AML <> "" Then
VAñoMes = Tabla02!AML
VIngAct = Tabla02!TEMPRESA
Tabla04.MoveFirst
Do While Not Tabla04.EOF
If Tabla04!AÑOMES = VAñoMes Then
VIngTot = Tabla04!INGRESOS
VIngTot = VIngTot + VIngAct
Tabla04!INGRESOS = VIngTot
Tabla04.Update
Exit Do
Else
Tabla04.MoveNext
End If
Loop
' Tabla04.Close
Else
Tabla02.MoveNext
End If
If Tabla02.EOF = True Then
Exit Sub
Else
Tabla02.MoveNext
End If
Loop
End Sub

Private Sub cRESULTA_Click()
'INGRESOS BASE HISTÓRICO:
Tabla04.MoveFirst
Do While Not Tabla04.EOF
If Tabla04!AÑOMES <> "" Then
VIngTot = Tabla04!INGRESOS
VGasTot = Tabla04!GASTOS
VRes = VIngTot - VGasTot
Tabla04!RESULTA = VRes
Tabla04.Update
End If
Tabla04.MoveNext
Loop
End Sub

Private Sub Form_Load()
'En este procedimiento abro las conexiones
'Y ya de paso dejo a cero la base de los resultados (RES_AST)
'en todos sus registros, para que no se me duplique, por ahora.

'Primera conexión a la Base AUTI (Ingresos de la Base Actual)
cRutaBD01 = "Z:\AUTI\AST\"
vConnectString01 = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=Z:\AUTI\AST\AUTI.mdb; DefaultDir=" & cRutaBD01 & ";" & _
"Uid=Admin;Pwd=esc;"
Conecta01.Open vConnectString01
Cadena01 = "SELECT ID_AVISO, AML, TEMPRESA FROM AVISOS order by ID_AVISO"

'Primera conexión a la Base HIST (Ingresos del Histórico)
cRutaBD02 = "Z:\AUTI\AST\"
vConnectString02 = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=Z:\AUTI\AST\HIST.mdb; DefaultDir=" & cRutaBD01 & ";" & _
"Uid=Admin;Pwd=esc;"
Conecta02.Open vConnectString02
Cadena02 = "SELECT AML, TEMPRESA FROM AVISOS"

'Primera conexión a la Base GAS_AST (Gastos)
cRutaBD03 = "Z:\AUTI\AST\"
vConnectString03 = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=Z:\AUTI\AST\GAS_AST.mdb; DefaultDir=" & cRutaBD01 & ";" & _
"Uid=Admin;Pwd=esc;"
Conecta03.Open vConnectString01
Cadena03 = "SELECT AML, IMPORTE FROM MAYOR"

'Primera conexión a la Base AST_RES (Resultados)
cRutaBD04 = "Z:\AUTI\AST\"
vConnectString04 = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=Z:\AUTI\AST\RES_AST.mdb; DefaultDir=" & cRutaBD04 & ";" & _
"Uid=Admin;Pwd=esc;"
Conecta04.Open vConnectString04
Cadena04 = "SELECT * FROM RESULTA"

Tabla04.Open Cadena04, Conecta04, adOpenKeyset, adLockOptimistic
Tabla03.Open Cadena03, Conecta03, adOpenKeyset, adLockOptimistic
Tabla02.Open Cadena02, Conecta02, adOpenKeyset, adLockOptimistic
Tabla01.Open Cadena01, Conecta01, adOpenKeyset, adLockOptimistic

End Sub

Private Sub Form_Unload(Cancel As Integer)
Screen.MousePointer = vbDefault
End Sub

Private Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)
'Aquí es donde puede colocar el código de control de errores
'Si desea pasar por alto los errores, marque como comentario la siguiente línea
'Si desea detectarlos, agregue código aquí para controlarlos
MsgBox "Data error event hit err:" & Description
End Sub

Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'Esto mostrará la posición de registro actual para este Recordset
datPrimaryRS.Caption = "Record: " & CStr(datPrimaryRS.Recordset.AbsolutePosition)
End Sub

Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'Aquí se coloca el código de validación
'Se llama a este evento cuando ocurre la siguiente acción
Dim bCancel As Boolean

Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select

If bCancel Then adStatus = adStatusCancel
End Sub

Private Sub cmdAdd_Click()
On Error GoTo AddErr
datPrimaryRS.Recordset.AddNew

Exit Sub
AddErr:
MsgBox Err.Description
End Sub

Private Sub cmdDelete_Click()
On Error GoTo DeleteErr
With datPrimaryRS.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
Exit Sub
DeleteErr:
MsgBox Err.Description
End Sub

Private Sub cmdRefresh_Click()
'Esto sólo es necesario en aplicaciones multiusuario
On Error GoTo RefreshErr
datPrimaryRS.Refresh
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

Private Sub cmdUpdate_Click()
On Error GoTo UpdateErr

datPrimaryRS.Recordset.UpdateBatch adAffectAll
Exit Sub
UpdateErr:
MsgBox Err.Description
End Sub

Private Sub cmdClose_Click()
Unload Me
End Sub