Дао набор записей обновляет неправильную запись - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь использовать форму для создания новой записи или обновления другой.В настоящее время он делает это через значение текстового поля (новое или редактировать).Структура работает нормально, но по какой-то причине, когда она выполняет функцию редактирования, она сохраняет изменения в неправильной записи.Например, если я редактирую запись 1027, когда я отправляю ее, она обновляет запись 1073. Она непротиворечивая, она всегда обновляет одну и ту же неправильную запись.Изменить 1000, он обновит 1073;если я обновлю 1081, он обновит 1073 и так далее.Есть ли способ указать, какую запись следует редактировать?да, номер записи является первичным ключом / идентификатором.Вот код:

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

1 Ответ

0 голосов
/ 18 августа 2011

Извините, я поймал это. Проблема заключалась в том, что я в основном переопределял набор записей при каждом вызове подпрограммы. Я изменил второй блок на следующее:

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
...