我有一个主要和子表单。我在主窗体中有文本框,允许我在子窗体中添加/编辑信息。添加工作正常但当我尝试编辑记录时,所选记录的信息显示在文本框中,就像我想要的那样,但是当我尝试更新时,我得到数据类型错误。此外,当我尝试删除记录时,我也得到一个数据类型错误。
我试图将我的合作伙伴之一的作品复制到以前的项目中(CarDealership)。我希望在KeyInventory DB中获得类似的功能。 以下是我使用的文件:http://jumpshare.com/b/t7Lot8
我只完成了mainKeys表单上的按钮代码
错误再现:我点击删除键,获取构造对话框。选择yes,产生“运行时错误”3464“:标准表达式中的数据类型不匹配”
这是添加/更新按钮的代码:
Private Sub cmdAdd_Click()
If Me.keyID.Tag & "" = "" Then
CurrentDb.Execute "INSERT INTO KEYS(KEY_ID, ROOM, DRAWER)" & _
" VALUES(" & Me.keyID & ",'" & Me.roomID & "'," & Me.drawerID & ")"
subKey.Form.Requery
Else
CurrentDb.Execute "UPDATE KEYS " & _
" SET KEY_ID=" & Me.keyID & _
", ROOM='" & Me.roomID & "'" & _
", DRAWER='" & Me.drawerID & "'" & _
" WHERE KEY_ID=" & Me.keyID.Tag
End If
cmdReset_Click
subKey.Form.Requery
End Sub
这是删除按钮的代码:
Private Sub cmdDelete_Click()
If Not (Me.subKey.Form.Recordset.EOF And Me.subKey.Form.Recordset.BOF) Then
If MsgBox("Confirm Deletion?", vbYesNo) = vbYes Then
CurrentDb.Execute "DELETE FROM KEYS" & _
" WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID")
Me.subKey.Form.Requery
End If
End If
End Sub
答案 0 :(得分:1)
假设这是触发“数据类型在标准表达式中不匹配”错误的行...
CurrentDb.Execute "DELETE FROM KEYS" & _
" WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID")
...给自己一个机会来检查你要求db引擎执行的语句。使用以下代码替换cmdDelete_Click()
中的该行:
Dim strSql As String
strSql = "DELETE FROM KEYS" & _
" WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID")
Debug.Print strSql ' <- prints to Immediate window
CurrentDb.Execute strSql, dbFailOnError
然后,使用表单视图中的表单,单击导致错误的命令按钮。当您收到错误时,请转到立即窗口( Ctrl + g )并查看DELETE
语句。如果该语句的问题不明显,您可以复制语句文本并将其粘贴到新查询的SQL视图中进行测试。如果您需要更多帮助,请向我们展示。
注意:此建议不会修复错误。它仅用于帮助您诊断失败的DELETE
语句。
如果KEY_ID字段的数据类型是文本,请在DELETE语句中的数字周围添加与此类似的引号:
DELETE FROM KEYS WHERE KEY_ID='7'
如果可行,请修改代码以包含引号。
strSql = "DELETE FROM KEYS WHERE KEY_ID='" & _
Me.subKey.Form.Recordset.Fields("KEY_ID") & "'"