使用recordset.findfirst在MS Access中记录搜索会引发错误3070

问题描述 投票:1回答:1

我正在尝试构建MS Access数据库。

其中一个要素是记录管理表单中的自动填充。

表格布局:

The layout of the form is like this

请注意,电池ID和型号在一个表中(参见表1),化学类型,规格电压,规格容量根据型号存储在另一个表中(参见表2)。这两个表在模型编号条目中以一对多关系连接在一起。

我想要达到的目的是让用户能够输入电池ID,使用afterupdate(),搜索表1,获取型号,如果电池ID条目已经存在。然后搜索表2,获取电池型号详细信息(如果存在)。

To clarify the flow, here is the flowchart

“匹配电池ID的搜索表1”部分使用以下代码:

Private Sub txtBatteryID_AfterUpdate()
    'Set the path to the Battery Records table
    Set RS = CurrentDb.OpenRecordset("Batteries for Portable Radios", dbOpenDynaset)

    'do a findfirst search for the Battery ID, using value from textbox txtBatteryID
    RS.FindFirst "[Battery ID]=" & txtBatteryID

    'If no matching record, leave the other fields empty
    If RS.NoMatch Then
        cmbModelNumber.Value = Null
        cmbChemistryType.Value = Null
        txtSpecVoltage.Value = Null
        txtSpecCapacity.Value = Null
    'If there is a matching record, then, grab the model number
    Else
        cmbModelNumber.Value = RS("Model Number")
        'as there is an existing record with model number, run a search on the model number and grab the model info
        Call cmbModelNumber_AfterUpdate
    End If
    'close recordset
    RS.Close
    'clear recordset path
    Set RS = Nothing
End Sub

对于“搜索表2匹配型号”部分,我认为它将是相同的结构:

Private Sub cmbModelNumber_AfterUpdate()
    'Set the path to the Model Records table
    Set ModelRS = CurrentDb.OpenRecordset("tblInfoBatteryModelByModel#", dbOpenDynaset)

    'do a findfirst search for the Model Number, using value from combobox cmbModelNumber
    ModelRS.FindFirst "[Model Number]=" & cmbModelNumber

    'If no matching record, leave the other fields empty
    If ModelRS.NoMatch Then
        cmbChemistryType.Value = Null
        txtSpecVoltage.Value = Null
        txtSpecCapacity.Value = Null
     'If there is a matching record, then, grab the Model Info
    Else
        cmbChemistryType.Value = ModelRS("Chemistry Type")
        txtSpecVoltage.Value = ModelRS("Spec Voltage (V)")
        txtSpecCapacity.Value = ModelRS("Spec Capacity (mAh)")
    End If
    'close recordset
    ModelRS.Close
    'clear recordset path
    Set ModelRS = Nothing

End Sub

除了这次当我输入现有的电池ID或型号时,它会抛出3070错误。

错误信息:

Error Message

问题线:

Problematic Line

我不知道为什么这不会带来价值。

access-vba ms-access-2016
1个回答
1
投票

由于您的Model Number字段看起来是一个字符串,您需要用单引号或双引号括起提供给FindFirst方法的条件值,例如:

ModelRS.FindFirst "[Model Number]='" & cmbModelNumber & "'"

要么:

ModelRS.FindFirst "[Model Number]=""" & cmbModelNumber & """"
© www.soinside.com 2019 - 2024. All rights reserved.