0

我正在尝试创建一个可用于创建新记录或更新另一个记录的表单。目前它是通过文本框的值(新的或编辑的)来完成的。该结构工作正常,但由于某种原因,当它执行编辑功能时,它正在保存对错误记录的更改。例如,如果我正在编辑记录 1027,当我提交它时,它会更新记录 1073。它是一致的,它总是会更新相同的错误记录。编辑 1000,它将更新 1073;如果我更新 1081,它将更新 1073,依此类推。有没有办法指定它应该编辑哪个记录?是的,记录号是主键/ID。继承人的代码:

Private Sub btnSubmit_Click()

 Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strTable As String
    Dim strField As String
    Dim ID As Long
    Dim newID As Long

    strTable = "record_holdData"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strTable)

'button has 2 modes
If txtMode.Value = "NEW" Then

    With rs
        .AddNew
        .Fields("PO_no") = txtPONum
        .Fields("prodSupervisor") = cboProdSup
        .Fields("qaSupervisor") = cboQASup
        .Fields("labTech") = cboLabTech
        .Fields("flavor") = cboFlavor
        .Fields("lineNumber") = cboLineNumber
        .Fields("container") = cboContainer
        .Fields("package") = cboPackage
        .Fields("holdQty") = txtQty
        .Fields("productionDate") = txtProdDate
        .Fields("dateCode") = txtDatecode
        .Fields("component") = cboComponent
        .Fields("nonconformance") = cboDiscrepancy
        .Fields("foundDuring") = cboFoundAt
        .Fields("responsibility") = cboRespCode
        .Fields("comments") = txtDescription
        .Fields("rootCause") = txtRootCause
        .Fields("holdStatus") = 1
        .Fields("dateOpened") = Now()
        .Update
        .Bookmark = .LastModified
        newID = !ID
    End With

        MsgBox ("Hold information saved!")
        btnPrintTag.Enabled = True
        DoCmd.OpenReport "Holdtag", acViewPreview, , "[ID] = " & newID
        DoCmd.Close

ElseIf txtMode.Value = "EDIT" Then
    'do editing stuff
    With rs
        .Edit
        .Fields("PO_no") = txtPONum
        .Fields("prodSupervisor") = cboProdSup
        .Fields("qaSupervisor") = cboQASup
        .Fields("labTech") = cboLabTech
        .Fields("flavor") = cboFlavor
        .Fields("lineNumber") = cboLineNumber
        .Fields("container") = cboContainer
        .Fields("package") = cboPackage
        .Fields("holdQty") = txtQty
        .Fields("productionDate") = txtProdDate
        .Fields("dateCode") = txtDatecode
        .Fields("component") = cboComponent
        .Fields("nonconformance") = cboDiscrepancy
        .Fields("foundDuring") = cboFoundAt
        .Fields("responsibility") = cboRespCode
        .Fields("comments") = txtDescription
        .Fields("rootCause") = txtRootCause
        .Fields("lastEditDate") = Now()
        .Update
    End With

    MsgBox ("Information Updated")

End If

End Sub
4

1 回答 1

0

对不起,我抓住了它。问题是每次调用子例程时我基本上都在重新定义记录集。我将第二个块更改为以下内容:

ElseIf txtMode.Value = "EDIT" Then
    'do editing stuff
    Set rs = db.OpenRecordset("SELECT * FROM record_holdData WHERE ID=" & txtID)
    With rs
        .Edit
        .Fields("PO_no") = txtPONum
        .Fields("prodSupervisor") = cboProdSup
        .Fields("qaSupervisor") = cboQASup
        .Fields("labTech") = cboLabTech
        .Fields("flavor") = cboFlavor
        .Fields("lineNumber") = cboLineNumber
        .Fields("container") = cboContainer
        .Fields("package") = cboPackage
        .Fields("holdQty") = txtQty
        .Fields("productionDate") = txtProdDate
        .Fields("dateCode") = txtDatecode
        .Fields("component") = cboComponent
        .Fields("nonconformance") = cboDiscrepancy
        .Fields("foundDuring") = cboFoundAt
        .Fields("responsibility") = cboRespCode
        .Fields("comments") = txtDescription
        .Fields("rootCause") = txtRootCause
        .Fields("lastEditDate") = Now()
        .Update
    End With
于 2011-08-18T03:30:54.863 回答