首页 > 解决方案 > MS Access 2010:根据登录用户自动过滤所有记录

问题描述

我正在 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]));

标签: sqlms-accessms-access-2010

解决方案


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

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


推荐阅读