@ZygD, Ecco lo schema:
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
ti spiego. Per prima cosa definisci i tuoi "tipi di oggetto". Hai un UTENTE, un GRUPPO e ciò che hai chiamato DATI. A parte questo è probabilmente una buona idea usare un'altra parola invece di DATA. Usa qualcosa come ITEM, o anche DATAITEM. Per questo esempio userò i DATI. Ok, quindi ognuna di queste tabelle ha un valore intero come chiave primaria. La chiave primaria è l'identificativo univoco per il record nella tabella e aumenta automaticamente. Puoi impostarlo in Access.
Ora che si dispone delle tre tabelle di tipi di oggetto, è necessario ciò che viene chiamato "join tables" per descrivere le relazioni tra le tabelle di "tipo oggetto". La tabella USER_GROUP dice che un utente può appartenere a uno o più gruppi. Ad esempio, se l'Utente 1 apparteneva sia al Gruppo 1 sia al Gruppo 2, nella tabella USER_GROUP si avrebbero due record per descrivere tali relazioni. La prima riga sarebbe 1,1 e la seconda riga sarebbe 1,2.
La tabella GROUP_DATA descrive la relazione tra GROUP e DATA. Ad esempio, il Gruppo 1 potrebbe avere accesso a Dati 2 e Dati 3. Di nuovo, si avranno due righe nella tabella GROUP_DATA per descrivere tali relazioni. La prima riga sarebbe 1,2 e la seconda sarebbe 1,3.
Ora, a causa Utente 1 appartiene al gruppo 1, quindi l'utente 1 avrà accesso ai dati 2 e 3. Il vostro SQL diventa quindi semplificato:
// 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
Ebbene, potrebbe dirci quali criteri una risposta deve incontrarsi per essere accettato come risposta da voi? Sarebbe accettabile per te se avessi bisogno di eseguire il codice VBA per risolvere il problema o stai lavorando solo con il progettista di query? – Binarus
Preferirei farlo solo in SQL. Ma sembra impossibile senza modificare la struttura dei miei dati. Quindi anche VBA va bene. – ZygD
La radice di questo problema è lo schema. Non sono sicuro di quale problema stai cercando di risolvere, ma questo progetto di tabella/colonna non è buono. Questo è il motivo per cui hai problemi con SQL. Che cosa succederà se si assegna "y" a tutti i valori nelle colonne GroupA e GroupB della tabella AccessRights? Penso che quello che stai cercando di costruire sia un sistema di autenticazione basato sui ruoli. I tuoi tavoli saranno diversi per quello. – itsben