Hallo zusammen,
ich habe auf meinem Formular zwei Kombinationsfelder, die Werte aus einer Datum-Tabelle anzeigen sollen. Je größer die ID in der Tabelle desto "später" das Datum. Nachdem ich nun das Start-Datum in Kombinationsfeld1 angegeben habe sollen im Kombinationsfeld2 nur noch spätere Daten angezeigt werden.
Ich habe also versucht als Datenherkunft für das Kombinationsfeld2 folgendes anzugeben:
SELECT tblDatum.Datum
FROM tblDatum
WHERE (((tblDatum.DatumID)>"'" & [Me]![Kombinationsfeld1].[ID] & "'"));
Leider komme ich damit nicht auf die gewünschte Lösung. Kann mir da jemand helfen?
Kann es sein, dass ich ein Ereignis bie "Nach Aktualisierung" von Kombinationsfeld1 erstellen muss?
Hallo,
das ID-Feld ist in dieser Umgebung eher kontraproduktiv....Lass das weg und definiere das Datum-Feld als Primärschlüssel.
Wenn Der Datentyp des ID-Feldes (vermutlich) "Long" , bzw. ein Autowert ist, dann so:
strSQL= "SELECT tblDatum.Datum FROM tblDatum WHERE DatumID>" & [Me]![Kombinationsfeld1]
wobei das ID-Feld in Spalte 0 des ersten Kombilistenfeldes stehen muss.
(Select DatumID, Datum from tblDatum order by Datum desc)
Jetzt bekomme ich einen Datentypkonflikt. Warum ich das ID Feld weglassen soll verstehe ich noch nicht ganz. Ich dachte das wäre ein guter Weg um aufsteigende Werte miteinander vergleichen zu können. Mit einem Datum ist das ja schwierig oder? :o
Hallo,
welchen Datentyp besitzt "DatumID" in der Tabelle?
Warum sollte es mit einem Datum schwieriger sein? Ein Datum wird intern auch nur als Zahl vom Datentyp Double dargestellt....
Hi,
wenn sichergestellt ist, dass die Eingaben chronologisch aufsteigend erfolgen und wenn die Datensatz-ID eine Zahl vom Typ Autowert ist, so spricht mAn nichts gegen deinen Ansatz. Allerdings kannst du so nicht auf eine Spalte eines Kombifeldes zugreifen: [Me]![Kombinationsfeld1].[ID]
sondern musst die Spalte über die Column-Eigenschaft ansprechen:
Me!Kombinationsfeld1.Column(0)
mit Index "0", wenn es sich um die erste Spalte handelt. Wenn es sich um die gebundene Spalte handelt, so kann die Angabe entfallen.
Des weiteren kann "Me" nicht in SQL-Strings eingesetzt werden, sondern nur im VBA-Code von Formular- oder Berichts-bezogenen Klassenmodulen.
Somit sollte folgender SQL-String als Datensatzherkunft des Kombifeldes funktionieren:
SELECT tblDatum.Datum FROM tblDatum WHERE DatumID>[Kombinationsfeld1] Order By tblDatum.Datum;
Hinweis:
Der Befehl "Kombinationsfeld2.Requery" nach Aktualisierung von Kombinationsfeld1 aktualisiert die Datensatzherkunft von Kombinationsfeld2.
Perfekt, danke Maggie!
Eine Frage noch:
Ich würde gerne mithilfe des folgenden Befehls (der nicht funktioniert :-X) Datensätze mit aufsteigendem Datum in eine Tabelle schreiben, wobei das Startdatum durch das Feld VonDatum und das Enddatum durch das Feld BisDatum angegeben wird...
Private Sub Speichern_Click()
Dim strSQL As String
Dim Datum As Date
For Datum = "' & Me!VonDatum & '" To "' & Me!BisDatum & '"
strSQL = "INSERT INTO tblDatumListe (Name, Datum) VALUES ('" & Me!Name & "' , '" & Datum & "')"
CurrentDb.Execute strSQL
Next Datum
End Sub
Das Datum soll so hochgezählt werden wie es auch in Tabelle tblDatum abgespeichert ist.
01.01.2017
01.02.2017
01.03.2017
...
Würde mich sehr freuen wenn mir wieder jemand helfen kann.
Hallo,
wozu in eine weitere Tabelle, die Daten hast Du doch schon.
Die über die Datumsfelder gefilterte Abfrage reicht aus.
PS:
Name als Feldname ist untauglich. Name ist eine Objekteigenschaft und damit ein reserviertes Wort und für eigene Verwendung absolut tabu.
Das war nur die abgespeckte Version des Codes. Die tblDatum soll eigentlich nur als Hilfstabelle dienen. Ich muss angeben, von wann bis wann ein bestimmtes Ereignis dauert und wie hoch die Kosten pro Monat sind, sodass mit einer Eingabe mehrere Tabelleneinträge ausgeführt werden.
Name: Ereignis1 Von: 01.01.2017 Bis: 01.09.2017 Kosten: 300
In die Tabelle sollte dann folgendes eingetragen werden:
Ereignis1 01.01.2017 300
Ereignis1 01.02.2017 300
Ereignis1 01.03.2017 300
...
Ereignis1 01.09.2017 300