| Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#4
| |||
| |||
|
Γεια σας και από μένα! Αν και ίσως να αποτελεί υπερβολή για την περίπτωσή σου Δημήτρη, η πρότασή μου δράττει την ευκαιρία ώστε να ανοίξει το θέμα των συναλλαγών (Transactions) οι οποίες αποτελούν τον πλέον σίγουρο τρόπο διασφάλισης των δεδομένων και των κανόνων μιας εφαρμογής. Όποια αλλαγή και να γίνει μετά την εντολή BeginTrans (Έναρξη συναλλαγής), μπορεί να αναιρεθεί πλήρως από την εντολή Rollback ή να αποθηκευτεί μόνιμα από την εντολή CommitTrans. Έτσι, η καταχώρηση της τιμής για ένα κατάστημα θα μπορούσε να ανατεθεί στην παρακάτω συνάρτηση: Κώδικας: Public Function AppendValue(strKatastima As String, crrPoso As Currency) As Long
Dim WS As dao.Workspace
Dim CDB As dao.Database
Dim lngRet As Long
lngRet= 0
If Len(strKatastima) > 0 Then
Set WS = dao.DBEngine.Workspaces(0)
Set CDB = CurrentDb
On Error GoTo ErrHandler
With WS
'Έναρξη συναλλαγής
.BeginTrans
'Καταχώρηση τιμής
CDB.Execute "INSERT INTO tblX (POSO, KATASTIMA) VALUES (" _
& crrPoso & ", '" & strKatastima & "');", dbFailOnError
'Έλεγχος αθροίσματος
If CDB.OpenRecordset("SELECT SUM([POSO]) AS SumP " _
& "FROM tblX GROUP BY KATASTIMA " _
& "HAVING (KATASTIMA='" & strKatastima & "')")![SumP] < 0 Then
'Αναίρεση αλλαγών λόγω αρνητικού αθροίσματος
.Rollback
lngRet= -1
Else
'Εφαρμογή αλλαγών
.CommitTrans
End If
End With
End If
ExitHere:
'Εκχώρηση επιστρεφόμενης τιμής στη συνάρτηση
AppendValue = lngRet
On Error Resume Next
CDB.Close
WS.Close
Set CDB = Nothing
Set WS = Nothing
Exit Function
ErrHandler:
'Αναίρεση αλλαγών λόγω σφάλματος χρόνου εκτέλεσης
WS.Rollback
'Εκχώρηση τιμής σφάλματος στη συνάρτηση
lngRet= Err.Number
Resume ExitHere
End Function
Κώδικας: Private Sub cboKatastimaA_AfterUpdate()
With Me.POSOA
If IsNull(.Value) Then
MsgBox .ValidationText, vbExclamation
.SetFocus
Exit Sub
End If
End With
With Me.cboKatastimaA
If IsNull(.Value) Then
MsgBox .ValidationText, vbExclamation
.SetFocus
Exit Sub
End If
End With
Dim lngRet As Long
lngRet = AppendValue(Me.cboKatastimaA, Me.POSOA)
If lngRet = 0 Then
MsgBox "Η καταχώρηση των " & FormatCurrency(Me.POSOA) & " ολοκληρώθηκε με επιτυχία!", vbInformation
ElseIf lngRet = -1 Then
'Απόρριψη καταχώρησης λόγω αρνητικού αθροίσματος
MsgBox "Η καταχώρηση απορρίφθηκε!" & vbCrLf _
& "Οδηγεί σε αρνητικό άθροισμα για το κατάστημα " & Me.cboKatastimaA, vbExclamation
Else
'Απόρριψη καταχώρησης λόγω σφάλματος χρόνου εκτέλεσης
MsgBox "Η καταχώρηση απορρίφθηκε λόγω απροσδόκητου σφάλματος!" & vbCrLf & vbCrLf _
& "Σφάλμα :" & lngRet & vbCrLf & Error(lngRet), vbExclamation
End If
End Sub
Καλή συνέχεια! |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [Συναρτήσεις] Αποτροπή διπλοκαταχώρησης σε πίνακα EXCEL | ΑΠΟΣΤΟΛΗΣΚ | Excel - Ερωτήσεις / Απαντήσεις | 18 | 11-04-21 23:33 |
| [ Ερωτήματα ] ΕΜΦΑΝΙΣΗ ΑΘΡΟΙΣΜΑΤΟΣ ΑΠΟ ΠΙΝΑΚΑ | Alexandraadami | Access - Ερωτήσεις / Απαντήσεις | 11 | 22-07-15 09:57 |
| Αποτροπή αρνητικών τιμών σε πίνακα και σε φόρμα | smasak | Access - Ερωτήσεις / Απαντήσεις | 7 | 21-04-15 09:53 |
| [Συναρτήσεις] Πρόσθεση αρνητικού αριθμού με θετικό | xristos | Excel - Ερωτήσεις / Απαντήσεις | 3 | 04-02-14 18:19 |
| [Συναρτήσεις] Συνάρτηση υπολογισμού μερικού αθροίσματος | George R | Excel - Ερωτήσεις / Απαντήσεις | 13 | 02-07-13 06:22 |
Η ώρα είναι 17:15.



Θεματικός Τρόπος
