MS Access 2010:根据登录的用户

时间:2018-04-25 02:02:58

标签: sql ms-access ms-access-2010

我正在Microsoft Access 2010中创建一个数据库,当用户登录数据库时,用户只能看到与他或她相关的记录。我在IssuingManager字段[Forms]![frm_Home]![txtUser]中专门为记录的查询添加了一个条件,但在运行时我总是得到enter parameter valuetxtUser是我主表单中的一个不可见的文本框,因此记录将引用要过滤的记录。我的主要目标是将用户的数据限制在他们自己的记录中,并将其隐藏或阻止他人。我是新手,仍然可以学习。我可以过滤数据或将其限制为仅与当前登录用户相关的记录的任何帮助或其他方式都是一个很大的帮助。

这是我的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 :(得分:1)

我建议完全避免在查询中使用表单的字段引用。如果表单已关闭,则查询将请求参数,就像您的情况一样。

用标准模块中创建的全局函数替换引用。此函数可以存储名称,例如,静态/全局变量或从表中检索它。主表单或登录表单可以设置此变量/表记录一次,然后可以关闭表单而不影响查询功能

答案 1 :(得分:0)

添加另一列并输入用户名。因此,在选择记录时,用户='用户名'。他们查看用户名的所有数据。

答案 2 :(得分:0)

你的方法很好&正确;你只是有某种驾驶舱实施错误

查询中的条件应为:Forms!frm_Home.txtUser

您的表单名称或文本框名称可能会出现拼写错误

使文本框可见并输入有效条目并手动运行查询

你得到的似乎是一个参数提示,这意味着它无法找到对象,即名为frm_Home的表单