如果我插入的变量的值为Null,则SQL INSERT INTO将失败。
变量costLab是Variant数据类型。非Null值将为Decimal。
db.Execute ("INSERT INTO budget
(wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
"VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#,
#" & monthDate & "#, 'Forecast', " & costLab & ");")
如果设置costLab的代码返回Null,我想插入Null。但是如果返回一个值,我想插入该值。显然我可以编写一个If语句来检查null然后直接插入“Null”,但我想知道是否有一种方法没有If语句通过变量插入Null。
答案 0 :(得分:6)
您可以在构建Nz()
语句时使用INSERT
。它与IIf()
方法类似,但稍微简洁一些。
Dim strInsert As String
strInsert = "INSERT INTO budget (wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
"VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, #" & monthDate & "#, 'Forecast', " & Nz(costLab, 'Null') & ");"
Debug.Print strInsert ' <- examine the finshed statement in Immediate window
db.Execute strInsert, dbFailOnError
Debug.Print
让您有机会检查您为数据库引擎执行的语句。如果遇到问题,您可以转到立即窗口( Ctrl + g)查看语句文本。您也可以复制该文本并将其粘贴到新查询的SQL视图中进行测试。
答案 1 :(得分:1)
当costLab
为空时,只需输入“null”。
因此,当您连接SQL字符串而不是变量costLab
时,只需插入:
IIf(IsNull(costLab), "null", costlab)
完整的查询:
db.Execute ("INSERT INTO budget (wbsid, category, capture_date, budget_date, budget_type, month_value) " & _
"VALUES ('" & wbsid & "', 'Labor', #" & importDate & "#, #" & monthDate & "#, 'Forecast', " & IIf(IsNull(costLab), "null", costlab) & ");")
我知道......从技术上讲,是 If
声明(IIf
只是If...Then...Else
的简短形式),但它是最短的形式我能想到的。