Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Λανθασμένο αποτέλεσμα μεσω VBA (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/6214-lanthasmeno-apotelesma-meso-visual-basic-applications.html)

γιώργοςΚ 22-11-22 16:26

Λανθασμένο αποτέλεσμα μεσω VBA
 
Καλησπέρα στους φίλους του φόρουμ

Το πρόβλημα που αντιμετωπίζω ειναι πραγματικά μια σπαζοκεφαλιά που εύχομαι κάποιος φίλος να δώσει την λύση. Μέσα σε ενα VBA Module εχω αρκετές εξισωσεις καποιες απλές και κάποιες καπως πιο πολύπλοκες. Συγκεκριμένα εχω την εξίσωση
Χ= 495 / (1.29579 - 0.35004 * (Log(87 + 97 - 32)) + 0.221 * (Log(167))) - 450 και το κουφό ειναι ότι δίδει λανθασμένο αποτελεσμα (εντελώς αλλού..!!) οταν το δωσω ως string σε καποιο πεδίο μιας φόρμας, και το ακόμη πιο κουφό ειναι ότι εάν παρω ως έχει την πιο πανω εξίσωση σε ένα φύλο Excell διδει το ορθό..(!!) Και λέω το "ορθό" αφού γνωρίζω ακριβως το αποτέλεσμα που πρεπει να προκύψει μεσω ενος αλλου αρχείου Excell.

Υπόψη οτι:
1. Εχω ελέξει το πεδίο ενημέρωσης στην φόρμα και ειναι αριθμητικο (Double , Standard ,2)
2. Εκανα διαφορες δοκιμες σε σημείο οπου εχω δημιουργήσει σε πινακα υπολογιζομενο πεδιο με ιδια εξίωση, ιδιου τυπου πεδιο (Double , Standard ,2) και δινει εντελως διαφορετικο αποτελεσμα απο αυτο στην VBA

Δεν ξερω τι άλλο μπορει να ελέξω αλλά το μόνο που πιστευω (και το εχω ωρες στο μυαλό μου) ισως να εχει καποιο θέμα το πακέτο Office που έχω...(? - 2019 ProPlus 32bit)

Την γνωμη σας ...

vraxnakisg 22-11-22 17:10

Καλησπέρα Γιώργο,

Το αποτέλεσμα που δίνει στο excel είναι 33,7396 =495/(1,29579-0,35004*(LOG(87 + 97 - 32)) + 0,221*(LOG(167)))- 450

Ενώ στην Access to αποτέλεσμα είναι 292,677014= 495 / (1.29579 - 0.35004 * (Log(87 + 97 - 32)) + 0.221 * (Log(167))) – 450

Ποιο είναι το σωστό?

Η παραπάνω διαφορά υποθέτω έχει να κάνει με την προτεραιότητα των πράξεων και στον διαφορετίκο υπολογισμό της συνάρτησης Log.

γιώργοςΚ 22-11-22 17:20

Παράθεση:

Αρχική Δημοσίευση από vraxnakisg (Μήνυμα 34256)
Καλησπέρα Γιώργο,

Το αποτέλεσμα που δίνει στο excel είναι 33,7396 =495/(1,29579-0,35004*(LOG(87 + 97 - 32)) + 0,221*(LOG(167)))- 450

Ενώ στην Access to αποτέλεσμα είναι 292,677014= 495 / (1.29579 - 0.35004 * (Log(87 + 97 - 32)) + 0.221 * (Log(167))) – 450

Ποιο είναι το σωστό?

Η παραπάνω διαφορά υποθέτω έχει να κάνει με την προτεραιότητα των πράξεων και στον διαφορετίκο υπολογισμό της συνάρτησης Log.

Καλησπέρα Γιώργο, το πρωτο ειναι το ορθό αλλά που στο καλό ειναι το λάθος δεν μπορεσα να καταλαβω

kapetang 22-11-22 18:00

Καλησπέρα

1) Η συνάρτηση Log(x) στην VBA και στην access μας δίνει τον λογάριθμο του x, με βάση το e (έχει άπειρα ψηφία, ισούται με Exp(1), περίπου 2.728282)

2) Η συνάρτηση Log(x) στο excel μας δίνει το λογάριθμο του x, με βάση το 10.

3) Το excel διαθέτει τη συνάρτηση Ln(x), που δίνει τον λογάριθμο του x, με βάση το e.

Δηλαδή η συνάρτηση του excel που ταυτίζεται με τη συνάρτηση Log() της VBA και της access δεν είναι η Log(), αλλά η Ln().

4) Για να πάρουμε, στην access και τη VBA το λογάριθμο του x με βάση το 10, χρησιμοποιούμε τον τύπο Log(x)/log(10).

γιώργοςΚ 22-11-22 18:48

Παράθεση:

Αρχική Δημοσίευση από kapetang (Μήνυμα 34258)
Καλησπέρα

1) Η συνάρτηση Log(x) στην VBA και στην access μας δίνει τον λογάριθμο του x, με βάση το e (έχει άπειρα ψηφία, ισούται με Exp(1), περίπου 2.728282)

2) Η συνάρτηση Log(x) στο excel μας δίνει το λογάριθμο του x, με βάση το 10.

3) Το excel διαθέτει τη συνάρτηση Ln(x), που δίνει τον λογάριθμο του x, με βάση το e.

Δηλαδή η συνάρτηση του excel που ταυτίζεται με τη συνάρτηση Log() της VBA και της access δεν είναι η Log(), αλλά η Ln().

4) Για να πάρουμε, στην access και τη VBA το λογάριθμο του x με βάση το 10, χρησιμοποιούμε τον τύπο Log(x)/log(10).

Καλησπέρα Γιώργο και ευχαριστώ, το εχω ψάξει και εγω στο διαδικτυο και τελικα διαμόεφωσα την εξισωση στην vba σε
x= 495 / (1.29579 - 0.35004 * (Log(87 + 97 - 32) / Log(10)) + 0.221 * (Log(167) / Log(10))) - 450 και όντως λαμβάνω ορθό αποτελεσμα το 33.73.! Ομως,

το πρόβλημα τωρα ειναι οτι εαν στην θέση των αριθμών 87 + 97 - 32 βάλω τα πεδία που εχουν μεσα αυτες τις τιμές, λαμβανω ενετλως λαθος αποτελεσμα παλι, Δηλαδη

x = 495 / (1.29579 - 0.35004 * (Log(Wst + Hps - Nec) / Log(10)) + 0.221 * (Log(167) / Log(10))) - 450 which
Wst string απο πεδίο [Waist]=87
Hps string απο πεδίο [Hips]=97 and
Nec stringαπο πεδίο [Neck]=32

Λαμβανω αποτελεσμα 766,546632982..

Καμια ιδεα?

tsgiannis 24-11-22 08:24

Σπάστο ώστε να κάνεις τους υπολογισμούς κομματι κομματι και θα βρεις λογικά το λάθος

pakos 24-11-22 10:22

συνεχεια
 
1 Συνημμένο(α)
ανεξαρτητα που δεν γνωριζω σε τι χρησιμευει ο τυπος δες και αυτη την λυση αν σε κανει

γιώργοςΚ 24-11-22 10:24

Παράθεση:

Αρχική Δημοσίευση από tsgiannis (Μήνυμα 34266)
Σπάστο ώστε να κάνεις τους υπολογισμούς κομματι κομματι και θα βρεις λογικά το λάθος

Καλημέρα Γιάννη, το πρόβλημα επιλυθηκε απλά αλλάζοντας τα string πεδία σε Integer καθως αριθμητικά και τωρα είναι ορθό. Πάντως για να ειμαι ειλικρηνής κάτι παρόμοιο δεν ειχα συναντήσει ποτέ στα πέραν των 10ετων ενασχόλησης μου.

Σε καθε περίπτωση ευχαριστω για το ενδιαφέρον


Η ώρα είναι 15:26.

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


Search Engine Optimization by vBSEO 3.3.2