Fehler in Access-Eval()

Hallo,

ein Freund hat die Eval Funktion von Access verwendet und inzwischen durch die Eval Funktion im MS-Script Control ersetzt.

Dabei ist aufgefallen, daß Access bei a = Eval("-5^2") -25 zurück gibt, also „-(5^2)“ rechnet.

Liegt das an der Access-Version (Access 8) ? Rechnet Access200/Access2003 auch falsch?

Gruß, Rainer

Dabei ist aufgefallen, daß Access bei a = Eval("-5^2") -25
zurück gibt, also „-(5^2)“ rechnet.

VBA arbeitet nach einer festen Rangordnung der Operatoren, genauso wie jede andere mir bekannte Programmiersprache. Und da kommt der Exponential-Operator eben vor dem Negationsoperator. Von daher ist das Ergebnis nicht falsch, sondern nur logisch.

Was mir aber nicht logisch erscheint ist der Grund für den Einsatz der Eval()-Funktion an dieser Stelle?

Grüße,
Nik

Hallo,

Dabei ist aufgefallen, daß Access bei a = Eval("-5^2") -25
zurück gibt, also „-(5^2)“ rechnet.

VBA arbeitet nach einer festen Rangordnung der Operatoren,
genauso wie jede andere mir bekannte Programmiersprache. Und
da kommt der Exponential-Operator eben vor dem
Negationsoperator. Von daher ist das Ergebnis nicht falsch,
sondern nur logisch.

In VBS wird 25 zurück gegeben, das Ergebnis stimmt mit dem Ergebnis, das ich auf dem Papier ermittle überein. Mir erscheint das Ergebnis in VBS logischer, das Vorzeichen gehört ja in der Schreibweise ‚-5^2‘ zur 5. In VBS wird das auch so gerechnet. Wenn es stimmt, daß VBA richtig rechnet, rechnet VBS falsch. :smile:

Was mir aber nicht logisch erscheint ist der Grund für den
Einsatz der Eval()-Funktion an dieser Stelle?

hmmm, der Codeschnipsel zeigt doch das Problem. Wozu soll ich Dich mit einem Seiten langen Projekt, in dem die Funktion verwendet wird, langweilen, wenn das Problem in einer Zeile sichtbar wird?

In dem Projekt steht vor einer Tetbox in einem Label: "Y = " und in die Texxtbox wird eine Funktion eingetippt, etwa ‚X^2‘ oder auch ‚2*x^2+5*x+4‘ oder ‚5*sin(x)‘ … was dem User so einfällt. :smile: Die Funktion wird dann grafisch dargestellt. Um den String nicht zerlegen und selbst rechnen zu müssen, wird eben Eval() verwendet, das ist bequemer, MS hat das schon erledigt. OK? Reicht das als Erklärung, warum Eval()?

Gruß, Rainer

In VBS wird 25 zurück gegeben, das Ergebnis stimmt mit dem
Ergebnis, das ich auf dem Papier ermittle überein. Mir
erscheint das Ergebnis in VBS logischer, das Vorzeichen gehört
ja in der Schreibweise ‚-5^2‘ zur 5. In VBS wird das auch so
gerechnet. Wenn es stimmt, daß VBA richtig rechnet, rechnet
VBS falsch. :smile:

VBS ist eben nicht gleich VBA. Die Rangfolge der Operatoren ist unterschiedlich.

In dem Projekt steht vor einer Tetbox in einem Label: "Y = "
und in die Texxtbox wird eine Funktion eingetippt, etwa ‚X^2‘
oder auch ‚2*x^2+5*x+4‘ oder ‚5*sin(x)‘ … was dem User so
einfällt. :smile: Die Funktion wird dann grafisch dargestellt. Um
den String nicht zerlegen und selbst rechnen zu müssen, wird
eben Eval() verwendet, das ist bequemer, MS hat das schon
erledigt. OK? Reicht das als Erklärung, warum Eval()?

Ja, klar. Dein vorheriges Beispiel war nur eine Verrechnung von zwei Zahlen, daher wunderte ich mich.

OT Und was sagt Excel-Vba dazu

Dabei ist aufgefallen, daß Access bei a = Eval("-5^2") -25
zurück gibt, also „-(5^2)“ rechnet.

VBA arbeitet nach einer festen Rangordnung der Operatoren,
genauso wie jede andere mir bekannte Programmiersprache. Und
da kommt der Exponential-Operator eben vor dem
Negationsoperator. Von daher ist das Ergebnis nicht falsch,
sondern nur logisch.

In VBS wird 25 zurück gegeben, das Ergebnis stimmt mit dem
Ergebnis, das ich auf dem Papier ermittle überein. Mir
erscheint das Ergebnis in VBS logischer, das Vorzeichen gehört
ja in der Schreibweise ‚-5^2‘ zur 5. In VBS wird das auch so
gerechnet. Wenn es stimmt, daß VBA richtig rechnet, rechnet
VBS falsch. :smile:

Hallo Rainer, Dominik,

In Excel-Vba geht’s schon mal damit los, daß Eval() gar nicht bekannt ist :smile:

Auf jeden Fall (XL2002) kommt auch (+)25 heraus wie bei VB:

Sub tt()
MsgBox Evaluate("-5^2")
End Sub

Gruß
Reinhard

Hallo,

VBS ist eben nicht gleich VBA. Die Rangfolge der Operatoren
ist unterschiedlich.

aber Mathematik ist eben Mathematik und nicht vom Programm abhängig. VB rechnet auch wie VBS, nur Eval in Access rechnet anders, IMO falsch. :smile:

Die Frage noch einmal, ist das nur in dem alten Access so, oder auch im neuen, das habe ich nämlich nicht und kann selbst nicht nachsehen.

Gruß, Rainer

Hallo Reinhard,

In Excel-Vba geht’s schon mal damit los, daß Eval() gar nicht
bekannt ist :smile:

Auf jeden Fall (XL2002) kommt auch (+)25 heraus wie bei VB:

Sub tt()
MsgBox Evaluate("-5^2")
End Sub

ahhh, das ist doch das Selbe, heißt nur anders. :smile: VB6 kann’s allein gar nicht, aber mit dem Scriptobject geht’s. Mein Freund hatte das aber nocht nicht (Win95) und hat deshalb den Umweg über Access gewählt und sich über das Ergebnis gewundert. :smile:

Danke für den Excel-Code!

Gruß, Rainer

aber Mathematik ist eben Mathematik und nicht vom Programm
abhängig. VB rechnet auch wie VBS, nur Eval in Access rechnet
anders, IMO falsch. :smile:

Die Frage noch einmal, ist das nur in dem alten Access so,
oder auch im neuen, das habe ich nämlich nicht und kann selbst
nicht nachsehen.

Hallo Rainer,
sorry, ich Blödmann habe natürlich, wenn ich Exce2002 habe, auch Access2002 hier auf der Kiste, aber ich brauchte bei dieser Hitze meine Stunden um auf diese geniale Idee zu kommen *smile*

Option Compare Database
Sub tt()
MsgBox Eval("-5^2")
End Sub

liefert in Access2002 auch (+)25

Gruß
Reinhard

1 Like

Hallo Reinhard,

sorry, ich Blödmann habe natürlich, wenn ich Exce2002 habe,
auch Access2002 hier auf der Kiste,

so zwangsläufig nun auch wieder nicht. :smile:

aber ich brauchte bei
dieser Hitze meine Stunden um auf diese geniale Idee zu kommen
*smile*

Option Compare Database
Sub tt()
MsgBox Eval("-5^2")
End Sub

liefert in Access2002 auch (+)25

Danke!!! Dann hat MS den Fehler inzwischen beseitigt. :smile: Genau das wollte ich wissen. (*)

Gruß, Rainer

allein gar nicht, aber mit dem Scriptobject geht’s. Mein
Freund hatte das aber nocht nicht (Win95) und hat deshalb den
Umweg über Access gewählt und sich über das Ergebnis
gewundert. :smile:

Hallo Rainer,
ich weiß, mein Angebot wie er zu Win98 kommen könnte würdest du ablehnen :smile:
Aber wie wär’s mit Legal:
http://cgi.ebay.de/Windows-98-SE-win98-se-CD-Handbuc…
Sicher, du könntest ihm locker für lau ein VB Programmm basteln wie er auch zu einem „Bluescreen“ kommt, von daher ist 1 € für Win98 schon recht viel, aber es hat dieses geniale Überraschende, daß der „bluescreen“ immer dann kommt wenn er nicht erwartet wird, deshalb ist bei Win98 hoher Fun-Faktor garantiert :smile:)

Gruß
Reinhard

Danke!!! Dann hat MS den Fehler inzwischen beseitigt.

-) Genau das wollte ich wissen. (*)

Hallo Rainer,
ich habe zuhause Office97, 2000 und 2003.
Sag Bescheid wenn ich da dieses Eval in Access überprüfen soll, falls dein Freund mal eine Programmversion höher gehen will.
Und wegen dem ALK-Brett, gibts da ein Brett wo man erkennen könnte was diese® Dusan meinen könnte?
Gruß
Reinhard

Hallo Reinhard,

ich weiß, mein Angebot wie er zu Win98 kommen könnte würdest
du ablehnen :smile:

da hätte ich auch Ideen, aber der 200er mit 32MB Speicher, 4GB-Platte ist wohl doch zu klein für Win98. :smile: Ich versuche schon seit Monaten, meinen Freund zu überreden, sich bei Ebay für ein paar Euro einen gebrauchten zu kaufen, aber zwingen kann ich ihn nicht.

Gruß, Rainer

Hallo Reinhard,

ich habe zuhause Office97, 2000 und 2003.
Sag Bescheid wenn ich da dieses Eval in Access überprüfen
soll, falls dein Freund mal eine Programmversion höher gehen
will.

*gg* ich wundere mich schon, daß Access 97 auf der Kist läuft. :smile:

Und wegen dem ALK-Brett, gibts da ein Brett wo man erkennen
könnte was diese® Dusan meinen könnte?

Nein, keine Ahnung. Ein Brett dazu gibt’s wohl nicht. Ich habe keine Ahnung worum es geht und auch keine, wie man es herausfinden könnte.

Gruß, Rainer

da hätte ich auch Ideen, aber der 200er mit 32MB Speicher,
4GB-Platte ist wohl doch zu klein für Win98. :smile: Ich versuche
schon seit Monaten, meinen Freund zu überreden, sich bei Ebay
für ein paar Euro einen gebrauchten zu kaufen, aber zwingen
kann ich ihn nicht.

Hallo Rainer,
mit 200 sind die/der MHz Takt gemeint?
Win98 läuft auch auf Rechnern mit 16 Mhz Takt, 2 MB Arbeitsspeicher
und die Plattengröße ist wurscht.
Okay, wenn du da Webseiten mit viel Bildern oder gar mit einem Videoclip anschaust, brauchste Zeit.
Es gab sogar für Win3.1 einen InternetBrowser, kann sogar Win286 gewese sein, nie getestet, aber wenn du da eingestellt hast, keine Bilder anzeigen, war der mit Sicherheit ähnlich schnell in der Azeige von w-w-w wie du jetzt mit WinXP und zigfach schnelleren/größerer Hard- und Software.
Gruß
Reinhard, der sich jetzt mit seinem Sinclair Spectrum in seine Gemächer zurückzieht um über alte Zeiten nachzudenken :smile:

Hallo Reinhard,

mit 200 sind die/der MHz Takt gemeint?

ja, sind sie.

Win98 läuft auch auf Rechnern mit 16 Mhz Takt, 2 MB
Arbeitsspeicher
und die Plattengröße ist wurscht.

Ja, OK. Wenn der Freund doch aber partout nichts ändern möchte, lasse ich ihn eben. :smile: Einen Farblaser zu so einer Kiste zu kaufen finde ich zwar etwas … eigenartig? …, aber ich dränge doch Niemandem meine Meinung auf. Der Freund fühlt sich wohl so, VB läuft und mehr möchte er nicht. Lass ihn doch, wenn er damit glücklich ist. :smile:

Gruß, Rainer

Ergebnisse Eval() in Access VBA und SQL
Hallo Rainer

Dabei ist aufgefallen, daß Access bei a = Eval("-5^2") -25
zurück gibt, also „-(5^2)“ rechnet.

Diese Ergebnisse beziehen sich auf Access 2003 (11) und dazugehöriges Visual Basic 6:

Eval(-5^2) -\> -25
Eval("-5^2") -\> 25

Kleine Query geschrieben:

SELECT DISTINCT -5^2 AS x, Eval(-5^2) AS y, Eval("-5^2") AS z FROM ;
 x ¦ y ¦ z
 25 ¦ 25 ¦ 25

(„x“ wird als Zahl, „y“ und „z“ als Text geliefert.)

Danke Bill :wink:

Gruss
Peter

Hallo Peter,

Diese Ergebnisse beziehen sich auf Access 2003 (11) und
dazugehöriges Visual Basic 6:

Eval(-5^2) -> -25
Eval("-5^2") -> 25

Danke! Daß Eval(-5^2) auch geht, war mir gar nicht klar.

Bei der Verwendung in VB6 ist das aber auch unerheblich, da verwendet man den ‚Umweg‘ ja nur, wenn der Anwender die Funktion in ein Textfeld tippen kann, sonst kann VB ja auch gleich selbst rechnen.

Aber daß das prinzipiell funktioniert, ist sehr interessant.

Gruß, Rainer