2012-04-01 7 views
1

Bitte helfen Sie mir mit einem konzeptionellen Problem, das ich seit 3 ​​Tagen herausfinden möchte. Ich versuche Access zu verwenden, um die Verfolgung von Trainings zu zentralisieren, die zuvor auf separaten Excel-Tabellen durchgeführt wurden. Ich habe ungefähr ~ 340 Angestellte, die in 12 verschiedene Positionen kategorisiert sind, alle mit unterschiedlichem Grad des erforderlichen Trainings. Ich habe ein Beispiel unter:MS Access Table Design für Mitarbeiter mit unterschiedlichen Schulungsanforderungen

Position 1: Klasse A, Klasse B, Klasse C Position 2: Klasse A, Klasse B Position 3: Klasse A Position 4: Klasse A

Wie Sie sehen können, benötigen alle 340 Mitarbeiter das Class A Training. Aber nur einige Positionen erfordern die Klasse B oder sogar Klasse C. Im Moment habe ich eine einzige Tabelle mit dem Namen der Person und den damit verbundenen Kontaktinformationen und allen 12 möglichen Klassen. Alles, was ich tun möchte, ist das Datum, an dem sie das Training abgeschlossen haben, sonst nichts. Das Problem, auf das ich gestoßen bin, ist, dass das Date/Time-Feld nicht zwischen jemandem unterscheiden kann, der diese Klasse nehmen muss und es noch nicht getan hat (ein Null-Wert) oder jemandem, der die Klasse nicht belegen muss und offensichtlich hat es nicht abgeschlossen (auch ein Nullwert).

Was ich habe versucht:

-A Abfrage berechnete Felder verwenden, die in dem Wert „NOT REQ“, wenn die Arbeitsstelle die Ausbildung erfordert nicht eintreten werden. Ein Beispiel ist unten: HAZMAT Inspector: IIf ([POSITION] = "Planer laden", [HAZ Inspector], "nicht REQ") Warum es nicht funktioniert: Einfügen von Text in das Feld ändert es von einem Datum zu einem Textfeld, so dass ich Date Funktionen nicht mehr verwenden kann, um festzustellen, ob Training abgelaufen ist. Außerdem kann ich das Feld in einem Formular nicht bearbeiten und es in der ursprünglichen Tabelle speichern, da es ein berechnetes Feld ist.
Mögliche Lösung (?): Verwenden Sie eine SQL Update-Anweisung in VBA, um den Wert eines berechneten Felds wieder in die ursprüngliche Tabelle zu schreiben? Ich lief immer noch auf das Problem, dass ich das Feld nicht mit dem Formular zu aktualisieren kann ...

-Separate Tabellen für jede Position (?): Das Hauptproblem sehe ich darin ist, dass viele Positionen erfordern Genau die gleiche Klasse, also würde ich viele überflüssige Informationen eingeben.

-Separate Tabellen für jede Klasse (?): Ich kann sehen, wie ich mit dieser Route sicherer wäre, aber damit es nützlich wäre, würde ich mir vorstellen, dass ich eine Art von VBA-Code schreiben müsste Wenn ich jemanden der Position X zuweise, wird seine Mitarbeiter-ID automatisch in den Tabellen A, B, & C basierend auf den Trainingsanforderungen seiner Position ausgefüllt. Ist das machbar? Ist das die beste Option, oder bin ich gerade daneben?

Antwort

0

Wie Sie bereits erläutert haben, können Sie in einem berechneten Feld keine Einträge vornehmen. Sie brauchen einen anderen Ansatz. Der Ansatz hängt davon ab, ob Sie nur einen Mitarbeiter pro Formular anzeigen (Single Form) oder ob Sie eine Liste von Mitarbeitern anzeigen (Continuous Form oder Datasheet).

Auf einem Single Form würde ich einfach die Felder deaktivieren, die nicht gelten

me!txtClassBDate.Enabled = me!txtPosition = 2 

Sie diesen Code aus Form_Current anrufen können und möglicherweise in der AfterUpdate einer Kontrolle verwendet, um die Position Typ zu verändern.


Die andere Möglichkeit ist die bedingte Formatierung. Wählen Sie das Datum: TextBox; dann öffne das Menü "Format"> "Bedingte Formatierung ..." (Ich weiß nicht, wo das auf den Bändern von Acc 2007+ steht). Hier können Sie das Aussehen des Steuerelements abhängig von der Auswertung eines Ausdrucks definieren. Sie können das Steuerelement auch in einem deaktivierten Zustand festlegen.