PDA

Vollständige Version anzeigen : Datumvergleich


wein234
20.01.2003, 08:08
Hallo Forum,
habe folgendes Problem:
ich vergleiche 2 Felder in A97 wie folgt:
if format(lrs![datum], "tt.mm.jjjj") <= lrs1![datum], "tt.mm.jjjj") .....
und bekomme den Fehler:
Laufzeitfehler "5"
Unzulässiger Prozeduraufruf oder ungültiges Argument.
Was ist daran falsch ?
gruss

Schefti
20.01.2003, 08:13
Grundsätzlich kannst Du in VBA nur amerikanische Formatangaben verwenden ("dd.mm.yyyy").

Da es sich hier um zwei Tabellenfelder handelt, ist doch kein Formatwechsel nötig - oder?

Versuchs mal mit format(irs!Datum,"mm\/dd\/yyyy")

cu

Rocco
20.01.2003, 08:22
Hi!

Du kannst nicht innerhalb einer Funktion (format) vergleichen:
Das ist falsch:
if format(lrs![datum], "tt.mm.jjjj") <= lrs1![datum], "tt.mm.jjjj") .....

Das ist richtig:
if format(lrs![datum], "tt.mm.jjjj") <= format(lrs1![datum], "tt.mm.jjjj") then

Greedins
Rocco

Schefti
20.01.2003, 08:27
"tt.mm.jjjj" ist aber immer noch falsch.
Deutsches Format kann in VBA nicht verwendet werden.

cu

wein234
20.01.2003, 09:11
Hi,
danke für eure Mühe.
Habe es mit dem amerikanischen Format versucht
(format[datum], "mm.dd.yyyy"). Es funktioniert einfach nicht.
Hat noch jemand eine Idee ! Danke im voraus.
gruss

Aquarii
20.01.2003, 10:15
Hallo Wein 234,

meines Erachtens hat Rocco mit folgender Variante Recht:

if format(lrs![datum], "tt.mm.jjjj") <= format(lrs1![datum], "tt.mm.jjjj") then

Bei mir funzt es!

Schefti
20.01.2003, 11:08
Hallo Leute,

also irgendwas versteh ich hier nicht!

In VBA kann man keine deutsche Formatangabe verwenden!!!!!!!!!!!!
Hier ein Beispiel:


Dim rec As Recordset
Set rec = CurrentDb.OpenRecordset("Tabelle1")
Debug.Print rec!Datum & " : " & Format$(rec!Datum, "tt.mm.jjjj")


Dies liefert: 01.03.2003 : tt37681,mm.jjjj

@wein

Poste doch mal die ganze Funktion.

Da beide Felder aus einer Tabelle kommen brauchst Du die aber gar nicht umwandeln. Beide Felder müssen als Datum definiert sein, dann kannst Du einen einfachen Vergleich machen:

If rec!Datum <= rec!Datum2 Then

Ich fürchte der Fehler liegt woanders.

wein234
20.01.2003, 12:21
Hallo Schefti,
also die beiden Felder kommen aus 2 Tabellen, hier der Code:

Sub xAufberDatenHistorie()
On Error GoTo Err_xAufberDatenHistorie

Dim lProcName As String
Dim lMsgText As String
Dim lSQLCmd As String
Dim lTblName As String

Dim lDB As Database
Dim lRs As Recordset
Dim lRs1 As Recordset
Dim lRs2 As Recordset
Dim lRs3 As Recordset
Dim lFrm As Form

Dim nAnz As Integer
Dim nPreis As Currency
Dim nSumme As Currency
Dim nGefunden As Integer
Dim nFertig As Integer

Dim fDatum, fDatum1

lProcName = "xAufbereitenDaten"

lTblName = "tblTempAbr"

Set lDB = CurrentDb()
Set lRs = lDB.OpenRecordset("tblTempAbr", DB_OPEN_DYNASET)
Set lRs1 = lDB.OpenRecordset("tblTempAbrHistorie", DB_OPEN_DYNASET)

lrs.MoveFirst ' tblTempAbr lesen
Do Until lRs.EOF
nFertig = 0

lRs1.MoveFirst 'HistorieTabelle lesen
Do Until lRs1.EOF Or nFertig = 1

If lRs1![ARZIDNR] > lRs![ArzNr] Then
Exit Do
End If
If lRs1![ARZIDNR] = lRs![ArzNr] Then
If Format(lRs1![Datum], "mm.dd.yyyy") <= & _
Format(lRs![Datum], "mm.dd.yyyy") Then

Debug.Print " = < " & lRs1![ARZIDNR] & "/" & lRs1![Datum] & _
"/" & lRs1![Datum] & _
"/" & lRs1![ARZPREIS] & _
"/" & lRs![PSTNR]
lRs.Edit
nPreis = lRs1![ARZPREIS]

lRs![ARZEPREIS] = nPreis
lRs![EPREIS] = (nPreis + (nPreis * lRs![ARZAUFPROZ]) & _
/ 100 + lRs![ARZAUFDM]) * lRs![MENGE]
lRs.Update
End If
If Format(lRs1![Datum], "mm.dd.yyyy") > & _
Format(lRs![Datum], "mm.dd.yyyy") Then
nFertig = 1
End If
End If

lRs1.MoveNext
Loop
lRs.MoveNext
Loop

Exit_xAufberDatenHistorie:
Exit Sub

Err_xAufberDatenHistorie:
lMsgText = ""
lMsgText = lMsgText & "Fehler >>" & Err & "<<" & Chr(10)
lMsgText = lMsgText & "Err-Text >>" & Error$ & "<<"
MsgBox lMsgText, , lProcName
Resume Exit_xAufberDatenHistorie
End Sub

Schefti
20.01.2003, 12:40
Wenn beide Datumsfelder vom Datentyp "Datum/Uhrzeit" sind, brauchst Du den Formatwechsel nicht und kannst direkt vergleichen.

Richtigerweise wäre das Format auch "mm\/dd\/yyyy" für die amerikanische Schreibweise. Dort heißt es nämlich 02/20/2003.

Wenn alles nichts hilft, häng doch die DB mal an. Dann läßt sich das Problem garantiert lösen. Beschränk das ganze halt auf die nötigen Tabellen und Funktionen - nur zum Testen als Zip.

gruß

PS: Hast Du das ganze auch mal ohne On Error getestet? Vielleicht ist's ja eine ganz andere Zeile die den Fehler verursacht - hatten wir alles schon.

Rocco
20.01.2003, 12:45
...aber ich würde Dir raten mal die gewünschten Werte aus dem Recordset vor dem Vergleich einer passenden Variablen (wenn Du nicht weist welcher Typ, dann VARIANT) zuzuweisen und diese im Anschluß zu vergleichen.
Der Vorteil: Du kannst beim Debugging den Wert nach der Formatierung prüfen und auch die zu vergleichenden Werte im IF-Zweig prüfen.

Greeedins
Rocco