执行追加查询不执行任何操作

时间:2019-02-08 13:35:21

标签: sql vba ms-access

执行追加查询不执行任何操作

我有一个奇怪的问题,出于某种原因,它刚刚抬起了丑陋的头。我有一个用于在tblWorkOrder中添加/编辑/删除记录的表单。保存记录后,将检查tblServiceRecord中的伴随记录是否存在,如果不存在(如第一次保存/输入tblWorkOrder中的记录一样),它将执行查询(qryCreateSR)。

几个星期前,它工作得很好。我对此没有任何问题,但是后来我更新了tblServiceRecord以添加几个新列,现在它根本不起作用。但是,查询的SQL不会描述任何这些新列,更不用说tblWorkOrder中的任何特定信息了。因此,我不完全确定该错误是如何产生的。

这是SQL:

public function getWebsiteId()
{   
    $websiteId = $this->_storeManager->getWebsite()->getWebsiteId();
    return $websiteId;
}

这是命令按钮后面的代码:

INSERT INTO tblServiceRecord ( WorkOrderID )
SELECT Forms![frmWorkOrders].Form![txtID];

删除警告抑制后,我遇到一个密钥冲突问题

不知道是什么原因导致键冲突。我检查了我的表,有问题的两个表是Private Sub cmdSave_Click() If DCount("*", "[tblServiceRecord]", "[WorkOrderID] = " & [Forms]![frmWorkOrders].[Form]![txtID]) > 0 Then Else DoCmd.SetWarnings False DoCmd.OpenQuery "qryCreateSR" End If DoCmd.RunCommand acCmdSaveRecord DoCmd.GoToRecord , "", acNewRec Me.lstWorkOrders.Requery Me.lstWorkOrders.Value = "" Me.txtComments.Value = "" cmdSave_Click_Exit: Exit Sub cmdSave_Click_Err: MsgBox Error$ Resume cmdSave_Click_Exit End Sub tblWorkOrder。两者都没有记录,我压缩了数据库,将链接字段(在tblServiceRecord中引用了tblServiceRecord,其中字段tblWorkOrder)设置为相同的数据类型(数字),并将子表设置为索引(否)。

以防万一有人想看一下数据库本身,这里是一个链接:
https://drive.google.com/open?id=1_T-G9fyYQYjH3-YBe4PXhbBDTKNmY3ce

1 个答案:

答案 0 :(得分:2)

尝试将当前记录保存为表格形式(通过设置Me.Dirty = False),之前,将记录插入到另一个表中。由于您尝试插入与父表相关的子表,因此在父表中必须具有对应的(保存的)记录。当您在表单中创建新条目时,表中首先不存在该条目,直到第一次保存它为止。

Private Sub cmdSave_Click()
    Me.Dirty = False ' Or DoCmd.RunCommand acCmdSaveRecord    <==== Save here
    If DCount("*", "[tblServiceRecord]", "[WorkOrderID] = " & [Forms]![frmWorkOrders].[Form]![txtID]) = 0 Then
        DoCmd.SetWarnings False
        DoCmd.OpenQuery "qryCreateSR"
    End If

    'Removed: DoCmd.RunCommand acCmdSaveRecord   <==== instead of here
    DoCmd.GoToRecord , "", acNewRec
    Me.lstWorkOrders.Requery
    Me.lstWorkOrders.Value = ""
    Me.txtComments.Value = ""

cmdSave_Click_Exit:
    DoCmd.SetWarnings True
    Exit Sub

cmdSave_Click_Err: // This code will never run, since a "On Error Goto cmdSave_Click_Err" is missing
    MsgBox Error$
    Resume cmdSave_Click_Exit
End Sub