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 |
Η ώρα είναι 02:56.