如何在插入查询中忽略访问中的空值
我有数据库表需要使用表单进行更新。 但是,表格中的所有字段都不必强制填写。 我正在写下面的VB代码插入然而,我得到一个错误,说明在语句中有语法错误。据我所知,这是因为变量中的空值。我知道我需要为所有的空值使用DBNull.Value。 这里的事情是有太多的字段来检查值是否为空。 任何机构都建议是否有办法对输入值为空的值进行批量检查?如何在插入查询中忽略访问中的空值
VBCode:
Dim StrSQL As String
Dim StrSQL1 As String
Dim tktID As Variant
Dim Assi As Variant
Dim reopened As Variant
Dim valid As Variant
Dim Reopenreason As Variant
Dim ReassignmentAG As Variant
Dim RBSCollab As Variant
Dim SMEconf As Variant
Dim Cloabag As Variant
Dim smeName As Variant
Dim Updat As Variant
Dim Closed As Variant
Dim iss As Variant
Dim ana As Variant
Dim res As Variant
Dim rVariant As Variant
' Assigining values
tktID = Ticket_number.Value
reopened = Ticket_Reopened.Value
valid = Valid_Reopen.Value
Assi = Assiginee.Value
Reopenreason = Reopen_reason.Value
ReassignmentAG = Reassignment_AG.Value
RBSCollab = RBS_Collab.Value
SMEconf = CkBxSMEConfirmation.Value
Cloabag = Collabarated_AG.Value
smeName = SME_Name.Value
Updat = Update.Value
Closed = Issue_Closed.Value
iss = Issue.Value
ana = Analysis.Value
res = Resolution.Value
rdate = Resolve_date.Value
'Insert values into the tables
StrSQL = "INSERT INTO Updates (TicketID,Assiginee,ReassignmentAG,RBSCollab,CollabAG,SMEconfirmation,SMEName,Update,IssueClosed,Issue,Analysis,Resolution,ResolveDate,TicketReopened,ValidReopen,ReopenReason) VALUES ('" & tktID & "','" & Assi & "','" & ReassignmentAG & "','" & RBSCollab & "','" & Cloabag & "','" & SMEconf & "','" & smeName & "','" & Updat & "','" & Closed & "','" & iss & "','" & ana & "','" & res & "','" & rdate & "','" & reopened & "','" & valid & "','" & Reopenreason & "') "
DoCmd.RunSQL StrSQL
在此先感谢您的帮助
一个简单的解决这个问题,可以使用插图查询,如果之前只检查元素的值元素的值高于设定未定义与null。 将此值传递给查询中的数据库。
正如你所见,这是我的问题我如何做这个质量检查? – shravya
这样做对每个字段:
tktID = IIF(ISNULL(Ticket_number.Value),"Null","'" & Ticket_number.Value & "'")
然后,而不是这样的:
VALUES ('" & tktID & "',...
做这个
VALUES (" & tktID & ",...
或者,如果你不介意与空字符串代替空:
tktID = Nz(Ticket_number.Value)
会做到这一点。
当然,你至少应该确保没有单引号是在蜇伤,所以甚至更好:
tktID = IIF(ISNULL(Ticket_number.Value),"Null","'" & Replace(Ticket_number.Value,"'","''") & "'")
我也一样,使用大量未绑定的控件和SQL语句的用于移动安装我的第一个访问数据库周围的数据。但这不是使用Access的方式。您应该使用绑定表单,其中控件根据绑定的表/列自动知道约束条件。
这意味着您编写(和维护)的代码要少得多,未来的开发人员可以查看您的Access应用程序并知道发生了什么,因为它将在Access范例中完成,并且如果您将尽可能多的逻辑放入表/关系如果有人出现并链接到您的ACCDB或打开后端,他们可能会输入数据,而不输入错误的数据。
所以最终这是一个XY问题。摆脱所有这些代码(尤其是DoCmd.RunSQL
)并创建一个绑定表单。将验证逻辑放在表中的外键,验证规则和/或数据宏中。
最好学会使用参数来避免sql注入和格式化问题。 – LarsTech
我有很多字段,你可以。我不使用参数将有助于 – shravya
你误解了你会使用参数的原因。考虑一下'foo'的'Reopenreason'会发生什么) DROP TABLE更新; - '。 – Comintern