添加/编辑按钮给出数据类型错误

时间:2013-01-10 20:51:51

标签: database ms-access database-design access-vba ms-access-2010

我有一个主要和子表单。我在主窗体中有文本框,允许我在子窗体中添加/编辑信息。添加工作正常但当我尝试编辑记录时,所选记录的信息显示在文本框中,就像我想要的那样,但是当我尝试更新时,我得到数据类型错误。此外,当我尝试删除记录时,我也得到一个数据类型错误。

我试图将我的合作伙伴之一的作品复制到以前的项目中(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

1 个答案:

答案 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") & "'"