Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Προγραμματισμός και μαθηματικά ακριβείας!
Γεια σας, Η συνημμένη βάση (http://www.ms-office.gr/forum/access...io-pinaka.html) δημιουργήθηκε χάρις στην εξαιρετική βοήθεια του φίλου του Forum Γιώργου(Kapetang). Στη βάση αυτή, αφού συμπληρώσουμε τα απαιτούμενα πεδία της φορμας, μπορούμε να υπολογίσουμε και να έχουμε στον πίνακα τις δόσεις μας ανά μήνα ή 2μηνο κλπ. Εργαζόμενος πάνω σε αυτή , διαπίστωσα ότι, σε ορισμένες περιπτώσεις, δεν υπάρχει ακρίβεια δεκαδικών μονάδων. Για παράδειγμα: Παράθεση:
να είναι απολύτως ακριβείς και να μην υπολείπονται ούτε στο ένα λεπτό, θα παρακαλούσα για τη τη βοήθειά σας: Είναι δυνατόν κατά τον υπολογισμό των εκάστοτε δόσεων το υπολειπόμενο λεπτό (ή λεπτά) να τίθεται(-νται) στο ποσό της τελευταίας δόσης? (Έτσι, όλες οι δόσεις μας θα είναι ισόποσες πλην της τελευταίας) |
#2
| |||
| |||
Καλησπέρα Φίλε Δημήτρη άλλαξε τον παλιό κώδικα του κουμπιού με τον: Κώδικας: Private Sub cmdAdd_Click() Dim rs As DAO.Recordset, dt As Date, i As Long, sum As Double Dim vPeriodos As Variant, strC As String, k As Long On Error GoTo errHandler 'Ελέγχος καταχώρησης αναγκαίων στοιχείων If Not ((IsDate(Me.DAYEX) And _ Nz(Me.KATIGORIAEX, "") <> "") And _ (Nz(Me.KATASTASIEX, "") <> "") And _ IsNumeric(Me.ARXEXODA) And _ IsNumeric(Me.SYNDOSEON) And _ (Nz(Me.PERIODOS, "") <> "") And _ IsNumeric(Me.Prokatavoli)) Then MsgBox "Σε κάποια πεδία δε δόθηκαν κατάλληλες τιμές" Exit Sub End If 'Αποτροπή πολλαπλών καταχωρήσεων strC = "DAYEX=#" & Format(Me.DAYEX, "m/d/yyyy") & "# And " & _ "KATIGORIAEX='" & Me.KATIGORIAEX & "' And " & _ "KATASTASIEX='" & Me.KATASTASIEX & "' AND ARXEXODA=" & _ Replace(Me.ARXEXODA, ",", ".") & " And " & _ "SYNDOSEON=" & Me.SYNDOSEON & " AND PERIODOS='" & Me.PERIODOS & "' And " & _ "TREXDOSI=1 AND Prokatavoli=" & Replace(Me.Prokatavoli, ",", ".") If DCount("*", "tblExoda", strC) Then MsgBox "Τα στοιχεία είναι ήδη καταχωρημένα" Exit Sub End If 'Καταχώρηση δεδομένων vPeriodos = Array(1, 2, 3, 6, 12) k = Me.PERIODOS.ListIndex Set rs = CurrentDb.OpenRecordset("tblExoda") dt = CDate(Me.DAYEX) sum = Me.Prokatavoli For i = 1 To Me.SYNDOSEON rs.AddNew rs!DAYEX = DateAdd("m", vPeriodos(k) * (i - 1), dt) If i = Me.SYNDOSEON Then rs!POSOEX = Me.ARXEXODA - sum Else rs!POSOEX = Round((Me.ARXEXODA - Me.Prokatavoli) / Me.SYNDOSEON, 2) sum = sum + Round((Me.ARXEXODA - Me.Prokatavoli) / Me.SYNDOSEON, 2) End If rs!KATIGORIAEX = Me.KATIGORIAEX rs!KATASTASIEX = Me.KATASTASIEX rs!ARXEXODA = Me.ARXEXODA rs!SYNDOSEON = Me.SYNDOSEON rs!PERIODOS = Me.PERIODOS rs!TREXDOSI = i rs!Prokatavoli = Me.Prokatavoli rs!PERIGRAFIEX = Me.PERIGRAFIEX rs.Update Next MsgBox "Η προσθήκη των εγγραφών ολοκληρώθηκε" Exit Sub errHandler: MsgBox Err.Description, vbCritical, "Error #" & Err.Number End Sub |
#3
| |||
| |||
Καλησπέρα. Γιώργο, καταπληκτικά!!! Ο κώδικας μού δίνει ακριβώς αυτό που ήθελα. Αν μπορείς, ήθελα κάτι ακόμη: Στον πίνακα έχω προσθέσει και ένα υπολογιζόμενο πεδίο "SYNYPOLOIPO", το οποίο μού δίνει σε κάθε δόση το υπολειπόμενο ποσό. Αλλά με την παράσταση που έχω βάλει (Στρογγυλεμένη(([PosoDoseon])-(([TREXDOSI])*[POSOEX]);2)), δεν βγάζω υπόλοιπο μηδέν(0) στην τελευταία δόση! Έχεις καμιά ιδέα για το ποιά παράσταση θα βάλω στο υπολογιζόμενο πεδίο για να μού βγάζει στην τελευταία δόση ως υπόλοιπο μηδέν (0), που έιναι και το σωστό? Σε υπερευχαριστώ για τη βοήθειά σου... |
#4
| |||
| |||
Καλησπέρα Για τη διαμόρφωση του τύπου θα πρέπει να λάβουμε υπόψη μας. 1) Οι δόσεις, εκτός από την τελευταία, είναι ίσες με: Round(([ARXEXODA]-[Prokatavoli])/[SYNDOSEON];2) . 2) Η τελευταία δόση προκύπτει από την αφαίρεση του αθροίσματος των προηγούμενων δόσεων από το ποσό: [ARXEXODA]-[Prokatavoli] και κατά κανόνα διαφέρει από τις προηγούμενες. Με βάση τα παραπάνω θα πρότεινα να δοκιμάσεις τον τύπο: [ARXEXODA]-[Prokatavoli]-Round(([ARXEXODA]-[Prokatavoli])/[SYNDOSEON];2)*([TREXDOSI]-1)-[POSOEX] |
#5
| |||
| |||
Καλησπέρα Φίλε Γιώργο, σε υπερευχαριστώ και πάλι για τη βοήθειά σου. Η πρόταση σου δοκιμάστηκε στη βάση μου και λειτουργεί άψογα! Καλή συνέχεια... |
#6
| |||
| |||
Φίλε Δημήτρη να είσαι καλά!
|
#7
| |||
| |||
Καλησπέρα σε όλους. Παρακαλώ για την πολυτιμη βοηθεια σας. Θα μπορούσατε να με βοηθήσετε να προσθέσω α) την επιλογη εβδομαδιαία στην περίοδο δόσεων και β) να επιλέγω σταθερα την ημέρα της εβδομάδας π.χ κάθε Σάββατο Ευχαριστώ πολύ |
#8
| |||
| |||
Καλημέρα Γιάννη, κάνε δοκιμές στο συνημμένο. Η μέρα καταβολής των δόσεων συμπίπτει με τη μέρα της ημερομηνίας που καταχωρούμε στο πεδίο [Ημερομηνία]. Συνεπώς, αν θέλουμε οι δόσεις να καταβάλλονται κάθε «Σάββατο», θα πρέπει η ημερομηνία που καταχωρούμε στο πεδίο [Ημερομηνία] να είναι «Σάββατο». |
#9
| |||
| |||
Γιώργο σε ευχαριστώ πολύ για όλα!! Ειναι αυτο που ζητούσα. |
#10
| |||
| |||
Να είσαι καλά Γιάννη και καλή συνέχεια.
|
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Η ώρα είναι 14:49.