2016-06-09 16 views
0

Ich habe eine große Datenbank, die die Anwesenheit von Mitarbeitern bei Schulungsveranstaltungen überwacht. Jeder Datensatz ist ein Mitarbeiter, und es gibt (zusammen mit grundlegenden Informationen) etwa hundert Felder, die Schulungsveranstaltungen in den letzten 10 Jahren darstellen. Diese Felder sind alle Ja/Nein-Checkboxen und werden überprüft, ob der Mitarbeiter an diesem Workshop teilgenommen hat.Gibt es eine Möglichkeit, Feldnamen in einem Zugriffsformular bedingt anzugeben?

Ich habe ein Formular, das die Anzeige von Informationen für einzelne Mitarbeiter leicht ermöglicht, aber ich möchte eine dynamische Liste in diesem Formular, die zeigt, welche Ereignisse der aktuell ausgewählte Mitarbeiter besucht.

Also ich möchte eine Liste, um zu sehen, welche Felder für den angegebenen Datensatz als wahr bezeichnet werden.

Gibt es eine Möglichkeit, dies zu tun? Ich habe den ganzen Tag gesucht und kann keine Lösung finden. Vielen Dank.

+3

Klingt wie hässliche 'Datenbank-Normalisierung'. Es sollte einen Tisch für die Mitarbeiter geben, einen Tisch für Workshops und einen Tisch, der Mitarbeiter und Workshops verbindet (n-zu-m-Beziehung) http://stackoverflow.com/questions/3397349/meaning-of-nm-and-1n-in- Datenbank Design. – BitAccesser

Antwort

2

Vielleicht wie dieser somthing, unter der Annahme, dass alle boolean Felder sind relevant und Feldname ist Werkstatt Name:

Public Function getWorkshops(ByVal strEmployee As String) as String 
' Declare vars 
Dim db as DAO.Database 
Dim rs as DAO.Recordset 
Dim lngFieldsCount as Long 
Dim n as Long 
Dim strWorkshops as string 

Set db = CurrentDb() ' 
lngFieldsCount = db.TableDefs("myTable").Fields.Count ' Count number of fields to iterate through 
Set rs = db.OpenRecordset("SELECT * FROM myTable WHERE employeeName LIKE '" & strEmployee & "';",DbOpenSnapshot) 
Do While not rs.Eof 
    For n = 0 to lngFieldsCount -1 ' iterate through all fields 
    If TypeOf rs.Fields(n) is dbBoolean Then ' check if field is boolean 
     If rs.Fields(n) Then ' check if boolean is true 
     strWorkshops = strWorkshops & rs.Fields(n).Name & vbCrLf ' add field names to string, separated by linebreaks 
     End If 
    End If 
    Next n 
    rs.MoveNext 
Loop 
getWorkshops = strWorkshops 'Set result of function 
'Clean up 
rs.Close 
Set rs = Nothing 
Set db = Nothing 
End Function 

Dies gibt den Namen aller wahren Felder in einem String mit Zeilenumbrüchen getrennt (nicht getestet).

+0

Sie können ein Unterformular verwenden. [Hinzufügen einer Checkliste zu MS Access] (https://www.youtube.com/watch?v=cQQSXofvQh0) –

Verwandte Themen