2011-08-18 163 views
0

我正在嘗試創建新記錄或更新另一個表單。目前它正在通過文本框的值(新的或編輯)來完成它。該結構工作正常,但由於某種原因,當它執行編輯功能時,它將更改保存到錯誤的記錄中。例如,如果我正在編輯1027條記錄,那麼當我提交它時,它會更新記錄1073.它的一致性會始終更新相同的錯誤記錄。編輯1000,它會更新1073;如果我更新1081,它會更新1073,依此類推。有沒有辦法指定它應該編輯哪個記錄?是的,記錄號是主鍵/ ID。繼承人代碼:dao記錄集更新錯誤記錄

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 

回答

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