@ZygD, oto schemat:
USER
user_id int primary key auto_increment
user_name varchar(100)
password varchar(100)
GROUP
group_id int primary key auto_increment
group_name varchar(100)
DATA
data_id int primary key auto_increment
data_name varchar(100)
USER_GROUP
user_id int
group_id int
GROUP_DATA
group_id
data_id
wytłumaczę. Najpierw definiujesz swoje "typy obiektów". Masz UŻYTKOWNIKA, GRUPĘ i to, co nazwałeś DANYMI. Poza tym dobrym pomysłem jest użycie innego słowa zamiast DATA. Użyj czegoś takiego jak ELEMENT, a nawet DATAITEM. W tym przykładzie użyję DATA. Ok, więc każda z tych tabel ma wartość całkowitą, ponieważ jest to klucz podstawowy. Klucz podstawowy jest unikalnym identyfikatorem rekordu w tabeli i zwiększa się automatycznie. Możesz to ustawić w Access.
Teraz, gdy masz już swoje trzy tabele typu obiektów, potrzebujesz czegoś, co nazywa się "tabelami złączeń", aby opisać relacje między tabelami "typu obiektu". Tabela USER_GROUP mówi, że użytkownik może należeć do jednej lub więcej grup. Na przykład, jeśli Użytkownik 1 należał zarówno do Grupy 1, jak i Grupy 2, w tabeli USER_GROUP byłyby dwa rekordy opisujące te relacje. Pierwszy wiersz będzie wynosił 1,1, a drugi - 1,2.
Tabela GROUP_DATA opisuje relacje między GRUPĄ a DANYMI. Na przykład grupa 1 może mieć dostęp do danych 2 i danych 3. Ponownie, w tabeli GROUP_DATA zostaną wyświetlone dwa wiersze opisujące te relacje. Pierwszy rząd wynosiłby 1,2, a drugi 1,3.
Teraz, ponieważ Użytkownik 1 należący do grupy 1, a potem Użytkownik 1 będzie miał dostęp do danych 2 i 3. Twój SQL następnie zostaje uproszczonej:
// Authenticate the user with user_name and password:
select @user_id = a.user_id from user a where a.user_name = @user_name and a.password = @password
// Get DATA by user_id
select c.data_id, c.data_name from user a join group b on a.user_id = b.user_id join data c on b.data_id = c.data_id where a.user_id = @user_id
No, proszę powiedzieć nam, jakie kryteria odpowiedź musi się spotkać, aby zostać zaakceptowanym przez ciebie jako odpowiedź? Czy byłbyś do przyjęcia, gdybyś musiał uruchomić kod VBA, aby rozwiązać problem, czy też pracujesz tylko z projektantem zapytań? – Binarus
Wolałbym robić to tylko w SQL. Ale wydaje się to niemożliwe bez zmiany struktury moich danych. Więc VBA też jest dobry. – ZygD
Źródłem tego problemu jest schemat. Nie jestem pewien, jaki problem próbujesz rozwiązać, ale ten projekt tabeli/kolumny nie jest dobry. Właśnie dlatego masz problemy z SQL. Co się stanie, jeśli przypiszesz "y" do wszystkich wartości w kolumnach GroupA i GroupB tabeli AccessRights? Myślę, że to, co próbujesz zbudować, to oparty na rolach system uwierzytelniania. Twoje stoły będą się różnić. – itsben