首页 文章

Access语句中的“IS NULL”访问2010问题[关闭]

提问于
浏览
1

我是一名新手程序员,试图为Access 2010中的工作构建数据库,以便更好地管理我们的数据 . 我们的归档系统涉及在各种分支主题中彼此嵌套的文档 . 分支都是不同的长度,在我的数据库中,每个记录总是有一个集合号,序列号和文件单元号,但是它们可能有也可能没有多个子序列号,具体取决于前一个分支的主题数量 . 学科 . 所有这些信息都收集在文件单元表中 .

我正在设置一个带有组合框的搜索表单,用于收集编号,系列编号,每个可能的子编号,然后是文件单元编号,以便用户从第一个组合框中选择他们的收集编号然后触发查询这个系列组合框中填充了所有可用于该系列编号的系列编号,依此类推,以此类推 . 我的问题是文件单元号组合框 .

在选择序列号后,我需要文件单元号组合框来填充选项,并随后每次选择子序列号进行更新,以便仅显示文件单元表中与所选值匹配的文件单元号,并具有子值的空值-series组合框没有选择任何东西 .

我写了一个子程序,当用户在满足某些条件时退出每个组合框后调用该子程序 . 在子过程中,如果then语句检查每个组合框,如果有值,则将其存储在相应的字符串变量中,如果不存在,则将变量设置为IS NULL .

这是我用来填充文件单元号组合框的代码:

File_Unit_Number.RowSourceType = "Table/Query"

File_Unit_Number.RowSource = "SELECT File_Unit.File_Unit_Number,
File_Unit.File_Unit_Name FROM File_Unit WHERE
(((File_Unit.Collection_Number) " & cmbCollection & " AND
(File_Unit.Series_Number) " & cmbSeries & "
AND(File_Unit.Subseries_1_Number) " & cmbSubseries_1 & "
AND(File_Unit.Subseries_2_Number) " & cmbSubseries_2 & "
AND(File_Unit.Subseries_3_Number) " & cmbSubseries_3 & "
AND(File_Unit.Subseries_4_Number) " & Subseries_4 & "
AND(File_Unit.Subseries_5_Number) " & cmbSubseries_5 & "));"

我运行测试以确保我的if-then语句正确触发并且SQL字符串正确打印 . 当我从语句的WHERE部分删除具有空值的字段(即删除除了series_number之外的所有内容)并测试然后项目填充我的文件单元组合框 . 问题是这些数字都是所有文件单元号,与所有子系列列中的值无关 .

我究竟做错了什么?是否有更简单的方法来获得我需要的结果?

2 回答

  • 1

    在你的代码中有一些弱点(并做了sstan建议:在执行之前检查生成的代码!)

    • 如果值不为空,变量中有什么?如果我理解正确,则将文本"IS NULL"存储在变量中 . 如果有值,则您的变量应包含类似"='SomeValue'"(注意字符串,必须使用引号,格式如 ., ,小数或日期时间文字)

    • paranthesis应包括完整表达式 AND (FileUnit.Subseries_4_Number=123) . 你可能完全放弃它们,因为只有 AND .

    • 并检查空白:

    AND(File_Unit.Subseries_1_Number)“&cmbSubseries_1&”AND(File_Unit.Subseries_2_Number)“&cmbSubseries_2&”

    ......可能导致

    AND(File_Unit.Subseries_1_Number) ISNULLAND(File_Unit.Subseries_2_Number) 123
    

    (如果您的变量仅包含值,请查看paranthesis, AND 之前缺少的空白和缺失的 = .

    UPDATE小心sql注入!

    无论如何,带有值的SQL语句不应该通过连接字符串来创建,而应该使用参数...

  • 1

    抱歉浪费任何人的时间!我自己整理了答案 . 事实证明,有些字段不是NULL而是空字符串 . 当没有值时,我将保存的字符串更改为变量:

    [table] .field IS NULL或[table] .field =“”

相关问题