Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自文本框的SQL注入_Sql_Vba_Ms Access - Fatal编程技术网

来自文本框的SQL注入

来自文本框的SQL注入,sql,vba,ms-access,Sql,Vba,Ms Access,我是MS Access的新手 因此,我编写了一个显示员工信息的SQL查询(查询名称=qryEmployeeInfo)。查询输出两列。员工ID(标题名称=员工ID)和相应的员工地址(标题名称=员工地址) 我的访问表单有一个文本框(文本框名称=txtEmployeeID),我希望用户能够在其中输入员工ID,并将相应的员工地址输出到另一个文本框(文本框名称=txtEmployeeAddress)。我还希望employee_地址采用字符串变量的格式,以便以后可以对其执行其他VBA检查(例如,如果像“Ca

我是MS Access的新手

因此,我编写了一个显示员工信息的SQL查询(查询名称=qryEmployeeInfo)。查询输出两列。员工ID(标题名称=员工ID)和相应的员工地址(标题名称=员工地址)

我的访问表单有一个文本框(文本框名称=txtEmployeeID),我希望用户能够在其中输入员工ID,并将相应的员工地址输出到另一个文本框(文本框名称=txtEmployeeAddress)。我还希望employee_地址采用字符串变量的格式,以便以后可以对其执行其他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_地址采用字符串变量的格式,以便以后可以对其执行其他VBA检查(例如,如果像“California”,那么…什么)


如果您能提供任何帮助,我们将不胜感激

如果employee_ID是数字字段,请删除撇号分隔符

如果employee_ID是一个文本字段,请移动第一个撇号,使其位于引号内。
“从qryEmployeeInfo中选择员工地址,其中员工ID=”&txtEmployeeID&“”

然后
txtEmployeeAddress=rs!员工地址

但是,只需使用DLookup即可,而无需打开记录集对象。
txtEmployeeAddress=DLookup(“员工地址”、“qryEmployeeInfo”、“员工ID=”&txtEmployeeID)

甚至更好的是,消除VBA。DLookup()表达式可以位于textbox ControlSource属性中,仅在前面加上=符号

但是,域聚合函数的执行速度可能较慢。因此,不要使用文本框,而是使用组合框来选择员工。在组合框行源中包含员工信息。文本框中的表达式引用组合框的列:
=combobox.column(1)
。问题是combobox限制了可以拉入列中的字符数,所以若字段是memo(长文本)类型,这种方法是不可行的,应该使用DLookup


只要此表单处于打开状态,该地址就可以在文本框中使用。如果您希望该地址即使在窗体关闭后也可供其他过程使用,则需要设置一个全局变量或公共变量。此类变量必须在模块头中声明,以使其可用于多个过程。临时变量是保存值以备将来使用的另一种方法。我从未使用过它们。

如果员工ID是一个数字字段,请删除撇号分隔符

如果employee_ID是一个文本字段,请移动第一个撇号,使其位于引号内。
“从qryEmployeeInfo中选择员工地址,其中员工ID=”&txtEmployeeID&“”

然后
txtEmployeeAddress=rs!员工地址

但是,只需使用DLookup即可,而无需打开记录集对象。
txtEmployeeAddress=DLookup(“员工地址”、“qryEmployeeInfo”、“员工ID=”&txtEmployeeID)

甚至更好的是,消除VBA。DLookup()表达式可以位于textbox ControlSource属性中,仅在前面加上=符号

但是,域聚合函数的执行速度可能较慢。因此,不要使用文本框,而是使用组合框来选择员工。在组合框行源中包含员工信息。文本框中的表达式引用组合框的列:
=combobox.column(1)
。问题是combobox限制了可以拉入列中的字符数,所以若字段是memo(长文本)类型,这种方法是不可行的,应该使用DLookup


只要此表单处于打开状态,该地址就可以在文本框中使用。如果您希望该地址即使在窗体关闭后也可供其他过程使用,则需要设置一个全局变量或公共变量。此类变量必须在模块头中声明,以使其可用于多个过程。临时变量是保存值以备将来使用的另一种方法。我从未使用过它们。

如果您已经在文本框中输入了员工ID,为什么还需要检索员工ID?我最初的查询写错了:(应该是员工地址。我刚刚在帖子中修复了它……现在应该更有意义了。“SQL注入”是一个术语,用于当用户故意在文本输入中输入格式不正确的值,试图破坏数据库或在没有正确访问权限的情况下访问特权数据时。这仅在通过将搜索值连接到SQL中来构建查询时有效,并且它被认为是构建查询的不安全方式。理想情况下,您可以使用计量查询,可防止SQL注入。如果您已经在文本框中输入了员工ID,为什么还需要检索员工ID?我最初的查询写错了:(应该是员工地址。我刚刚在帖子中修复了它…现在应该更有意义了。“SQL注入”是一个术语,用于当用户故意在文本输入中输入格式不正确的值,试图破坏数据库或在没有正确访问权限的情况下访问特权数据时。这仅在通过将搜索值连接到SQL中来构建查询时有效,并且它被认为是构建查询的不安全方式。理想情况下,您可以使用计量查询,可防止SQL注入。员工ID实际上是字母和数字的组合。关于记录集对象,我真的希望使用此示例更好地了解如何使用记录集对象,因为我是一个noob,希望更好地了解它们的工作方式。但我