MS Access 2010: автоматически фильтрует все записи в зависимости от пользователя, вошедшего в систему - PullRequest
0 голосов
/ 25 апреля 2018

Я создаю базу данных в Microsoft Access 2010, где, когда пользователь вошел в базу данных, он увидит только те записи, которые связаны с ним или с ней. Я поместил критерий в запрос записи, в частности, в поле IssuingManager, которое равно [Forms]![frm_Home]![txtUser], но я всегда получаю enter parameter value при запуске. txtUser - это невидимое текстовое поле в моей основной форме, поэтому записи будут содержать ссылку на то, какие записи следует фильтровать. Моя главная цель - ограничить данные пользователя своими записями и скрыть или заблокировать их для других. Я новичок в доступе и все еще учусь этому. Любая помощь или другие способы, которыми я могу отфильтровать данные или ограничить их записями, относящимися только к текущему пользователю, вошедшему в систему, - большая помощь.

Это мой код SQL:

SELECT AdditionalFields.Status, tbl_NTE.CaseIDNo, tbl_NTE.EmployeeName, 
tbl_PAH.DPosition, tbl_NTE.Function, tbl_NTE.IssuingManager, 
tbl_NTE.ApprovingManager, tbl_NTE.ObjectOfViolation, tbl_NTE.Offense, 
tbl_NTE.ClassPenalty, tbl_NTE.CorrectiveActionPenalty, 
tbl_NTE.ObjectOfViolation2, tbl_NTE.Offense2, tbl_NTE.ClassPenalty2, 
tbl_NTE.ObjectOfViolation3, tbl_NTE.CorrectiveActionPenalty2, 
tbl_NTE.Offense3, tbl_NTE.ClassPenalty3, tbl_NTE.ObjectOfViolation4, 
tbl_NTE.CorrectiveActionPenalty3, tbl_NTE.Offense4, tbl_NTE.ClassPenalty4, 
tbl_NTE.CorrectiveActionPenalty4, tbl_NTE.DatesWhenActsWasWereCommited, 
tbl_NTE.DatesWhenActsWasWereDiscovered, tbl_NTE.NTEDate, 
tbl_NTE.NTELastDateModified, tbl_NTE.NTELastTimeModified, 
tbl_NTE.NTELastUser, tbl_PAH.PAHDate, tbl_PAH.PAHLastDateModified, 
tbl_PAH.PAHLastTimeModified, tbl_PAH.PAHLastUser, tbl_NCA.NCADate, 
tbl_NCA.NCALastDateModified, tbl_NCA.NCALastTimeModified, 
tbl_NCA.NCALastUser, tbl_NTE.EndorsedNTENoticeToHR, 
tbl_NTE.EndorsementOfNTEToIS, tbl_NTE.DateReceivedNTEByTheEmployee, 
tbl_NTE.SubmissionOfWEtoIS, tbl_NTE.SubmissionOfWEtoHRER, 
tbl_NTE.InitialDecision, tbl_PAH.ScheduleForPAH, tbl_PAH.Recommendation, 
tbl_PAH.EndorsementOfDecisionNoticeFromPAHCommitteeChairToHR, 
tbl_PAH.EndorsementOfFinalizedPAHRecommendationToIS, 
tbl_NCA.EndorsementOfDA2ToHRForReview, tbl_NCA.EndorsementOfReviewedDA2ToIS, 
tbl_NCA.EmployeeAcceptanceOfDecision, 
AdditionalFields.DescriptionOfPenaltyFinalDecision, 
AdditionalFields.ApplicableDatesofEffectivity, AdditionalFields.Remarks, 
AdditionalFields.RunningTAT, AdditionalFields.TAT, tbl_NTE.EHRID, 
tbl_NTE.IssuingManagerEmailAddress, tbl_NTE.WrittenExplanationDueDate, 
tbl_NTE.OffenseNo5, tbl_NTE.Offense5, tbl_NTE.ObjectOfViolation5, 
tbl_NTE.ClassPenalty5, tbl_NTE.CorrectiveActionPenalty5, tbl_NTE.OffenseNo6, 
tbl_NTE.Offense6, tbl_NTE.ObjectOfViolation6, tbl_NTE.ClassPenalty6, 
tbl_NTE.CorrectiveActionPenalty6, tbl_NTE.OffenseNo7, tbl_NTE.Offense7, 
tbl_NTE.ObjectOfViolation7, tbl_NTE.ClassPenalty7, 
tbl_NTE.CorrectiveActionPenalty7
FROM (tbl_Worker INNER JOIN ((tbl_PAH INNER JOIN tbl_NCA ON tbl_PAH.
[CaseIDNo] = tbl_NCA.[CaseIDNo]) INNER JOIN AdditionalFields ON 
tbl_NCA.CaseIDNo = AdditionalFields.CaseIDNo) ON tbl_Worker.WorkerID = 
tbl_NCA.NameOfIssuingManager) INNER JOIN tbl_NTE ON (tbl_NTE.CaseIDNo = 
tbl_PAH.CaseIDNo) AND (tbl_Worker.WorkerName = tbl_NTE.IssuingManager)
WHERE (((tbl_NTE.IssuingManager)=[Forms]![frm_Home]![txtUser]));

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Добавьте еще один столбец и введите имя пользователя. Поэтому при выборе записей возникает условие, где user = 'username'. Они смотрят всю базу данных на то, что имеет имя пользователя.

0 голосов
/ 26 апреля 2018

ваш метод в порядке и правильно; у вас просто какая-то ошибка реализации кабины

критерии в запросе должны быть следующими: Forms! Frm_Home.txtUser

у вас может быть орфографическая ошибка в имени формы или текстового поля

сделать текстовое поле видимым, ввести действительную запись и выполнить запрос вручную

то, что вы получаете, похоже на приглашение параметра, что означает, что он не может найти объект, то есть форму с именем frm_Home

0 голосов
/ 25 апреля 2018

Я бы рекомендовал вообще не использовать ссылки на поля формы в запросах.Если форма закрыта, запрос будет запрашивать параметр, как, скорее всего, в вашем случае.

Заменить ссылку глобальной функцией, созданной в стандартном модуле.Эта функция может хранить имя, например, в статической / глобальной переменной или извлекать его из таблицы.Основная форма или форма входа в систему может установить эту переменную / запись таблицы один раз, затем форма может быть закрыта без ущерба для функциональности запросов

...