Hallo,
in meiner Datenbank habe ich ein Formular >Behandlungsbelege< (verknüpft mit Tabelle >Behandlungsbelege<).
Bei Anwählen von Feld >Kennzahl< werden aus Tabelle >Behandlungskatalog< die Felder
>Kennzahl<, >Bezeichnung< und >Preis< angezeigt.
Beim Verlassen des Feldes >Kennzahl< soll der Preis in das Feld >Einzelpreis< eingetragen werden.
Wenn das Feld >Einzelpreis< vor Verlassen des Feldes >Kennzahl< nicht leer ist oder größer 0,00 € anzeigt, soll eine Abfrage aufgehen, ob der Eintrag überschrieben werden soll, Standard-Antwort soll NEIN sein.
Hintergrund ist, dass bei Preisänderungen in div. Auswertungen die alten Preise nicht überschrieben werden.
Was muss ich in die Ereignisprozedur eingeben?
Hallo,
verstehe Deine Sorge um den Hintergrund nicht....
Warum sollten "alte" Einzelpreise überschrieben werden, solange keine neue Auswahl der Kennzahl erfolgt?
ZitatBeim Verlassen des Feldes >Kennzahl< soll der Preis in das Feld >Einzelpreis< eingetragen werden.
Das wäre an sich schon das falsche Ereignis (des Kombis), um den Einzelpreis zu verarbeiten.
Besser(und einfach nur so):
Sub Kennzahl_AfterUpdate()
Me!Einzelpreis = val(Me!Kennzahl.Column(2))
End Subsofern die Felder den richtigen Datentyp besitzen. (Spalte 2 des Kombifeldes könnte Probleme machen, deshalb die €-Formatierung entfernen.)
Danke, funktioniert soweit mit einem kleinem Schönheitsfehler: die Dezimalstellen aus dem Kombifeld werden nicht übernommen, obwohl ich in allen beteiligten Tabellen und Abfragen die Euro-Formatierung entfernt habe (Standardzahl, 2 Dezimalstellen)
Hallo,
Formate sind wie Schall und Rauch.. Es kommt auf den DATENTYP des Tabellenfeldes an....
Hallo,
und danke für die schnelle Antwort. Hab noch mal alles durchforstet, komme aber nicht auf den Fehler.
Vielleicht können die Bilder weiterhelfen, ein Bild sagt ja mehr als tausend Worte .....
Hallo,
zunächst setze den Datentyp auf "Währung" (bevorzugt) oder "Double".
Versuch dann:
Sub Kennzahl_AfterUpdate()
Me!Einzelpreis = Str(Me!Kennzahl.Column(2))
End Sub
sofern der Preis in der 3. Spalte der Kombifeld-Liste steht.
Hallo,
habe jetzt zumindest rausgefunden, woran es liegt: der Übeltäter ist das Komma.
VAL schneidet alles nach dem Komma ab, da es Komma als Leerzeichen sieht und damit als Ende des Werts; STR ignoriert das Komma und macht aus 3,5 35.
Da ich aber nicht in der Systemsteuerung das Dezimaltrennzeichen generell von Komma in Punkt ändern möchte, suche ich eine Möglichkeit, das Dezimaltrennzeichen situationsbezogen anzupassen.
Hallo,
lies halt mal den vorher geposteten Code... ::)
Hallo,
hab´ ich gelesen ... und nun?
Bin leider kein Access-Gott und habe mir Access selbst durch learning by doing beigebracht.
Nun bin ich halt an einer Grenze angekommen und bräuchte etwas genauere Hinweise, worauf ich achten muss. Habe alles ausprobiert, was ich aus den Antworten rauslesen konnte => ohne Erfolg.
Trotzdem danke an den Bodensee.
Hallo,
Sub Kennzahl_AfterUpdate()
Me!Einzelpreis = Str(Me!Kennzahl.Column(2))
End Sub
das ist der Knackpunkt...
Die Str-Funktion wandelt ein Dezimal-Komma aus einem String (steht in der Kombifeld-Liste) in einen Dezimal-Punkt um, der für die Wert-Zuweisung an ein Formularfeld nötig ist.
Hallo,
hat leider so funktioniert wie ich es erwartet habe: Komma wird ignoriert und aus 3,5 wird 35
Habe daraufhin nach Str gegoogled und bei Mirosoft den Hinweis gefunden, dass man in diesem Fall CStr verwenden muss => und damit funktionierts!! Juhuuuu
Trotzdem nochmals Danke an den Bodensee.