PDA

Vollständige Version anzeigen : Datum aus Datensatz in Variable


MichaelBe
29.04.2011, 09:21
Guten Morgen zusammen,

ich steh heute irgendwie auf dem Schlauch und komm nicht drauf.

Ich habe Eine Tabelle in der in einer Spalte ein Datum mit abgespeichert wird. Nun habe ich auch noch ein Listenfeld (Liste27).

Ich möchte nun einen Datensatz in dem Listenfeld (Liste27) markieren und damit das Datum des entsprechenden Datensatzes in eine Variable kopieren.
Wenn ich mir diese Variable jedoch ausgeben lasse steht dort immer nur "FALSCH".

Jemand einen Klapps auf den Hinterkopf für mich parat?

Atrus2711
29.04.2011, 09:23
FALSCH scheint ein Boolescher Wert zu sein. Hast du da irgendwo einen Vergleich drin und/oder versucht, den Datumswert in eine Boolean-Variable zu schreiben?

Zeig doch mal den Code.

MichaelBe
29.04.2011, 12:37
Dim geladenerDatensatzDatum As Date
Dim aktID As Integer

aktID = "SELECT [Lagerbestand HVS].ID " & _
"FROM [Lagerbestand HVS] " & _
"WHERE ID = " & Me!Liste27", dbFailOnError


geladenerDatensatzDatum = DLookup("Annahmedatum", "[Lagerbestand HVS]", "ID = aktID")
MsgBox (geladenerDatensatzDatum)

Atrus2711
29.04.2011, 12:49
Wo soll ich da anfangen :p


aktID ist als Integer deklariert, bekommt aber einen textstring zugewiesen, der noch dazu mit den Anführungszeichen schlampt (hinter Liste27) und ein Argument dbFailOnError hinten anhängt, das hier nicht erwartet und verarbeitet wird.
Im Dlookup ist die Bedingung faul. "ID = aktID" versucht, die Felder ID und aktID in der Tabelle zu vergleichen. Das ist aber wohl nicht gewollt, sondern eher der Vergelich mit aktID. AktID ist zwar ein Integer, aber soll wohl das Ergebnis der ausgeführten Abfrage erhalten. Der SELECT-Befehl wird aber nirgends ausgeführt.
FALSCH entsteht letztlich aus der Missdeutung des verhunzen Dlookup-Ergebnisses (vmtl. Ganzzahl 0) als Booleanwert -> Falsch.


Fazit: Da stimmt eigentlich nix. Kompilieren kann das auch nicht.

Soll das Dlookup die ID aus me!Liste27 als Kriterium nutzen, oder das Ergebnis der unausgeführten SQL?

MichaelBe
29.04.2011, 13:32
Na da war wirklich einiges im Argen. Die Kombination aus VBA Neuling und Müdigkeit macht das :-)

Das ganze sieht jetzt so aus.

Dim geladenerDatensatzDatum As Date
Dim aktID As String

Me.RecordSource = "SELECT [Lagerbestand HVS].ID " & _
"FROM [Lagerbestand HVS] " & _
"WHERE ID = " & Me!Liste27
aktID = ID

geladenerDatensatzDatum = DLookup("Annahmedatum", "[Lagerbestand HVS]", "ID = aktID")
MsgBox (geladenerDatensatzDatum)

Die ausgelesene ID, die auf aktID abgelegt wird stimmt soweit. Nun will ich das Datum des Datensatzes mit der ID, die unter aktID liegt, auf geladener DatensatzDatum speichern und das funktioniert nicht.

Wo liegt der Fehler im DLookup? Oder wie muss ich die Bedingung formulieren damit als Bedingung gilt ID = "die ID unter aktID"?

Atrus2711
29.04.2011, 13:37
geladenerDatensatzDatum = DLookup("Annahmedatum", "[Lagerbestand HVS]", "ID = " & aktID)
Erkennst du den Unterschied?
Verstehst du ihn?

MichaelBe
29.04.2011, 16:25
ahaaa, ich versteh nur nicht weshalb VBA hier ein & dazwischen haben will aber ich denke das muss ich mir einfach nur als Syntax merken. Weshalb ich die variable außerhalb der Anführungszeichen schreiben muss leuchtet mir ein, danke.

Noch als zusätzliche Frage, da ich gerade davor stehe. Gibt es eine andere Möglichkeit einen Code nur dann auszuführen wenn ein neuer Datensatz angelegt wird außer einen Zeitstempel zu erstellen und den zu vergleichen mit der aktuellen Zeit?

Danke für deine Hilfe!

Thomas Möller
29.04.2011, 17:20
Hallo Michael,

Gibt es eine andere Möglichkeit einen Code nur dann auszuführen wenn ein neuer Datensatz angelegt wird ...

ob ein Datensatz neu ist kannst Du innerhalb von VBA mittels Me.NewRecord prüfen, z.B.:

Private Sub Form_Current()

If Me.NewRecord Then
MsgBox "Dieser Datensatz ist neu"
End If

End Sub

MichaelBe
30.04.2011, 00:49
das vereinfacht das ganze erheblich, danke Thomas