| Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
| |
|
#1
| |||
| |||
|
Γεια σας Στη δειγματική Βάση που ανέβασα, υπάρχουν ένας πίνακας [tblX] και τρεις ανεξάρτητες φόρμες (frmA, frmB, frmC) . Απο τις φόρμες καταχωρίζονται δεδομένα στον πίνακα. Στον πίνακα επιτρέπεται η καταχώρηση αρνητικών τιμών. Πολλες φορές το αλγεβρικό άθροισμα στο πεδίο [POSO] για μια καταχώρηση που είναι ίδια στο πεδίο [KATASTIMA] είναι αρνητικό (<0). Για παράδειγμα, όπως φαίνεται στον πίνακα της βάσης που ανέβασα, για το "ΚΑΤΑΣΤΗΜΑ4" (τρεις εγγραφές) το αλγεβρικό άθροισμα ισούται με -300: (100-300-100) = -300). Είναι δυνατόν, όταν καταχωρίζουμε κάποια εγγραφή στον πίνακα διαμέσου των φορμών και προκύπτει αρνητικό αλγεβρικό άθροισμα για ίδια εγγραφή του πεδίου [KATASTIMA], τότε να μην επιτρέπεται η καταχώρηση της τρέχουσας εγγραφής και να εμφανίζεται σχετικό μήνυμα? Σας ευχαριστώ εκ των προτέρων Τελευταία επεξεργασία από το χρήστη dimitrisp : 27-02-18 στις 23:49. |
|
#2
| |||
| |||
|
Καλημέρα σε όλους. Δημήτρη μπορείς να δοκιμάσεις το εξής πχ για τη φόρμα "frmA" Κώδικας: Option Compare Database
Option Explicit
Private Sub cboKatastimaA_AfterUpdate()
DoCmd.SetWarnings False
Dim CRITERIA As String
CRITERIA = DSum("POSO", "tblX", "KATASTIMA='" & Me.cboKatastimaA & "'") + Me.POSOA
If Me.POSOA <> 0 And CRITERIA >= 0 Then
DoCmd.RunSQL "INSERT INTO tblX (POSO,KATASTIMA ) VALUES (POSOB,cboKatastimaA )"
Else
MsgBox "Το άθροισμα των ποσών για το κατάστημα είναι αρνητικό!!", vbCritical, "Προσοχή!!"
Me.POSOA.SetFocus
Exit Sub
End If
DoCmd.SetWarnings True
End Sub
|
|
#3
| |||
| |||
|
Καλησπέρα Νάσο, σε υπερευχαριστώ για την πρότασή σου. Ο κώδικας που πρότεινες λειτουργεί άψογα! Είναι ακριβώς αυτό που ήθελα να πραγματοποιήσω. Νάσαι καλά... Καλή συνέχεια... |
|
#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 |
Η ώρα είναι 12:48.


Υβριδικός τρόπος

