Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Yπολογισμός Μαθηματικής Παράστασης (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1089-ypologismos-mathimatikis-parastasis.html)

Dimitris Ch 17-04-11 10:50

Yπολογισμός Μαθηματικής Παράστασης
 
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:33

Τελικα δουλευει και ετσι
μπορουμε πχ να γραψουμε iif(a>d,b,c)
Φυσικα το ερωτημα ειναι τι θα κανει αν γραψουμε date() μια και η λογικη ειναι να αντικατασταθει το a με το νουμερο της μεταβλητης (a).
Ισως πρεπει να βαλουμε τις μεταβλητες σε [] πχ και να τροποποιησουμε λιγο τον κωδικα.
Θα το δω

Νομιζω οτι ειναι καλο. Η μεθοδος ομως με φοβιζει σε μεγαλους υπολογισμους πολλων εγγραφών

Dimitris Ch 17-04-11 15:45

1 Συνημμένο(α)
Κοιταξτε λιγο τις 2 φορμες της βασης που παραθετω
Η μια κανει υπολογισμους που θα δωσουμε στον τυπο (calculate)
H αλλη εμφανιζει αποτελεσματα ενος πινακα υπολογιζοντας ενα πεδιο με την μεθοδο που θελει ο χρηστης

Δημητρης

Dimitris Ch 17-04-11 18:06

1 Συνημμένο(α)
Με καποιες διορθωσεις.
Εδω χρησιμοποιουμε κανονικα ονοματα πεδιων του πινακα
Στο παραδειγμα αυτο κανω και εκπτωση στην τιμη ειδους βαση των 2 πρωτων ψηφιων του κωδικου
Σχολια ομως δεν βλεπω. Δεν το βρισκετε ενδιαφερον.....?

Φιλικα Δημητρης

ΤΖΙΜΗΣ 17-04-11 18:36

Δημήτρη πολύ καλό .Δηλαδή η εφαρμογή συμπεριφέρεται λες και δουλεύουμε στο EXCEL
Θα ήθελα να σε ρωτήσω αν μπορούμε να προσθέσουμε και αλλά πεδία.

Dimitris Ch 17-04-11 18:50

Παράθεση:

Αρχική Δημοσίευση από ΤΖΙΜΗΣ (Μήνυμα 6151)
Δημήτρη πολύ καλό .Δηλαδή η εφαρμογή συμπεριφέρεται λες και δουλεύουμε στο EXCEL
Θα ήθελα να σε ρωτήσω αν μπορούμε να προσθέσουμε και αλλά πεδία.

Ναι στην φορμα base μπορεις να χρησιμοποιεις ολα τα πεδια του πινακα base. Αρκει να προσθεσεις και αλλα πεδια στον πινακα
Ακομη και στην αλλη φορμα προσθετουμε οσα θελουμε

Dimitris Ch 18-04-11 00:26

1 Συνημμένο(α)
Παραθετω ολοκληρωμενο το παραδειγμα πως μπορουμε μέσα σε μια φορμα να εχουμε ενα υπολογιζομενο πεδιο με πραξεις οριζομενες απο τον χρηστη.
Ειτε σε μια απλη φορμα (calculate)
Eιτε σε μια φορμα που φερνει τιμες και φορμουλες υπολογισμου μεσα απο πινακα.
Μέσα στην φορμουλα υπολογισμου που δηλωνουμε (η εχουμε καταχωρημενη στον πινακα δεδομενων), συμμετεχουν ολα τα πεδια της φορμας (η του πινακα που τα δηλωνουμε στην φορμα) και ολες οι συναρτησεις της VBA (Iif,Log,Date() κλπ οπως και αριθμητικα συμβολα +-*/^).
Ετσι με αυτον τον τροπο δινουμε κατα καποιον τροπο την δυνατοτητα στον τελικο χρηστη να χρησιμοποιησει μια μορφη προγραμματισμου η παραμετροποιησης οπως αυτος την χρειαζεται.
Εδω ανακαλυψα και την χρησιμοτητα της συναρτησης Εval την οποια αγνοουσα. :plaf:
Τελικα μαθαινω ψαχνοντας.
Ελπιζω να σας φανει χρησιμο ως παραδειγμα

Φιλικα Δημητρης

Tasos 18-04-11 11:16

1 Συνημμένο(α)
Καλημέρα Δημήτρη!
Έχουμε πολύ δουλειά μπροστά μας μ αυτό που ξεκίνησες:biggrin:!!

Στο σημείο αυτό θα ήθελα να προσθέσω κι εγώ ένα λιθαράκι με τη χρήση του αντικειμένου 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

Καλή συνέχεια!

Τάσος


Η ώρα είναι 18:40.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2