文本框中的sql注入

oknwwptz  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(552)

我对ms-access还不熟悉。
所以,我编写了一个sql查询(query name=qryemployeeinfo),它显示员工信息。查询输出两列。员工id(标题名称=员工\u id)和相应的员工地址(标题名称=员工\u地址)。
我的访问表单有一个文本框(文本框名称=txtemployeeid),我希望用户能够在其中输入员工id,并将相应的员工地址输出到另一个文本框(文本框名称=txtemployeeaddress)。我还希望employee\u地址采用字符串变量的格式,以便以后可以对其执行其他vba检查(例如-如果像“california”,那么…之类)。
我想写一个(我认为)被称为注入sql查询的东西,这样我就可以从查询中提取特定雇员id的地址数据

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

我写得对吗?
如果是这样,那么如何将输出转换为字符串变量格式(变量名=stremployeeaddress)?
将雇员地址转换为字符串变量格式后,我只想使用txtemployeeaddress.value=stremployeeaddress填充雇员地址文本框。同样,我还希望employee\u地址采用字符串变量的格式,以便以后可以对其执行其他vba检查(例如-如果像“california”,那么…之类)。
如果您能提供任何帮助,我们将不胜感激。

q7solyqu

q7solyqu1#

如果employee\u id是数字字段,请删除撇号分隔符。
如果employee\u 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()表达式可以在textbox controlsource属性中,前面加上=符号。
但是,域聚合函数的执行速度很慢。因此,不要使用文本框,而是使用组合框来选择雇员。在组合框行源中包括员工信息。textbox中的表达式引用组合框的列: =combobox.Column(1) . 问题是combobox对可以拉入列中的字符数有限制,所以如果字段是memo(长文本)类型,这种方法是不可行的,应该使用dlookup。
只要此窗体处于打开状态,该地址就可以在文本框中使用。如果希望即使在窗体关闭后,该地址也可用于其他过程,则需要设置全局或公共变量。此类变量必须在模块头中声明,以使其可用于多个过程。tempvar是另一种保存值以备将来使用的方法。我从来没用过。

相关问题