Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
![]() |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| |||
| |||
![]()
Σκεφτομουν οτι πλεον ειναι απαραιτητο στα ετοιμα προγραμματα να δινεται η δυνατοτητα στον τελικο χρηστη να υπολογιζει καποια πεδια βαση καποιας εκφρασης χρησιμοποιοντας μεταβλητες(πεδια) απο την υπαρχουσα βαση του. Το συνανταμε δε πολυ συχνα σε ERP προγραμματα και πολλα αλλα. Προσπαθησα να φτιαξω μια συναρτηση που βαση καποιας εκφρασης συμμετεχοντας μεσα και μεταβλητες (πεδια) να φερνει το επιθυμητο αποτελεσμα. Δουλευει καλα για τις κλασικες πραξεις αν και θελει να μπουνε και καποιοι ελεγχοι σε περιπτωσεις κενων κλπ. Απλα σαν ιδεα το παραθετω και στην διαρκεια το βελτιωνουμε. Αυτο που θα ηταν βεβαια πολυ χρησιμο θα ηταν αν με καποιο τροπο και εδω μπαινουν τα γερα μολυβια του Forum μπορουσαμε να ενσωματωσουμε και ετοιμες συναρτησεις της Αccess οπως πχ LEN,LOG,IIF,DATE() και αλλες πολλες. Δοκιμαστε και αυτο σαν εκφραση log(A^C)/log(10)+exp(d)+a^2+len(a) .......Δουλευει Ακουω ιδεες. Ελπιζω να βγει κατι καλο απο ολη αυτη την σκεψη Φιλικα Δημητρης Τελευταία επεξεργασία από το χρήστη Dimitris Ch : 17-04-11 στις 14:23. |
#2
| |||
| |||
![]()
Τελικα δουλευει και ετσι μπορουμε πχ να γραψουμε iif(a>d,b,c) Φυσικα το ερωτημα ειναι τι θα κανει αν γραψουμε date() μια και η λογικη ειναι να αντικατασταθει το a με το νουμερο της μεταβλητης (a). Ισως πρεπει να βαλουμε τις μεταβλητες σε [] πχ και να τροποποιησουμε λιγο τον κωδικα. Θα το δω Νομιζω οτι ειναι καλο. Η μεθοδος ομως με φοβιζει σε μεγαλους υπολογισμους πολλων εγγραφών |
#3
| |||
| |||
![]()
Κοιταξτε λιγο τις 2 φορμες της βασης που παραθετω Η μια κανει υπολογισμους που θα δωσουμε στον τυπο (calculate) H αλλη εμφανιζει αποτελεσματα ενος πινακα υπολογιζοντας ενα πεδιο με την μεθοδο που θελει ο χρηστης Δημητρης |
#4
| |||
| |||
![]()
Με καποιες διορθωσεις. Εδω χρησιμοποιουμε κανονικα ονοματα πεδιων του πινακα Στο παραδειγμα αυτο κανω και εκπτωση στην τιμη ειδους βαση των 2 πρωτων ψηφιων του κωδικου Σχολια ομως δεν βλεπω. Δεν το βρισκετε ενδιαφερον.....? Φιλικα Δημητρης |
#5
| |||
| |||
![]()
Δημήτρη πολύ καλό .Δηλαδή η εφαρμογή συμπεριφέρεται λες και δουλεύουμε στο EXCEL Θα ήθελα να σε ρωτήσω αν μπορούμε να προσθέσουμε και αλλά πεδία. |
#6
| |||
| |||
![]() Παράθεση:
Ακομη και στην αλλη φορμα προσθετουμε οσα θελουμε |
#7
| |||
| |||
![]()
Παραθετω ολοκληρωμενο το παραδειγμα πως μπορουμε μέσα σε μια φορμα να εχουμε ενα υπολογιζομενο πεδιο με πραξεις οριζομενες απο τον χρηστη. Ειτε σε μια απλη φορμα (calculate) Eιτε σε μια φορμα που φερνει τιμες και φορμουλες υπολογισμου μεσα απο πινακα. Μέσα στην φορμουλα υπολογισμου που δηλωνουμε (η εχουμε καταχωρημενη στον πινακα δεδομενων), συμμετεχουν ολα τα πεδια της φορμας (η του πινακα που τα δηλωνουμε στην φορμα) και ολες οι συναρτησεις της VBA (Iif,Log,Date() κλπ οπως και αριθμητικα συμβολα +-*/^). Ετσι με αυτον τον τροπο δινουμε κατα καποιον τροπο την δυνατοτητα στον τελικο χρηστη να χρησιμοποιησει μια μορφη προγραμματισμου η παραμετροποιησης οπως αυτος την χρειαζεται. Εδω ανακαλυψα και την χρησιμοτητα της συναρτησης Εval την οποια αγνοουσα. ![]() Τελικα μαθαινω ψαχνοντας. Ελπιζω να σας φανει χρησιμο ως παραδειγμα Φιλικα Δημητρης |
#8
| ||||
| ||||
![]()
Καλημέρα Δημήτρη! Έχουμε πολύ δουλειά μπροστά μας μ αυτό που ξεκίνησες ![]() Στο σημείο αυτό θα ήθελα να προσθέσω κι εγώ ένα λιθαράκι με τη χρήση του αντικειμένου WizHook (βλ. συνημμένο). Το WizHook δεν υποστηρίζεται επίσημα, υπάρχει όμως σε όλες τις εκδόσεις Access ξεκινώντας από την Acc 2000. Ωστόσο μπορεί να βρει κανείς σχετική βοήθεια που όμως βασίζεται στα πειράματα του εκάστοτε συγγραφέα. Με τον τρόπο αυτό δεν είναι αναγκαία η χρήση αγκυλών "[ ]" στο πεδίο όπου πληκτρολογείται η έκφραση πχ: Η έκφραση στο πεδίο EQUATION είναι: "iif(a>d,date(),log(a^c))+exp(d)+d*b+c+1.6" Στο υπολογισμένο πεδίο έχουμε τον τύπο: =calc([EQUATION]) Στη λειτουργική μονάδα της φόρμας: Κώδικας: Option Compare Database Option Explicit Function Evaluate(mystr As String) As Variant Dim C As String While InStr(1, mystr, "[", 0) > 0 C = Mid(mystr, InStr(1, mystr, "[", 0), InStr(1, mystr, "]", 0) - InStr(1, mystr, "[", 0) + 1) mystr = Replace(mystr, C, Me.Controls(C).Value) Wend Evaluate = Eval(mystr) End Function Function Calc(strInput As String) As Variant Dim strOutput As String, x, Parse_Flags As Long strOutput = "" Parse_Flags = 16& WizHook.Key = 51488399 If WizHook.TranslateExpression(strInput, strOutput, Parse_Flags, 0&) = True Then x = Evaluate(strOutput) Calc = x Else Calc = "???" End If End Function Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Η ώρα είναι 20:58.