PDA

Vollständige Version anzeigen : Dcount Kriterien (zu blöd?)


kommune1
24.10.2003, 09:48
Hi,

ich bastle jetzt schon einige zeit an einer Access Datenbank die einen Excel Datei importiert und aus dieser dann einige spalten zählt.

Das zählen habe ich über DCount realisiert, da es ca 40 Werte sind die gezählt werden müssen.

Da viele bedingungen gleich sind habe ich sie über variablen vordefiniert und setzte so die Kriterien meist nur aus variablen zusammen.

Mein Problem:

Ich habe ein Feld in dem der Buchstabe N steht wenn es STANDARD ausführung ist. Wenn dort kein N steht ist es automatisch NONSTANDARD.
Diese "einfache" untescheidung macht mir riesen probleme! :( :bawling:


'Hilfsvariablen zum vereinfachen der Abfragen
Dim Feld, Source, GERAN, UTRAN, stand, klutran, klgeran, Cancel, noncanc, comp336, non336, WAyes, WAno As String

(....)


'Definition der Abfrage-Hilfsvariablen
Counter = "[SD-SRI]"
Source = "PerData"
UTRAN = "[NE-VerwNr] in (6,7,8,20,107,207)"
GERAN = "[NE-VerwNr] in (1,2,3,4,5,9,10,11,12,13,102,103,202,203)"
klgeran = "[NE-VerwNr] in (2,3,4,9,10,102,103,202,203)"
klutran = "[NE-VerwNr] in (7,8,20,107,207)"
stand = "[Edition] in ('N')"

(....)

'Zählen der Datensätze


'GERAN Standard
GStotal = DCount(Counter, Source, GERAN & " And " & stand & " And " & WAyes & " And " & noncanc & " And " & non336)



Das ist nur ein auszug.

Bin mir fast zu 100% sicher das es nur nen Syntax fehler ist oder?

Danke für euer hilfe

Daniel

Arne Dieckmann
24.10.2003, 09:58
Hm.
Ausgrechnet die Variablen, die Du im DCount-Beispiel verwendest, kennt man nicht (alle):
WAyes, noncanc, non336


Übrigens:
Durch die Dim-Anweisung wird nur die letzte Varibale als String definiert. Besser wäre:
Dim Feld As String, Source As String, GERAN As String , ... , WAno As String

kommune1
24.10.2003, 10:02
hi,

danke für den hinweis mit DIM
aber gibts da nicht was mit weniger schreibarbeit ;)


Die anderen Definitionen folgen:


Cancel = "[Cancelled] = -1"
noncanc = "[Cancelled] = 0"
comp336 = "[SD-SRI] Like '336*'"
non336 = "[SD-SRI] Not Like '336*'"
WAyes = "[WA] = -1"
WAno = "[WA] = 0"
prSAG = "[Problem] in ('4')"
prSRI = "[Problem] in ('2','9')"
prMAT = "[Problem] in ('1')"
prCDD = "[Problem] in ('3','5','6','7','8')"

Arne Dieckmann
24.10.2003, 10:24
Was mir jetzt nur so einfällt - Debuggen:

Bastel das Kriterium extra zusammen:

Dim Krit as String

Krit=GERAN & " And " & stand & " And " & WAyes & " And " & noncanc & " And " & non336

Debug.Print Krit

GStotal = DCount(Counter, Source, Krit)



Durch die Debug-Zeile kannst Du Dir den zusammengebastelten String im Direktfenster anschauen und evtl. mal in einer Abfrage testen. Vielleicht werden tatsächlich keine Datensätze gefunden, da Du das Kriterium falsch oder "zu streng" erstellst.

kommune1
24.10.2003, 10:31
Hi,

Werte kommen schon raus, 7 stück um genau zu sein.
Habe das ganze ja schon über abfragen gelöst, aber ich wollte das ganze einheitlich gestalten und alles in VBA "selektieren"

Die DEBUG zeile bringt mir irgendwie keinen unterschied, was sollte da genau anderes passiern?

danke trotzdem für deine tips. :)

Arne Dieckmann
24.10.2003, 10:34
Jetzt weiss ich leider auch nicht weiter. Was ist eigentlich das Problem - liefert DCount immer 0 oder wird tatsächlich ein Fehler angezeigt?

kommune1
24.10.2003, 11:01
ja dcount gibt mir 0 zurück, wenn ich die stand bedingung raus mache dann kommt wieder ein "richtiger" wert raus

Arne Dieckmann
24.10.2003, 11:07
Du nimmst also den roten Teil heraus:

GERAN & " And " & stand & " And " & WAyes & " And " & noncanc & " And " & non336)

und erhältst endlich einen Wert (und sonst 0)?

Da stand = "[Edition] in ('N')" ist - kontrolliere mal, ob es überhaupt solche Datensätze gibt.

Ansonsten bin ich am Ende meiner Ratschläge. Die Ferndiagnose hat eben auch so ihre Grenzen.

kommune1
24.10.2003, 11:16
Genau, wenn ich den roten teil entferne erhalte ich einen Wert.

Edition lasse ich in meine Source (PerData) einfügen, dort steht dann ein Buchstabe.

Dieser Buchstabe wird über die Funktion Teil generiert und ist auch richtig.


dann werde ich bei meiner alten methode bleiben.

Never touch a running system :cool: