Home > Artikel > Ausgabe 2/2012 > Rechnen in Formularen

Rechnen in Formularen

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Es gibt verschiedene Gelegenheiten, in Formularen die Ergebnisse von Rechenoperationen zu präsentieren. Dabei lassen sich viele Berechnungen in Abfragen auslagen, die als Datenherkunft der Formulare dienen, manchmal gelingt dies jedoch nicht. Dieser Artikel zeigt, wie Sie einfache Berechnungen bis hin zu formularübergreifenden Berechnungen durchführen und was Sie dabei beachten müssen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1202_RechnenInFormularen.mdb.

Einfache Formeln in Textfeldern

Beginnen wir mit einem scheinbar einfachen Beispiel. Im Formular aus Bild 1 finden Sie zwei Textfelder namens txtSummand1 und txtSummand2, die zur Eingabe zweier Summanden dienen. Das Textfeld txtSumme soll die Summe der beiden Werte liefern. Damit dies geschieht, weisen Sie der Eigenschaft Steuerelementinhalt den folgenden Ausdruck zu:

Summieren zweier Textfelder

Bild 1: Summieren zweier Textfelder

=[txtSummand1]+[txtSummand2]

Ein Wechsel in die Formularansicht und die Eingabe zweier Zahlen zeigt, dass dies so nicht funktioniert: Der Plus-Operator addiert die Zahlen nicht, sondern fasst diese als Zeichenfolgen auf und führt die beiden Textketten zusammen (siehe Bild 2). Access geht davon aus, dass ein ungebundenes Textfeld eine Zeichenkette enthält und fügt diese durch den Plus-Operator zusammen. Wenn Sie sicherstellen wollen, dass Access mit Zahlen arbeitet, können Sie den Summanden beispielsweise die Val-Funktion voranstellen (die dann mit Wert übersetzt wird). Der Ausdruck sieht dann etwa so aus:

Zeichenverkettung statt Addition

Bild 2: Zeichenverkettung statt Addition

=Wert([txtSummand1])+Wert([txtSummand2])

Allerdings streikt Access dann, wenn die Textfelder beim Öffnen des Formulars keinen Wert enthalten und liefert als Ergebnis einen Ausdruck wie #Typ!.

Fehler bei leeren Feldern

In diesem und in anderen Fällen kann die Wert-Funktion die enthaltenen Null-Werte nicht verarbeiten. Verwenden Sie dann die Nz-Funktion, um für gegebenenfalls leere Textfelder den Wert 0 zu liefern:

=Wert(Nz([txtSummand1];0))+Wert(Nz([txtSummand2];0))

Probleme gibt es hier immer noch, wenn Sie Zahlen mit Nachkommastellen angeben. Die Val-Funktion erkennt nur den Punkt als Dezimaltrennzeichen. Sollten Sie alternativ das Komma als Dezimaltrennzeichen verwenden wollen, was in der deutschen Systemeinstellung eingestellt sein dürfte, können Sie alternativ die Funktion CDbl verwenden, um den vermeintlichen Text in eine Zahl umzuwandeln. Der Punkt als Trennzeichen wird dann allerdings komplett ignoriert – aus 12.5 wird dann 125.

Rechnen mit gebundenen Textfeldern

Viel einfacher wird dies, wenn die Textfelder an Zahlenfelder einer Tabelle gebunden sind. Dies gilt vor allem, weil Access prüft, welchen Datentyp diese Felder haben und automatisch eine Addition statt einer Zeichenverkettung durchführt. Im Beispiel verwenden wir die Tabelle tblZahlen, das zwei Felder namens Zahl1 und Zahl2 enthält. Beide Felder sind als Zahlenfelder mit dem Untertyp Single ausgestattet, um Nachkommastellen zu verarbeiten. Hier brauchen Sie keine Konvertierung mehr durchzuführen. Allerdings sollten Sie die Nz-Funktion einsetzen, um leere Felder als 0 zu verarbeiten. Da es sich um gebundene Felder mit dem Datentyp Zahl handelt, brauchen Sie den zweiten Parameter der Nz-Funktion nicht anzugeben – dieser verwendet in diesem Fall gleich den Wert 0 (siehe Bild 3).

Beispiel für die Addition gebundener Felder

Bild 3: Beispiel für die Addition gebundener Felder

Berechnung in Abfrage auslagern

Sie können die Berechnung auch in eine Abfrage auslagern. Diese wird dann später als Datenherkunft des Formulars angegeben und liefert das Feld mit dem Berechnungsergebnis gleich mit. Eine Abfrage auf Basis der Tabelle tblZahlen, welche die Werte der Felder Zahl1 und Zahl2 addiert, sieht wie in Bild 4 aus.

Addition per Abfrage

Bild 4: Addition per Abfrage

Im Beispielformular frmZahlen haben wir die bereits darüber verwendeten Felder Zahl1 und Zahl2 erneut untereinander angelegt und das Berechnungsergebnis gleich darunter platziert. Was auch bereits in der Datenblattansicht der Abfrage hätte auffallen können: Die Genauigkeit bei Berechnung in der Abfrage entspricht nicht der bei der Berechnung direkt im Formular. Bei der Berechnung im Formular verwendet Access auch für das Ergebnis den Single-Datentyp, für die Berechnung in der Abfrage anscheinend den Double-Datentyp. Warum sich dies derart auf das Ergebnis auswirkt, ist uns nicht bekannt. Das einfachste Gegenmittel zur Sicherung hoher Genauigkeit auch bei Zahlen mit Nachkommastellen ist es, den Datentyp Währung zu verwenden. Wenn Sie das Format eines solchen Feldes auf Allgemeine Zahl einstellen, wird das Währungssymbol nicht angezeigt und Sie können mit Festkommazahlen statt mit Gleitkommazahlen arbeiten. Auch hierfür haben wir ein Beispiel zur Tabelle tblZahlen, zur Abfrage qrySumme und zum Formular frmRechnen hinzugefügt.

Berechnungen in Formularen

Gegebenenfalls möchten Sie dem Benutzer nicht nur, wie in obigem Beispiel, die Möglichkeit zum Summieren zweier Zahlen geben, sondern diesem auch die Eingabe individueller Berechnungsformeln erlauben. Hier hilft die Eval-Funktion weiter. Sie nimmt einen Ausdruck wie beispielsweise eine Rechenoperation wie 1+4 entgegen und liefert das Ergebnis zurück (siehe Bild 5). Um dies zu testen, legen Sie in einem Formular zwei Textfelder namens txtAusdruck und txtErgebnis an. Der Ausdruck soll berechnet werden, wenn sich die Einfügemarke im Textfeld txtAusdruck befindet und der Benutzer die Eingabetaste betätigt. Dazu legen Sie eine Ereignisprozedur an, die durch das Ereignis Bei Taste ab des Textfeldes txtAusdruck ausgelöst wird. Diese Prozedur sieht wie in Listing 1 aus und prüft zunächst den Code der betätigten Taste. Hat diese den Wert 13, was der Eingabetaste entspricht, liest die Prozedur den Inhalt des Textfeldes txtAusdruck in die Variable strAusdruck ein. Der Inhalt dieser Variablen wird noch auf Vorkommen des Komma-Zeichens geprüft, dass gegebenenfalls als Dezimaltrennzeichen verwendet wird. Komma-Zeichen werden dabei durch den Punkt ersetzt. Danach ermittelt die Eval-Funktion den Ausdruck, also das Ergebnis der Rechenvorschrift, und schreibt dieses in das Textfeld txtErgebnis. Damit die Einfügemarke im Textfeld txtAusdruck verbleibt, wird der KeyCode noch auf den Wert 0 eingestellt.

Addition per Abfrage im Formular

Bild 5: Addition per Abfrage im Formular

Aggregatfunktionen/Summen

Mit den obigen Informationen können Sie leicht komplexere Berechnungen etwa zum Ermitteln von Brutto-Preisen durchführen. Im Endlosformular aus Bild 6, haben wir beispielsweise alle Felder der Tabelle tblBestellpositionen angezeigt. Rechts daneben finden Sie noch ein Feld, dass den Bruttobetrag je Position ermittelt, und zwar mit folgender Berechnungsformel:

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!