sql - 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]));
解决方案
我建议完全避免在查询中使用表单的字段引用。如果表单关闭,查询将请求参数,就像您的情况一样。
用标准模块中创建的全局函数替换引用。此函数可以将名称存储在静态/全局变量中或从表中检索。主表单或登录表单可以设置此变量/表记录一次,然后可以关闭表单而不影响查询功能
推荐阅读
- c# - 如何在子集合上使用 where 条件创建分层查询
- python - 如何使用 python3 从大块结构构建球形纳米粒子
- flutter - VSC Flutter - 参数名称无法识别
- python - 如何将签名数组添加到 cv2 图像
- python - 为什么tensorflow在“成功打开动态库libcudart.so.10.1”后会暂停3分钟?
- reactjs - 我正在尝试在我的项目中插入谷歌地图,但出现错误
- python - 如何加快在两个列表中查找匹配值?
- sql - 动态日期列标题 SQL (SSMS)
- java - Stream API collect() 使用 Map 的个人类 Word intsead
- python - 添加到已保存 CSV 的其他列