Ich habe eine Access-Datenbank für ein Arbeitsprojekt, kann aber aufgrund der Art der Arbeit leider nicht zu viele Details preisgeben. Aber im Grunde habe ich eine Tabelle mit Aktionen, die ausgeführt werden müssen, jede Aktion hat ein Fälligkeitsdatum und ich habe eine Tabelle, die zählt, wie viele Aktionen fällig sind und in jedem Monat abgeschlossen wurden, und zwar nach der folgenden Logik:
Group by Month([Due Date])
Count [Due Date]
Für eine Abfrage und dasselbe für die abgeschlossenen Daten in einer anderen Abfrage. Ich habe dann eine letzte Abfrage, die die Abfrage der Fälligkeitsdaten, eine Abfrage der abgeschlossenen Daten und eine Monatstabelle des Jahres verwendet (sonst werden leere Monate nicht angezeigt). Ich habe also Folgendes:
Nz(Due Dates Totals.Count,0)
Nz(Completed Dates Totals.Count,0)
Calendar.Month Number
Calendar.Month Name
(Die Nz
obigen 's dienen dazu, dass mein Bericht keine leeren Stellen enthält.)
Mein Bericht verwendet dann die Monatsnummer zum Sortieren und Gruppieren, den Monatsnamen zum Anzeigen des Monats für Benutzer und eine kleine Tabelle mit den fälligen Aktionen und der Gesamtzahl der Aktionen. Ich habe dann eine bedingte Formatierung für die Tabelle, sodass sie rot hervorgehoben wird, wenn weniger als die fälligen Aktionen abgeschlossen sind, grün, wenn sie gleich sind, und wenn mehr als die fälligen Aktionen abgeschlossen sind, ist das Feld „abgeschlossen“ blau.
Dies funktioniert einwandfrei, es sei denn, eine der Zahlen ist zweistellig. In diesem Fall wird nur die erste Ziffer jedes Wertes verglichen, z. B.19 < 2
Ich habe versucht, den Wert im Feld mit der fälligen Anzahl aus der Abfrage selbst zu vergleichen und ihn mit dem Wert im Feld im Bericht zu vergleichen, und beide haben das gleiche Problem. Ich vermute, dass sie als Zeichenfolgen und nicht als Zahlen verglichen werden, aber ich weiß nicht, wie ich die Abfrage zwingen kann, die Anzahl als Zahl zu speichern.
Vielen Dank für jede Hilfe. (Und übrigens, es sind noch mehr Tabellen und ähnliches in der Datenbank, Excel ist für diese Arbeit nicht das richtige Tool.)
Antwort1
Wenn MS Access einen numerischen Wert als Zeichenfolge interpretiert, können Sie den Zeichenfolgenwert mithilfe einer der folgenden Methoden in einen numerischen Datentyp umwandeln.Typkonvertierungsfunktionen, wobei die Auswahl natürlich von der Art Ihrer Daten abhängt:
CCur
(zur Währung)CDbl
(verdoppeln)CDec
(zu Dezimal)CInt
(zu Integer)CLng
(zu lang)CSng
(zu Single)
Da Sie anscheinend mit ganzen Zahlen arbeiten, würde ich vorschlagen, entweder oder zu verwenden , wenn Ihre Werte wahrscheinlich 32767 (2 15 -1) CInt
überschreiten .CLng
Ihr Code könnte also folgendermaßen aussehen:
CInt(Nz([Due Dates Totals].Count,0))
CInt(Nz([Completed Dates Totals].Count,0))
Calendar.[Month Number]
Calendar.[Month Name]
Antwort2
Habe die Lösung gefunden. Ich habe die Nz()
Funktionen multipliziert, um 1
sie in Zahlen und nicht in Zeichenfolgen umzuwandeln.
zB statt
Nz(Due Dates Totals.Count,0)
ich benutzte
1 * Nz(Due Dates Totals.Count,0)