Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Division mit Nachkommastellen

Begonnen von Paule, März 03, 2016, 09:37:32

⏪ vorheriges - nächstes ⏩

Paule

Hallo,

ich brauche einmal mehr Hilfe bei unserem Accounting-System.
Wir haben unterschiedliche Währungen, die wir bei uns verwenden. Insofern müssen diese auch umgerechnet werden.

Ich habe zwei Textfelder - eines für die Summe in Orginalwährung und eines zur Angabe des Wechselkurses.
Nun hatte ich mit dem Code-Generator angewiesen, dass er das Textfeld mit der Summe in der Anfangswährung mit den angegebenen Wechselkurs dividieren soll.

Also ich habe Tansania Schilling und möchte diese in US DOllar umrechnen.
Der Wechselkurs ist ca 1 Schilling= 0,00005 Dollar.
Nun möchte ich, dass er die Summe der Anfangswährung in USD angibt.
Dazu muss er durch 0,00005 dividieren. Er dividiert aber nur durch ganze Zahlen, sprich die 0, was natürlich nicht möglich ist.
In die andere RIchtung funktioniert das allerdings wunderbar... aber da kann ich auch multiplizieren...
Wie kann ich das umgehen und das Programm anweisen auch die Nachkommastellen zu berücksichtigen?

Vielen Dank für eure Hilfe und viele Grüße!

MzKlMu

Hallo,
wie sind die Datentypen der beteiligten Tabellenfelder eingestellt ?
Gruß Klaus

DF6GL

Hallo,

und weiter:

ZitatNun hatte ich mit dem Code-Generator angewiesen, dass er das Textfeld mit der Summe in der Anfangswährung mit den angegebenen Wechselkurs dividieren soll.

Wem hast Du was genau angewiesen?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

Zitat von: DF6GL am März 03, 2016, 10:05:21
Hallo,

und weiter:

ZitatNun hatte ich mit dem Code-Generator angewiesen, dass er das Textfeld mit der Summe in der Anfangswährung mit den angegebenen Wechselkurs dividieren soll.

Wem hast Du was genau angewiesen?

Der Code ist dieser:

Private Sub ExchangeRate2_AfterUpdate()
If DebitSide = 10200 Then
        Amount = Amount.Value / ExchangeRate2.Value
        End If
    If CreditSide = 10200 Then
        Amount = Amount.Value / ExchangeRate2.Value
        End If


Dabei sind Amount und ExchangeRate2 Textfelder.
In Textfeld ExchangeRate2 möchte ich Kurse wie 0,00045772 eingeben.

ExchangeRate2 habe ich als Format "Allgemeine Zahl", bei Amount ist kein bestimmtes Format ausgewählt. Amount und ExchangeRate2 sind in der zu dem Formular gehörenden Tabelle als Felddatentyp "Zahl" gespeichert.

Wie gesagt: Bei der Multiplikation funktioniert das Vorgehen super, ist aber auch einfacher... ;)

MzKlMu

#4
Hallo,
ZitatExchangeRate2 habe ich als Format "Allgemeine Zahl", bei Amount ist kein bestimmtes Format ausgewählt. Amount und ExchangeRate2 sind in der zu dem Formular gehörenden Tabelle als Felddatentyp "Zahl" gespeichert.
Das Format ist völlig nebensächlich, habe ich auch nicht danch gefragt. Der Datentyp wäre wichtig. Zahl alleine reicht da nicht, da gibt es noch weitere Feinheiten. Double, Single, Integer etc. bitte prüfen.
Für beide Felder (ExchangeRate2 und Amount).
Gruß Klaus

Paule

Zitat von: MzKlMu am März 03, 2016, 11:03:05
Hallo,
ZitatExchangeRate2 habe ich als Format "Allgemeine Zahl", bei Amount ist kein bestimmtes Format ausgewählt. Amount und ExchangeRate2 sind in der zu dem Formular gehörenden Tabelle als Felddatentyp "Zahl" gespeichert.
Das Format ist völlig nebensächlich, habe ich auch nicht danch gefragt. Der Datentyp wäre wichtig. Zahl alleine reicht da nicht, da gibt es noch weitere Feinheiten. Double, Single, Integer etc. bitte prüfen.
Für beide Felder (ExchangeRate2 und Amount).

Sind alles Long Integer. Dezimalstellenanzeige ist auf "Automatisch".

Mittlerweile zeigt er auch keinen Fehler mehr an mit der Division durch null, stattdessen nimmt er die 0,00045772 als 45772 und das damit als Divisor.

MzKlMu

Hallo,
ZitatSind alles Long Integer
LongInteger kann keine Kommastellen, LongInteger ist eine Ganzzahl.


PS:
Warum zitierst Du immer vollständige Beiträge? Es macht die Themen nur unnötig lang. Und bei einer direkten Antwort macht es auch keinen Sinn.
Gruß Klaus

Paule

Ja, ich hatte das schon zu Double geändert, aber 0,00045772 macht er trotzdem zu 45772 auch wenn er jetzt etwas anderes berechnet als vorher und in das Textfeld Amount schreibt (was ebenso nicht stimmt).

DF6GL

Hallo,



nachdem die Felder in Datentyp Double geändert sind, muss es so lauten:




Private Sub ExchangeRate2_AfterUpdate()
If Me!DebitSide = 10200 Then
        Me!Amount = Me!Amount/ Str(Me!ExchangeRate2)
        End If
    If Me!CreditSide = 10200 Then
        Me!Amount = Me!Amount/ Str(Me!ExchangeRate2)
        End If
End Sub


Wobei alle Textfelder bis auf "ExchangeRate2"   an Tabellenfelder gebunden sind.

Zusätzlich sollte im ExchangeRate2_BeforeUpdate-Ereignis  der Inhalt des Textfeldes auf NULL oder 0 geprüft werden.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

Funktioniert super!

Ganz lieben Dank an euch! :)

Paule

Oh, eine Frage hat sich mir beim Durchproben noch ergeben.
Was hat die Änderung des Felddatentyps "Amount" von Long Integer zu Double für Auswirkungen auf andere Abfragen, die sich u.a. auf "Amount" beziehen?

Eine Abfrage mit dem SQL-Code:
SELECT BK_BookEntryT.BusinessTransaction, BK_BookEntryT.DebitSide, BK_BookEntryT.CreditSide, BK_BookEntryT.Amount, BK_BookEntryT.Tag1, BK_BookEntryT.Tag2, BK_BookEntryT.Tag3, BK_BookEntryT.Notes
FROM BK_BookEntryT
WHERE (((BK_BookEntryT.BusinessTransaction)>=Nz([TempVar]![StartDateJ],DateValue('1900-01-01')) And (BK_BookEntryT.BusinessTransaction)<=Nz([TempVar]![EndDateJ],DateValue('2999-12-31'))) AND ((BK_BookEntryT.DebitSide) Like [TempVar]![DebitAcc] & ('*')) AND ((BK_BookEntryT.CreditSide) Like [TempVar]![CreditAcc] & ('*')) AND ((BK_BookEntryT.Tag1) Like [TempVar]![Tag1J] & ('*')) AND ((BK_BookEntryT.Tag2) Like [TempVar]![Tag2J] & ('*')) AND ((BK_BookEntryT.Tag3) Like [TempVar]![Tag3J] & ('*')));


...hatte bis vorhin wunderbar funktioniert. Nun allerdings nicht mehr. Meine Vermutung ist daher, dass es mit der Datentyp-Veränderung zusammenhängt?
Ich habe schon mal alle bisher gespeicherten Datensätze gelöscht und neue angelegt, aber daran liegt es nicht. Muss ich in dem Code noch etwas verändern?

MaggieMay

ZitatNun allerdings nicht mehr.
Wie zeigt sich dieses "Nicht-Funktionieren" denn??
Freundliche Grüße
MaggieMay

Paule

Zitat von: MaggieMay am März 03, 2016, 16:32:05
ZitatNun allerdings nicht mehr.
Wie zeigt sich dieses "Nicht-Funktionieren" denn??

Er zeigt mir die Buchungssätze, die ich neu erstellt habe, gar nicht mehr an. Eröffnet nurmal die Abfrage, aber es sind eben keine Daten vorhanden.
Daher mein Verdacht mit der Problematik der Felddatentyp-Umstellung bei "Amount". Denn "Amount" wird auch bei der Abfrage abgefragt...
Eine Fehlermeldung gibt es allerdings nicht.
Es ist insofern komisch, da die Abfrage davor fehlerfrei funktioniert hat.

DF6GL

Hallo,

vermutlich liegt es an der Where-Condition, wenn die Abfrage keine DS liefert.

Entferne mal die Kriterien aus der Abfrage und prüfe, ob dann die neuen Ds (mit) angezeigt werden.

Was ist "BK_BookEntryT"   ?

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

Ok, ich habe jetzt zumindest den Fehler eingegrenzt.

Die Abfrage funktioniert bis auf die Bedingung:
((BK_BookEntryT.Tag3) Like [TempVar]![Tag3J] & ('*'))

Tag 3 ist ein Textfeld, wo man dem Buchungssatz eine Kostenstelle zuordnen kann. Im Gegensatz zu den anderen beiden Tags, wo ich dieselbe Systematik bei den Bedingungn verwende (und die funktionieren), ist dieses Feld kein Listenfeld, wo man auswählen kann.
Sondern es ist ein freiex Textfeld, wo man alles angeben kann.

Ich will also in der Abfrage sagen, dass wenn er einen bestimmten Tag 3 sehen will, dann soll danach abgefragt werden, wenn bei der Eingabe der Parameter nichts für Tag 3 angegeben wird, sollen die Buchungssätze mit allen Tag 3 angezeigt werden, egal, was da drin steht.