在Access 2007中,我尝试使用NTlogin通过SQL查询从表中检索值(请参阅下面的代码)。表单加载后,我收到一条错误消息“编译错误:预期的功能或变量”。有人能告诉我如何解决这个错误。
Private Sub Form_Load()
Dim UserName As String
Dim strSQL As String
Dim strDept As String
UserName = Environ("USERNAME")
strSQL = "SELECT DEPT FROM IDs WHERE NTLOGIN =" & UserName
strDept = DoCmd.RunSQL(strSQL)
cmdSave.Enabled = False
cmdEdit.Enabled = True
cmdPrevious.Enabled = True
cmdNext.Enabled = True
End Sub
答案 0 :(得分:1)
我有一段时间没有触及Access,所以我不记得:Environ("USERNAME")
是否返回了USERNAME
环境变量?
如果是这样,那么您的代码中就会出现安全漏洞。具体来说,您可以接受SQL注入攻击。
想象一下,在用户运行Access之前,用户将USERNAME
环境变量设置为
''; DROP TABLE IDS;
在这种情况下,您将执行语句:
从ID中选择DEPT来自NTLOGIN =''; DROP TABLE IDS;
你可能不希望这种情况发生......
答案 1 :(得分:1)
您不能将RunSQL与select语句一起使用。它仅适用于动作查询。
如果你想要一个记录集,你可以说,除其他外:
strSQL = "SELECT DEPT FROM IDs WHERE NTLOGIN ='" & UserName & "'"
Set rs=CurrentDB.OpenRecordset(strSQL)
其中rs是DAO.Recordset