MS access运行SQL不插入数据,没有错误
Posted
技术标签:
【中文标题】MS access运行SQL不插入数据,没有错误【英文标题】:MS access running SQL doesn't insert data, no error 【发布时间】:2015-07-16 15:04:06 【问题描述】:我想从表单向这个表中添加数据。
我有工作和团队 ID 的组合框,可以从各自的表中查找数据。
Private Sub save_new_Click()
On Error GoTo save_new_Click_Err
On Error Resume Next
Dim strSQL As String
strSQL = "INSERT INTO Employee (Name,ATUUID,Job ID,Team ID,Start Date, Comments) " & _
" VALUES(" & Me.Employye_Name & ", " & Me.ATTUID & ", " & Me.cboFunc & ", " & _
Me.cboTeam & ", " & Me.Start_Date & ", " & Me.Comments & ")"
Debug.Print strSQL
With CurrentDb
.Execute (strSQL), dbFailOnError
Debug.Print .RecordsAffected
End With
这是生成的 SQL 字符串:
INSERT INTO Employee (Name,ATUUID,Job ID,Team ID,Start Date, Comments) VALUES(asd, asd, 1, 2, 7/10/2015, asdasd)
Debug.Print.RecordsAffected
打印 0
【问题讨论】:
您需要用"
分隔您的字符串(或者它可能是'
--- 无法记住访问权限。)
没有错误? - 不足为奇:删除On Error Resume Next
您很容易受到sql injection attacks 的攻击,这就是您的查询失败的原因。这是完全无效的。 7/10/2015
是数学除法,而不是日期。 asdasd
是字段名,不是字符串,等等等等
@AlexK.:一定要喜欢那些让你有能力说“我刚刚摧毁了整个宇宙,哦,好吧,让我们假装这没有发生”的语言
为我调试它的第一步是使用 Management Studio 在 SQL Server 上运行查询,看看它是否真的有效;正如其他人所说,我怀疑它不会。如果确实如此......然后在运行代码时在服务器上运行活动监视器,看看会发生什么(如果有的话)。
【参考方案1】:
作为@AlexK. explained,您没有看到错误的原因是On Error Resume Next
隐藏了错误。当您使用它时,您是在告诉 Access “忽略任何错误 --- 甚至不要提及它 --- 并继续下一行。”
但是代码构建的INSERT
语句肯定会触发错误。如果您从即时窗口复制Debug.Print strSQL
的输出,在查询设计器中创建一个新查询,将查询切换到 SQL 视图,粘贴语句文本并尝试运行它,您可以确认这一事实。
当您有一个包含空格的字段名称时,您必须将其括在方括号中,以便数据库引擎将其识别为一个标识符而不是两个标识符。我也会将 Name 括起来,因为它是一个保留字,但我怀疑它是否真的导致了这里的问题:
"INSERT INTO Employee ([Name], ATUUID, [Job ID], [Team ID], [Start Date], Comments)"
除此之外,我建议您使用基于参数查询的临时QueryDef
,提供参数值,然后Execute
它。
'On Error Resume Next '<-- leave this disabled, AT LEAST while debugging!
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
strSQL = "INSERT INTO Employee ([Name], ATUUID, [Job ID], [Team ID], [Start Date], Comments)" & vbCrLf & _
"VALUES (pName, pATUUID, pJobID, pTeamID, pStartDate, pComments);"
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strSQL)
With qdf
.Parameters("pName").Value = Me.Employye_Name.Value
.Parameters("pATUUID").Value = Me.ATTUID.Value
.Parameters("pJobID").Value = Me.cboFunc.Value
.Parameters("pTeamID").Value = Me.cboTeam.Value
.Parameters("pStartDate").Value = Me.Start_Date.Value
.Parameters("pComments").Value = Me.Comments.Value
.Execute dbFailOnError
End With
Debug.Print db.RecordsAffected
【讨论】:
感谢这解决了这个问题,我也搞砸了 ATUUID,它是 ATTUID :D以上是关于MS access运行SQL不插入数据,没有错误的主要内容,如果未能解决你的问题,请参考以下文章
MS Access UPSERT(更新/插入)SQL [重复]
MS Access:使用 VBA 进行 SQL 插入的日期格式
带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075