Hallo zusamen,
heute habe ich einen Knoten im Kopf, weil ich Zahlen/Ergebnisse aus verschiedenen Tabellen brauche. Ich verstehe, wenn euch das ein zu großer Brocken ist, aber jeder Tipp ist hilfreich. Ich hatte zunächst versucht das Problem mit Abfragen zu lösen, aber dann kann ich im Endlosformular nichts mehr ändern, deshalb denke ich jetzt in Richtung VBA...
Ausgangssituation:
Ich habe folgende Tabellen
tblKosten
ID
KostenProduktID
GeleistetWann
KostenMitarbeiterID
Vertragsposition
GeleisteteStunden
AbrechnungExtern
AbrechnungIntern
tblPositionen
ID
PosProduktID
Position
ExternerStundensatz
tblStundensatz
ID
StundensatzMitarbeitereID
StundensatzIntern
GiltVon
GiltBis
GiltAktuell
Mit einer passenden Abfrage zu tblKosten stelle ich nun in einem Endlosformular die einzelnen Kosten für ein bestimmtes Produkt zusammen
Ziele
a. Im Endlosformular möchte ich in einem Textfeld den passenden tblStundensatz.StundensatzIntern ausgeben, also für den gilt StundensatzMitarbeiterID=KostenMitarbeiterID und ((tblStundensatz.GiltVon<=tblKosten.GeleistetWann und tblStindensatz.GiltAktuell=True) or (tblStundensatz.GiltVon<=tblKosten.GeleistetWann und tblStundensatz.GiltBis>=tblKosten.GeleistetWann)
Außerdem möchte ich bei Änderungen die Felder tblKosten.AbrechnungExtern und tblKosten.AbrechnungIntern wie folgt überschreiben:
tblKosten.AbrechnungExtern = tblStundensatz.StundensatzIntern*tblKosten.GeleisteteStunden mit passender Gültigkeit (s.o.)
tblKosten.AbrechnungIntern =
tblPositionen.ExternerStundensatz*tblKosten.GeleisteteStunden
Vielen Dank fürs Anschauen!
ZitatIch verstehe, wenn euch das ein zu großer Brocken ist
Du würdest Dich wundern ...
Allerdings beginnt eine Problemansicht mit dem Blick auf das Beziehungsbild, weil dort Abhängigkeiten von Tabellen einfach sichtbar sind. Aber - irgendwie - hängt es da schon.
Allerdings: Wenn Du aktualisieren willst, wirst Du mit nur einem Formular nicht hinkommen, da sich die sonst verwendete Abfrage als nicht aktualisierbar herausstellen wird.
Hallo ebs17,
ich habe ein Bild der Beziehungen angehängt.
"Allerdings: Wenn Du aktualisieren willst, wirst Du mit nur einem Formular nicht hinkommen, da sich die sonst verwendete Abfrage als nicht aktualisierbar herausstellen wird."
Also wenn ich die Variable GeleisteteStunden im Endlosformular ändern möchte, kann ich nicht über einen "Speicher-Button" das gesamte Formular inkl. Abfrage aktualisieren?
Moin nochmal,
einen Schritt bin ich schon mal weiter. Mein Ziel war es ja folgendes in einem Textfeld anzeigen lassen
tblKosten.AbrechnungIntern = tblPositionen.ExternerStundensatz*tblKosten.GeleisteteStunden
Also hab ich dem Textfeld Kosten nun folgendes Zugeteilt:
Private Sub Form_Load()
Dim Lohn As Currency
Lohn = DLookup("[ExternerStundenlohn]","tblPositionen", "[PosProdukteID]=" & Me.KostenProduktID)
Kosten = Lohn * Me.GeleisteteStunden
End Sub
An dieser Stelle ist es aber noch verkehrt, weil er trotz Endlosformular bei allen Datensätzen die gleichen Zahlen raushaut...
Ideen?
Hallo,
das ist normal..
Füge die Dlookup()-Funktion in ein leeres Feld (Spalte) im Abfrageentwurf ein und binde das Form-Textfeld an diesen Spaltennamen.
Hallo und vielen Dank,
das hat für den einen Fall funktioniert. Allerdings wird die Zahl nicht als Währung formatiert ausgegeben. Kann ich das noch irgendwie anpassen?
Meine Lösung bisher:
ExternerStundenlohn: DomWert("ExternerStundenlohn";"tblPositionen";"PosProdukteID=" & [KostenproduktID] & " AND Position=" & [Vertragsposition])
Was noch nicht funktioniert ist das hier. Ich habe es über eine Abfrage versucht, um nur zwei Parameter zu haben...da kommt nix
InternerStundenlohn: DomWert("StundensatzIntern";"qerPassenderStundensatzProMitarbeiter";"StundensatzMitarbeiterID=" & [KostenMitarbeiterID] & " AND GeleistetWann<=" & [GeleistetWann])
...und einmal direkt mit vielen Parametern, wobei er über die letzten beiden Klammern meckert und so oder so nichts liefert.
Dazu noch Tipps? :D
=DomWert("[StundensatzIntern]";"tblStundensatz";"[StundensatzMitarbeiterID]=" & [KostenMitarbeiterID] & " AND (([GiltVon]<=" & [GeleistetWann] & " AND [GiltAktuell]=True) OR ([GiltVon]<=" & [GeleistetWann] & " AND ([GiltBis]>=" & [GeleistetWann])))
Hallo,
wozu brauchst Du in Tabellen-/Abfrageansicht das Währungssymbol?
Dazu müsste der gesamte Ausdruck entsprechend formatiert und damit in einen String umgewandelt werden
oder die Format-Eigenschaft der entspr. Abfragespalte auf z. B. "Währung" gesetzt werden.
Eine Datum-Variable für ein SQL-Kriterium muss in das USA- oder ISO-Format umgewandelt werden.
Ich brauche es nicht unbedingt in der Abfrage, aber im Textfeld wird es mir auch nur als Zahl ausgespuckt, egal ob ich es als Währung formatiere. Das sieht dann nicht so gut aus.
Hallo,
auch das Textfeld hat eine Format-Eigenschaft.
Das war das, was ich meinte: Die Abfrage spuckt ne Zahl aus, das Textfeld ist als Währung formatiert, ausgegeben wird trotzdem nur die Zahl.
Dringlicher ist das Problem oben mit dem DomWert bei dem ich mehr als zwei Kriterien habe und nicht nur and sondern auch nen oder... dazu ne Idee?
Hallo,
kannst du bei der Format-Eigenschaft des Textfeldes "Währung"
auswählen?
Zitat
mehr als zwei Kriterien
--die Vergleichsfelder müssen als Steuerelemente im Formular vorhanden sein.
-- Datumsfelder müssen mit der Formatfunktion in das USA- oder ISO-Format konvertiert werden.
-- Statt "Or" könnte "between ... and ..." verwendet werden. Das würde die "And vor Or"-Hierarchie und damit nötige logische Klammerung außen vor lassen.