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!
Hallo,
wie sind die Datentypen der beteiligten Tabellenfelder eingestellt ?
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?
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 IfDabei 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... ;)
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).
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.
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.
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).
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.
Funktioniert super!
Ganz lieben Dank an euch! :)
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?
ZitatNun allerdings nicht mehr.
Wie zeigt sich dieses "Nicht-Funktionieren" denn??
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.
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" ?
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.
Hallo,
ZitatTag 3 ist ein Textfeld
"Tag 3" sehe ich nicht.. nur "Tag3" . Zudem ist "TAG3" ein TABELLEN-Feld, kein Formular-Textfeld.
Zitatdem Buchungssatz eine Kostenstelle zuordnen
Den Datentyp (und darauf kommt es an!) dieses Tabellenfeldes verschweigst Du jedoch.
ZitatSondern es ist ein freiex Textfeld, wo man alles angeben kann
Welchen Ausdruck meinst Du damit?
"BK_BookEntryT.Tag3" ist ein TabellenFeld (Was "BK_BookEntryT" nun ist (Tabelle oder Abfrage) , hast Du nicht beantwortet.
"[TempVar]![Tag3J]" ist ein Element der Tempvar-Auflistung und kein Textfeld
Zitatsollen die Buchungssätze mit allen Tag 3 angezeigt werden, egal, was da drin steht.
So übabhängig ist das aber nicht zu sehen... Es besteht eine "And"-Bedingung zu anderen "Tagx" , die berücksichtigt werden müssen, bzw. von der Abfrage berücksichtigt werden.
Was soll überhaupt "Tagx" bedeuten? Hat das was mit "Tagen" zu tun, oder soll das "Marke" bedeuten?
Tag bedeutet in meinem Kontext "Marke".
Tag3 ist als Tabellen-Felddatentyp "Kurzer Text". Genauso wie Tag1 und Tag2 die mit der identischen Systematik bei den Kriterien allerdings funktionieren.
Im Formular zur Hinzufügung eines neuen Datensatzes in BK_BookEntryT heißt das zugeordnete Steuerelement "Tag3". In dieser Tabelle werden alle Buchungssätze gespeichert.
In meinem Parameter-Eingabeformular für die Ermittlung der Abfragekriterien aus TB_BookEntryT wird mit einem Textfeld namens "Tag3J" die TempVar "Tag3J" gespeichert.
Die anderen beiden Tags (1&2) sind klar vorgegeben, mit Branch bzw. Headquarter zum auswählen (Listenfeld) und abhängig von der Eingabe bei Tag1 wird in Tag2 dann entweder die Abteilungen des Headquarters angegeben oder eben die einzelnen Branches (=Filialen).
Bei der Hinzufügung eines neuen Buchungssatz gibt es in dem dazugehörigen Formular ein Textfeld "Tag3" ohne irgendwelche Einschränkung oder Auswahlmöglichkeit. Dort kann alles oder nichts stehen --> In BK_BookEntryT.Tag3 kann also dementsprechend nichts stehen, oder alles, was man eben dort in dem entsprechende Formular zum Hinzufügen von Datensätzen in diese Tabelle, eingetragen hat.
Diese Informationen will ich nun gemäß Benutzer's Wünsche abfragen.
Will er auch nach "Tag3" gezielt abfragen, dann soll er das machen können über das Formular mit den Parametern. Dort gibt er dann das gewünschte Kriterium in das Textfeld "Tag3J" ein. Dann soll er mir alle Datensätze anzeigen, die (sofern alle anderen Parameter leer gelassen) unter Tag3 die gewünschte Information gespeichert hat. TempVar Tag3J muss damit mit Tag3 übereinstimmen. Sofern nichts bei der Eingabe im Parameter-Formular in "Tag3J" angegeben wurde, soll er mir eben alle Datensätze zeigen, völlig unabhängig davon, was unter Tag3 in BK_BookEntryT.Tag3 gespeichert wurde.
BK_BookEntryT ist eine Tabelle, Tag3 ein Feld davon.
Ich hoffe, ich habe mich verständlich ausgedrückt. Gerne stelle ich aber auch noch weitere Informationen zur Verfügung.
Vielen Dank für die geduldige Hilfe!
Hallo,
ja, ok...
wenn wir von dieser Where-Condition ausgehen:
ZitatWHERE (((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] & ('*')));
geht der Datumbereich hart mit in die Bedingung ein....
Gibt es denn zum Zeitpunkt der besagten Abfrage passende Datum in den Datensätzen?
Evtl. sollte die Bedingung dann so geschrieben werden:
WHERE ((( Nz(BK_BookEntryT.BusinessTransaction,Date()) )>=Nz([TempVar]![StartDateJ],DateValue('1900-01-01')) And ( Nz(BK_BookEntryT.BusinessTransaction,Date()) )<=Nz([TempVar]![EndDateJ], ..............
Hallo,
ich habe im Screenshot mal meine Test-Datensätze.
Es sind derzeit nur drei.
Möchte ich jetzt bei meine Formular zur Eingabe der Parameter (über Speicherung der TempVar) bei Tag1 "Branch" und Tag3 "Sawadi" stehen haben, dann müsste er mir folglich keinen Buchungssatz anzeigen, weil es einen Buchungssatz, der als Tag1 "Branch" UND als Tag3 "Sawadi" hat, nicht geben. Er zeigt mir aber jetzt den Buchungssatz mit Tag1="Branch" an.
Alle anderen Parameter habe ich leer gelassen. Daher sollten sie keine Rolle spielen.
Anscheinend bekommt Access in meinem Fall nicht gesagt, dass beide Kriterien gleichzeitig berücksichtigt werden sollen.
Bei allen anderen Kriterien ist dies aber kein Problem. Gebe ich zum Beispiel unter Tag1 "Branch" und unter Tag2 "Daressalaam" an, zeigt er mir richtigerweise KEINEN Buchungssatz.
Gebe ich unter Tag1 "Headquarter" an und als Zeitraum Januar, dann zeigt er mir auch richtigerweise keinen Buchungssatz an.
Gebe ich als Zeitraum März an, unter Tag1 "Branch" und unter Tag2 "Mtwara" kommt auch richtigerweise kein Buchungssatz.
Esklappt also nur bei dem Tag3 nicht und das obwohl es ja nicht irgendwie anders aufgebaut ist.
____________
Was genau meinst du mit dem Datumsbereich? Der Datumsbereich SOLL extra in die Abfrage mit hinein. Ich will es als ein Parameter angeben aber auch weglassen können (indem ich es einfach frei lasse).
Die vorgeschlagene Veränderung betrifft das "Date()" hinter BK_BookEntryT.BusinessTransaction, oder? Was genau würde das denn machen?
Ich habe außerdem mal einen Screenshot von dem Formular zur Eingabe der Parameter gemacht.
Hallo,
der Vorschlag mit Date() bezieht sich nur auf den Fall, dass in "BusinessTranaction" und/oder "BookingDate" keine Datum stehen.
Hast Du mal geprüft, ob Du wirklich die Texte in die richtigen Tempvars-Elemente schreibst?
(Im Direktbereich mit gesetztem Haltepunkt ?TempVar!Tag3J eintragen und Return drücken...)
Je nachdem, wo der SQL-String steht (im Abfrageentwurf oder im VBA-Code) sind die Hochkommata um die Datums-Literale durch Gänsefüße zu ersetzen...
Ansonsten lad die Db mal hier hoch, koprimiert/repariert und gezippt.
Ok,
irgendwie funktioniert es nun doch nicht mehr. Ich hatte nochmal ein bisschen rumgespielt und die Namen der TempVars ausgetauscht...jetzt ist aber wieder alles beim alten Stand.
Bei der Abfrage arbeite ich eigentlich nur im SQL-Code.
Ich habe die DB mal hochgeladen.
Die Tabellen BK_BookEntryT, die Abfrage BK_JournalQ (BK_JournalQ2 war nur eine Testabfrage) und BK_JournalR sind die entscheidenden Größen. Die Auswahl findet über BK_ShowJournalF statt.
Vielen Dank für deine Mühen.
Hallo,
ändere "tempvar" in "tempvars"
Hallo,
ich habe den Code jetzt so geändert:
WHERE (((BK_BookEntryT.BusinessTransaction)>=Nz([TempVars]![StartDateJ],DateValue('1900-01-01')) And (BK_BookEntryT.BusinessTransaction)<=Nz([TempVars]![EndDateJ],DateValue('2999-12-31'))) AND ((BK_BookEntryT.DebitSide) Like [TempVars]![DebitAcc] & ('*')) AND ((BK_BookEntryT.CreditSide) Like [TempVars]![CreditAcc] & ('*')) AND ((BK_BookEntryT.Tag1) Like [TempVars]![Tag1J] & ('*')) AND ((BK_BookEntryT.Tag2) Like [TempVars]![Tag2J] & ('*'))) And ((BK_BookEntryT.Tag3) Like [TempVars]![Tag3J] & ('*'));
Auch das funktioniert nicht wirklich. Er zeigt jetzt zum Beispiel nur die Headquarter Datensätze an (mit Tag1 =Headquarter), wenn ich im Parameter-Eingabeformular auch Tag2 und Tag3 angebe (ich habe aus Spaß bei einem Headquarter-Datensatz als Tag3 noch "Sawadi" hinzugefügt und nach nach die entsprechenden Tag1, Tag2 und Tag3 im Formular angegeben. Dann wird der Buchungssatz angezeigt...allerdings. Wenn ich aber nur Headquarter auswähle als Tag1 und bei Tag2/3 nichts mache, wird keiner der Headquarter-Buchungssätze angezeigt.
Ohne das Tag3-Kriterium hat es einwandfrei funktioniert.
Hallo,
dann taste Dich doch mal an das problem heran.
Entferne zunächst das Datums-Kriterium und prüfe nur die 3 restlichen Tag-Elemente.
(Die Hochkommata hast Du auch noch nicht durch Gänsefüsse ersetzt.. Welche Access-Version in welcher Sprache verwendest Du?)
Ich verwende Access 2013 mit Englisch als Spracheinstellung.
Das mit den Hochkommata habe ich schon versucht, aber es ändert sich nix. Beliebig die Konditionen hinzuzufügen bzw. wegzulassen habe ich ebenso probiert, ohne das etwas passiert.
Wie ich schon einmal vermutet habe, liegt das Problem an:
((BK_BookEntryT.Tag3) Like TempVars!Tag3J &[u][b] ('*')[/b][/u]));
In meinen Augen sucht er sich dann alle Datensätze raus, die irgendetwas beliebiges BK_BookEntryT.Tag3 stehen haben. Ich möchte aber, dass er auch die anzeigt, bei denen GAR NICHTS unter Tag3 angegeben ist.
Korrigiere mich, wenn ich falsch liege...
Hallo,
also englisch-sprachige Access-Version? dann sollte das Hochkomma in Ordnung sein.
versuch dann mal so: ..... And ( BK_BookEntryT.Tag3 Like TempVars!Tag3J & '*' or BK_BookEntryT.Tag3 is Null ) ......
Habe die überflüssigen Klammern entfernt. Die Klammern um die Or-Bedingung sind zwingend.
Hallo,
ja, super, das funktioniert jetzt. VIELEN DANK!
Wenn ich jetzt meine beiden Buchungssätze vom Headquarter habe (nur einer hat bei Tag3 "Sawadi" stehen), dann zeigt er mir jetzt endlich beide Headquarter-Buchungssätze an, unabhängig davon, ob bei Tag3 etwas steht oder nicht.
Nun möchte ich noch einen Schritt weiter gehen und als Parameter in mein Formular unter Tag1=Headquarter, und Tag3= Sawadi eingeben.
Dann soll mir die Abfrage nur den einen Buchungssatz des Headquarters anzeigen, der als Tag3 "Sawadi" aufweist.
Dafür müsste ich ja wohl etwas an den Kriterien ändern, sodass er weiß, dass er bei der ABfrage nur Buchungssätze anzeigen soll, die Tag1 und Tag3 genau so haben, wie ich es im Formular angegeben habe und nicht Buchungssätze mit Tag 1 UND zusätzlich Buchungssätze auf die Tag3 zutrifft.
Das heißt, diese drei Kriterien (Tag1, Tag2 und Tag3) muss ich nochmal irgendwie miteinander, untereinander anders verknüpfen, oder). Wüsstest du auch da einen Rat?
Hallo,
wenn ich hier Buchungssätze lese, frage ich mich, ob es nicht sinnvoll wäre erst mal die im anderen Thema (http://www.access-o-mania.de/forum/index.php?topic=21143.msg119917;topicseen#new) vorgeschlagene (und bessere) Umstrukturierung abzuwarten. Es könnte nämlich sein, dass das was Du hier vorhast dann wieder nicht mehr geht.
Hallo,
danke für die Anmerkung.
Die Kreditdaten sind unabhängig von den Buchungssätzen und werden zusätzlich eingegeben. Daher sollte das kein Problem sein.