根据主键编辑访问行中的所有字段

问题描述 投票:0回答:2

我的工作使用 Excel 中的用户窗体作为 Access 数据库的前端模块。我希望能够根据该数据库中的唯一交易 ID(主键)编辑采购订单中的所有字段。到目前为止,我使用的代码似乎随机更新了一些记录,而不是其他记录,并且没有给出任何错误。 Access db 是一个 .mdb 文件 (2003)。我想知道在编辑过程中是否有一个命令可以从一个字段移动到另一个字段,但似乎无法找出为什么需要它的原因??

``
Sub EDIT_PO()

    On Error GoTo ErrorHandler
    
    Application.EnableCancelKey = xlDisabled
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    Dim nConnection As New ADODB.Connection
    Dim nRecordset As New ADODB.Recordset
    
    Dim sqlQuery As String
    
    'Connection Strings - Dynamic Path

    #If Win64 Then
        nConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & "C:\Users\samue\OneDrive\Desktop\Database1.mdb"
    #Else
        nConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\Users\samue\OneDrive\Desktop\Database1.mdb"
    #End If
    
    
    sqlQuery = "Select * from PO_TABLE"
    
    'Open the recordset
    
    nRecordset.Open Source:=sqlQuery, ActiveConnection:=nConnection, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
    
    
If nRecordset.Fields("Transaction ID").Value = CStr(POform.poformtransid.Value) Then
    With nRecordset
        .Fields("PO Number").Value = POform.poformponumber.Value
        .Fields("PO Date").Value = CDate(POform.poformpodate.Value)
        .Fields("Status").Value = POform.poformstatus.Value
        .Fields("Material ID").Value = POform.poformmatid.Value
        .Fields("Unit Cost").Value = CDbl(POform.poformunitcost.Value)
        .Fields("QTY").Value = CDbl(POform.poformamount.Value)
        .Fields("QTY Units").Value = POform.poformunits.Value
        .Fields("Vendor ID").Value = POform.poformvendorid.Value
        .Fields("Receipt Date").Value = CDate(POform.poformreceiptdate.Value)
        .Fields("Supporting File").Value = POform.poformsf1.Value
        .Fields("Lot Identifier").Value = POform.poformlotinfo.Value
        .Update
        .Close
    End With

End If
    nRecordset.Close
    nConnection.Close
    
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    Exit Sub
    
ErrorHandler:

    MsgBox Err.Description & " " & Err.Number, vbOKOnly + vbCritical, "Database Error"
    
   
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
     nConnection.Close

End Sub

``
vba ms-access ado
2个回答
1
投票

您只是打开表,因此任何记录都可能是第一条。尝试过滤您要编辑的特定记录:

sqlQuery = "Select * from PO_TABLE Where [Transaction ID] = '" & CStr(POform.poformtransid.Value) & "'"

或者,如果 ID 是数字:

sqlQuery = "Select * from PO_TABLE Where [Transaction ID] = " & CStr(POform.poformtransid.Value) & ""

0
投票

这也可以通过 vba excel 上的表单来完成吗

© www.soinside.com 2019 - 2024. All rights reserved.