从文本框中进行SQL注入

问题描述 投票:0回答:1

我是MS Access的新手,我写了一个SQL查询(query name = qryEmployeeInfo)来显示员工信息。

所以,我写了一个SQL查询(query name = qryEmployeeInfo)来显示员工信息。该查询输出了两列。雇员ID(header name = employee_ID)和对应的雇员地址(header name = employee_address)。

我的Access表单有一个文本框(文本框名称=txtEmployeeID),我希望用户能够在这个文本框中输入employee_ID,并将相应的employee_address输出到另一个文本框中(文本框名称=txtEmployeeAddress)。我也希望 employee_address 是一个字符串变量的格式,这样我就可以在以后对它进行其他的 VBA 检查(例如 - 如果 LIKE "California" THEN...什么的)。

我想写一个(我想)被称为注入式SQL查询的东西,这样我就可以从查询中提取那个特定的employee_ID的地址数据。我相信格式应该是这样的。

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("select employee_address from qryEmployeeInfo where employee_ID = "' & txtEmployeeID & "'", dbOpenDynaset)

我写的正确吗?

如果是的话,那么我如何把这个输出结果变成一个字符串变量格式(变量名=strEmployeeAddress)?

当我把员工地址转换成字符串变量格式后,我想简单地使用txtEmployeeAddress.value = strEmployeeAddress来填充员工地址文本框。同样,我也希望 employee_address 是字符串变量的格式,这样我就可以在以后对它进行其他 VBA 检查(例如 - 如果 LIKE "California" THEN...什么的)。

如果您能提供任何帮助,我将非常感激。

sql vba ms-access access
1个回答
0
投票

如果 employee_ID 是一个数字字段,请去掉括号分隔符。

如果 employee_ID 是一个文本字段,移动第一个引号,使其在引号内。"select employee_address from qryEmployeeInfo where employee_ID = '" & txtEmployeeID & "'"

然后将 txtEmployeeAddress = rs!employee_address

然而,与其打开一个记录集对象,不如直接使用DLookup。txtEmployeeAddress = DLookup("employee_address", "qryEmployeeInfo", "employee_ID =" & txtEmployeeID)

或者更好的是,省去VBA。DLookup()表达式可以在文本框ControlSource属性中,只要在前面加上=号即可。

但是,域集合函数的执行速度会很慢。所以,可以用组合框代替文本框来选择员工。在组合框RowSource中包含员工信息。文本框中的表达式引用组合框的列。=combobox.Column(1). 问题是combobox对列的字符数有限制,所以如果字段是备忘录(长文本)类型,这种方法是不可行的,应该使用DLookup。

只要这个表单是打开的,地址就可以在文本框中使用。如果你想让地址在表单关闭后也能被其他程序使用,那么需要设置一个全局或公共变量。这种变量必须在模块头中声明,以使其对多个程序可用。TempVars是另一种保存值供将来使用的方法。我从未使用过它们。

© www.soinside.com 2019 - 2024. All rights reserved.