【问题标题】:VBA sql query problemVBA sql查询问题
【发布时间】:2009-07-14 06:43:44
【问题描述】:

以下查询结果为 NO 行

lstResults.RowSource = "select EmpId from tblTesting where Empid ='" & Me.txtSearchEmpId.Value & "'"

以下工作正常:

lstResults.RowSource = "select * from tblTesting"

这是哪里的错? 我使用断点检查 '" & Me.txtSearchEmpId.Value & "'" 的值,其值为 "123"(数字)

我的empid是数值

请帮忙

【问题讨论】:

  • 请花点时间了解一下 SQL。该表是否有 EmpID = 123 的行? EmpID 字段是什么数据类型?如果是文本字段,请对 txtSearchEmpID 进行 TRIM

标签: sql vba ms-access


【解决方案1】:

如果您的 EmpId 是数字,您可能希望删除单引号:

lstResults.RowSource = "select EmpId from tblTesting where Empid = " & Me.txtSearchEmpId.Value

它是如何工作的?

【讨论】:

    【解决方案2】:

    首先,如果它确实是一个数字,请从你的值周围删除单引号。

    第二,清理你的输入。如果有人在您的输入字段中输入123 or true 怎么办?然后,您让他们选择所有输入。您可能希望将值转换为整数,然后再转换回字符串以确保它是纯的。

    xkcd #327:

    【讨论】:

    • 如果他们不这样做会发生什么?请记住,上下文是 Access,与其他编程环境相比,Access 中的 SQL 注入风险受到严格限制,因为 Access/Jet 无法执行批量 SQL 语句。
    • @David W. Fenton:在 txtSearchEmpId.Value 中,您可以输入 x' = 'x 并且您假设结果集将包含 1 行或 0 行的假设被淘汰了,例如可能会泄露您试图限制的信息。很难具体针对一个名为 tblTesting 的表的 SQL 语句;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多