尝试在 Access 中使用“添加”按钮时出现编译错误

Posted

技术标签:

【中文标题】尝试在 Access 中使用“添加”按钮时出现编译错误【英文标题】:Compile error when trying to use an Add button in Access 【发布时间】:2017-03-22 18:53:08 【问题描述】:

我昨天发布了有关此问题的信息,此后进行了更改并尝试了一些方法来尝试修复它,但仍然遇到问题。

我正在处理数据库工作,但在尝试将记录添加到表单时遇到编译错误。

它本质上是一个库存系统,我有一个包含我们仓库库存的表格,我正在尝试创建一个表格,其中包含一个文本框,其中包含关于一件设备的每条信息。所以你去表格,用信息填写每个文本框,然后在文本框旁边有 5 个框,你可以点击这些框来做不同的事情。在此下方是主库存表的子表单。

有一个添加、编辑、删除、清除和关闭按钮。添加按钮将一条记录添加到此子表单,然后添加到主表中,其中包含您在文本框中键入的任何信息。要使用“编辑”框,请单击子表单中的记录,然后单击“编辑”按钮,它将使用所选记录中的信息填充文本框,以便您可以编辑信息。同时,一旦你点击编辑,它会将添加按钮上的标签更改为更新,这样一旦你编辑了数据,你点击更新,它就会更新子表单和主表中的数据。其他 3 个按钮做它们应该做的事情,单击记录并单击删除删除记录,单击关闭退出表单,单击清除清除文本框中填写的任何信息。

我遇到的问题是“添加/更新”按钮不起作用 - 当我单击它时出现此错误:编译错误:找不到方法或数据成员。每个其他按钮都可以正常工作,我已经编写并重新编写了此代码两次,但无法弄清楚发生了什么。

最奇怪的部分是,我基本上是从另一个我编写的数据库中复制了这段代码,该数据库完全按照预期工作,并且与这个非常相似。切换到这个数据库时,我唯一需要更改的是标签和表头的名称。

谁能帮帮我?

代码:

Option Compare Database

Private Sub cmdAdd_Click()
    'when we click on Add button there are two options
    '1. for inserting new data
    '2. for updating selected data
    If Me.txtICN.Tag & "" = "" Then
        'add data to table after clicking the add button
        CurrentDb.Execute "INSERT INTO tblInventory(ICN, manu, modelNum, serialNum, descr, dateRec, projectNum, dispo, flgDispo, dateRemoved, comments, ulNum, amcaNum)" & _
            "VALUES (" & Me.txtICN & ", '" & Me.txtManu & "', '" & Me.txtModel & "', '" & Me.txtSerial & "', '" & Me.txtDesc & "', '" & Me.txtDateRec & "', '" & Me.txtProjectNum & "','" & _
            Me.txtDispo & "', '" & Me.chkDispo & "', '" & Me.txtDateRemoved & "', '" & Me.txtComments & "', '" & Me.txtULNum & "', '" & Me.txtAMCANum & "')"

    Else
        'otherwise
        CurrentDb.Execute "UPDATE tblInventory " & _
            " SET ICN =" & Me.txtICN & _
            ", manu ='" & Me.txtManu & "'" & _
            ", modelNum ='" & Me.txtModel & "'" & _
            ", serialNum ='" & Me.txtSerial & "'" & _
            ", descr ='" & Me.txtDescr & "'" & _
            ", dateRec ='" & Me.txtDateRec & "'" & _
            ", projectNum ='" & Me.txtProjectNum & "'" & _
            ", dispo ='" & Me.txtDispo & "'" & _
            ", flgDispo ='" & Me.chkDispo & "'" & _
            ", dateRemoved ='" & Me.txtDateRemoved & "'" & _
            ", comments ='" & Me.txtComments & "'" & _
            ", ulNum ='" & Me.txtULNum & "'" & _
            ", amcaNum ='" & Me.txtAMCANum & "'" & _
            " WHERE ICN =" & Me.txtICN.Tag
    End If

    'clear form after data has been added to the table
    cmdClear_Click
    'refresh data in list on form after form has been cleared
    frmInventorySub.Form.Requery

End Sub

Private Sub cmdClear_Click()

    Me.txtICN = ""
    Me.txtManu = ""
    Me.txtModel = ""
    Me.txtSerial = ""
    Me.txtDesc = ""
    Me.txtDateRec = ""
    Me.txtProjectNum = ""
    Me.txtDispo = ""
    Me.chkDispo = ""
    Me.txtDateRemoved = ""
    Me.txtComments = ""
    Me.txtULNum = ""
    Me.txtAMCANum = ""

    'set focus to ICN number
    Me.txtICN.SetFocus
    'set edit button to enabled after data has been cleared from form
    Me.cmdEdit.Enabled = True
    'change caption of button add to Add from Edit
    Me.cmdAdd.Caption = "Add"
    'clear tag on txtICN
    Me.txtICN.Tag = ""
End Sub

Private Sub cmdClose_Click()
    DoCmd.Close
End Sub

Private Sub cmdDelete_Click()
    'delete record
    'check existingselected record
    If Not (Me.frmInventorySub.Form.Recordset.EOF And Me.frmInventorySub.Form.Recordset.BOF) Then
        'confirm delete
        If MsgBox("Are you sure you want to delete this record?)", vbYesNo) = vbYes Then
            'delete now
            CurrentDb.Execute "DELETE FROM tblInventory " & _
                "WHERE ICN=" & Me.frmInventorySub.Form.Recordset.Fields("ICN")
            'refresh data in list
            Me.frmInventorySub.Form.Requery
        End If
    End If

End Sub

Private Sub cmdEdit_Click()
    'check to see if data is already in the form
    If Not (Me.frmInventorySub.Form.Recordset.EOF And Me.frmInventorySub.Form.Recordset.BOF) Then
        'pull data from selected record into the text boxes
        With Me.frmInventorySub.Form.Recordset
            Me.txtICN = .Fields("ICN")
            Me.txtManu = .Fields("manu")
            Me.txtModel = .Fields("modelNum")
            Me.txtSerial = .Fields("serialNum")
            Me.txtDesc = .Fields("descr")
            Me.txtDateRec = .Fields("dateRec")
            Me.txtProjectNum = .Fields("projectNum")
            Me.txtDispo = .Fields("dispo")
            Me.chkDispo = .Fields("flgDispo")
            Me.txtDateRemoved = .Fields("dateRemoved")
            Me.txtComments = .Fields("comments")
            Me.txtULNum = .Fields("ulNum")
            Me.txtAMCANum = .Fields("amcaNum")
            'store ICN in tag of txtICN in case ICN is modified
            Me.txtICN.Tag = .Fields("ICN")
            'change caption of add button to Update
            Me.cmdAdd.Caption = "Update"
            'disable edit button
            Me.cmdEdit.Enabled = False

        End With
    End If
End Sub

【问题讨论】:

是的,我也试过了,它给了我 cmdAdd_Click 本身的编译错误,这让我很困惑。几乎就像它找不到 cmd 或我不知道的东西一样。 If Me.txtICN.Tag & "" = "" Then 看起来很有趣。为什么要检查标签中的值。如果您正在以某种方式编辑标题以添加或更新,请使用该标题值在插入和更新功能之间切换。 (很抱歉删除我原来的答案,因为它看起来不仅仅是“标签”的一个实例,而且相当模糊)。另外,如果您的表具有自动编号,请注意插入,因为插入看起来像是在其中强制一个值。 我的桌子确实有自动编号,但我尝试了使用和不使用自动编号并遇到了同样的问题。 geeFlo 你能再解释一下你对我说的话吗?我应该如何更改该声明? 【参考方案1】:

好的,我现在看到了。您使用 TAG 属性作为记录是否被编辑的指示符。即如果是新记录,则 TAG = "",如果是现有记录,则将 ICN 复制到 TAG 中。

如果是这种情况,则将该 IF 语句更改为:

If Me.txtICN.Tag = "" Then

【讨论】:

是的,那也没有,我真的对这个感到困惑和沮丧。每次单击添加时都会出现错误,它会突出显示 Private Sub cmdAdd_Click() 就像它甚至找不到方法一样。 尝试测试标签是否也为空。 > If nz(me.txtICN.Tag,"") = "" then

以上是关于尝试在 Access 中使用“添加”按钮时出现编译错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 android studio 中安装按钮时出现编译器错误

尝试将项目添加到数据库时出现更新条目错误

连接到 ODBC 时出现 MS Access 错误

在 Instruments 中进行分析时出现 SIGSEGV(Bad Memory Access)错误

将记录添加到 Access 数据库时出现“INSERT INTO 语句中的语法错误”

在Access 2010中运行追加查询时出现“表已存在”错误