PDA

Vollständige Version anzeigen : Dsum und suchkriterium ([Datum])


sLUmp
14.05.2001, 12:42
Halli Hallo,

Ich habe da ein Problem mit dem Datum im suchkriterium von "Dsum":

DSum("Anzahl_Std", "Aktivitaeten", "[Projekt_ID] =" & pid & " AND " & "[Mitarbeiter_ID] =" & pmid & " AND " & "[Datum] = " & Format(rs2![Berichtsmonatk], "mmmm__yyyy"))

wenn dieser Code durchlaufen wird tritt folgender Fehler auf:

Laufzeitfehler '64479':

Der Ausdruck, den Sie als Abfrageparameter eingegeben haben, hat folgenden Fehler verursacht: 'Das Objekt enthält nicht das Automatisierungsobjekt 'April__2001"

Das Feld [Datum] in der Tabelle "Aktivitaeten" enthält Werte wie "01.02.2001, 04.02.2001, 03.03.2002", und
die Felder haben das Format: mmmm__jjjj in dedr Tabelle...

Das Feld [Berichtsmonatk] enthält Werte wie
"01.02.2001, 01.03.2002, 01.04.2001....", sprich immer der erste des Monats..

Mein Versuch:

Access soll alle Felder von [Anzahl_Std] aus der Tabelle "Aktivitaeten" zusammenzählen ,

- die eine bestimmte [Projekt_ID] (z.B. 114) haben und
- die ein bestimmte [Mitarbeiter_ID] (z.B. 8) haben und
- deren [Datum] mit dem "Monat" und dem "Jahr" vom [Berichtsmonatk] übereinstimmen (z.B. April__2001)

sieht da jemand eine Möglichkeit ??

MarioR
14.05.2001, 13:18
Hallo,

vielleicht geht's so

DSum("Anzahl_Std", "Aktivitaeten", "[Projekt_ID] =" & pid & " AND " & "[Mitarbeiter_ID] =" & pmid & " AND " & "month([Datum]) = " & month([Berichtsmonatk]) & " AND " & "year([Datum]) = " & year([Berichtsmonatk]))

sLUmp
14.05.2001, 14:10
Danke :),

Die Fehlermeldung kommt nicht mehr...

:( Hab jetz aber ein anderes Problem, ich habe eine Endlosschleife produziert..

Der Code sieht so aus

If Not IsNull([MO-IDNr]) Then
Dim suchkriterium As String
Dim zsumme As Variant
Dim pid, pmid As String

suchkriterium = "[Projekt-IDk] =" & Str([MO-IDNr])
pid = Str([MO-IDNr])
Debug.Print pid

Do Until rs2.EOF
rs2.FindFirst suchkriterium
If rs2.NoMatch = False Then
pmid = rs2![PM-IDk]
Debug.Print pmid

zsumme = DSum("Anzahl_Std", "Aktivitaeten", "[Projekt_ID] =" & pid & " AND " & "[Mitarbeiter_ID] =" & pmid & _
" AND " & "Month([Datum]) = " & Month(rs2![Berichtsmonatk]) & " AND " & "Year([Datum]) = " & Year(rs2![Berichtsmonatk]))

Debug.Print zsumme
End If

rs2.MoveNext
Loop
End If

Ist da etwas logisch falsch???

MarioR
14.05.2001, 14:39
Hallo,

Du sollst FindFirst aus der Schleife raus nehmen:

...
rs2.FindFirst suchkriterium
If rs2.NoMatch = False Then
Do Until rs2.EOF
pmid = rs2![PM-IDk]
Debug.Print pmid

zsumme = DSum("Anzahl_Std", "Aktivitaeten", "[Projekt_ID] =" & pid & " AND " & "[Mitarbeiter_ID] =" & pmid & _
" AND " & "Month([Datum]) = " & Month(rs2![Berichtsmonatk]) & " AND " & "Year([Datum]) = " & Year(rs2![Berichtsmonatk]))

Debug.Print zsumme

rs2.MoveNext
Loop
End If
End If

O-Schreiner
14.05.2001, 14:40
yepp da ist in der Tat was logisch falsch! :)

Du hast folgende Zeilen von oben runter stehen:

Do Until rs2.EOF
rs2.FindFirst suchkriterium

das eine ist der Einsprungspunkt Deiner (Endlos)-Schleife und das andere ist das (re)-positionieren auf den ersten passenden Datensatz. Den bearbeitest Du und dann machste ein .MoveNext und husch zurück zum .FindFirst .... Auf diese Weise beackerst Du zwar in rasender Geschwindigkeit immer den ersten passenden Datensatz aber zu Deinem gewünschten Ende (EOF) kommst Du nie :)

Mach den .FindFirst vor der Schleife und dann passt's

HTH cu, Olly

O-Schreiner
14.05.2001, 14:41
Da war ich wohl ne Idee langsamer als der Mario :)

sLUmp
14.05.2001, 14:57
Vielen Dank,

Werd das jetz endlich fertigschreiben können!