ms-access - 在 IIF 语句中计算 NULL 时出现问题 (Access)

标签 ms-access vba null iif-function

记录集中的项目 rstImportData("Flat Size") 为 = Null

鉴于此,给出以下声明:

IIF(IsNull(rstImportData("Flat Size")), Null, cstr(rstImportData("Flat Size")))
Result: Throws error 94: Invalid use of Null

如果我通过在错误比较时删除类型转换来更改语句:

IIF(IsNull(rstImportData("Flat Size")), Null, 0)
Result: Null

它返回 Null,因为它应该是第一次。如果传入的值应该为空,那么我似乎无法在 IIF 中进行类型转换,即使它通过了 IIF 测试,它仍然尝试在正确和错误的答案上对其进行评估。我像这样使用 IIF 的唯一原因是因为我有一个 25 行比较来将导入中的数据与数据库中的匹配记录进行比较,以查看是否需要将之前的数据附加到历史记录中。

有什么想法吗?导入数据的方式将存在空日期,并且电子表格导入采用字符串格式,我必须将任一侧转换为另一侧才能正确比较值,但如果任一侧为空,则会发生此异常:(

编辑 我使用 IIF 的原因示例(并考虑使用通用函数)

If master("one") <> import("one") Or _
   master("two") <> import("two") Or _
   master("date") <> import("date") Or _  //import("date") comes from a spreadsheet, it comes in as string, CAN be a null value
   master("qty") <> import("qty") Or _    //import("qty") comes from spreadsheet, comes in as a string can CAN be null
   master("etc") <> import("etc") Then

....stuff....

End If

此代码扩展为大约 20 列以在数据库中进行比较。我更愿意将检查作为声明的一部分。我可以想到很多解决方案,但它们涉及添加更多代码。如果真是这样的话,我也不是那么容易屈服的人。

我看到的选项是

  • 在比较和使用这些新变量而不是记录集之前创建临时变量来完成工作
  • 创建一个对象以将记录传递到预格式化并使用,但需要额外的工作为每个导入类型提供此功能,因为存在具有相似字段的不同文件

我来这里寻求想法,并且当我决定如何去做时,我愿意接受任何有趣的东西,我正在寻找最可重用的方法。

最佳答案

将值更改为字符串的简单权宜之计有很大帮助。诀窍是修剪 NULL 字符串将得到空字符串。然后可以对其进行操作,就好像它不是数据库空一样。
我经常使用以下形式:

CInt("0" & Trim(SomeVariant & " "))

无需经历一堆恶作剧就能获得有效的号码。对于这个问题来说,null 是无足轻重的。

关于ms-access - 在 IIF 语句中计算 NULL 时出现问题 (Access),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2747940/

相关文章:

VBA (Excel ADODB ODBC) : Get list of stored procedures and tables from ANY database?

html - Excel VBA 使用虚拟键盘自动登录网页

excel - 无模式表单上文本框输入的验证消息会中断文本选择

database - Access DB 中的字符串排序

sql - SQL中的运行差异

vba - 将焦点设置在任何对象上

php - 如何使用 PHP 将未回答的单选按钮问题作为 NULL 值发布到 MySQL 数据库中?

java - 为什么Java以科学计数法显示10位数字?

javascript - 如何解决 null ts 类型检查问题?

时间:2019-03-08 标签:c#switch-typemultiplecase最佳实践