Ms access 用vba记录集填充的Access子窗体中的字段名

Ms access 用vba记录集填充的Access子窗体中的字段名,ms-access,ms-access-2007,vba,Ms Access,Ms Access 2007,Vba,似乎最简单的事情往往是最难以捉摸的 在Access 2007中,我在表单frmInventorySheet中有一个子表单frmfacilityInventory。在主窗体中进行一些选择后,用户单击一个按钮,我在vba中创建一个空白记录集,在后台运行一些查询,并向该记录集添加新记录。完成后,新记录集将显示在子窗体中,或者我希望它显示在子窗体中 我的字段都显示错误 新的vba记录集包含数据,我甚至在文本框中显示完整的记录,以确保其他一切正常工作。子窗体中返回的记录数正确,但仍显示所有错误 查看我的子

似乎最简单的事情往往是最难以捉摸的

在Access 2007中,我在表单frmInventorySheet中有一个子表单frmfacilityInventory。在主窗体中进行一些选择后,用户单击一个按钮,我在vba中创建一个空白记录集,在后台运行一些查询,并向该记录集添加新记录。完成后,新记录集将显示在子窗体中,或者我希望它显示在子窗体中

我的字段都显示错误

新的vba记录集包含数据,我甚至在文本框中显示完整的记录,以确保其他一切正常工作。子窗体中返回的记录数正确,但仍显示所有错误

查看我的子窗体,它没有记录源集,直到vba代码完成构建新记录集,然后将子窗体的源设置为新记录集。子窗体的第一个字段为Facility。表单级别此字段的控制源也设置为Facility。我的记录集有一个设施列。那么,为什么我会在Facility列中看到错误呢

    'Create blank recordset
Dim rsPMList As ADODB.Recordset
Set rsPMList = New ADODB.Recordset
Dim Facility, SQLstr As String
Facility = txtcboecho

'Create fields in blank recordset
With rsPMList.Fields
    .Append "PMID", adNumeric, 4, adFldKeyColumn
    .Append "Facility", adChar, 7, adFldUpdatable
    .Append "Device", adChar, 4, adFldUpdatable
    .Append "BarcodeID", adChar, 7, adFldUpdatable
    .Append "Name", adVarChar, 50, adFldUpdatable
    .Append "Address", adChar, 15, adFldUpdatable
    .Append "Location", adVarChar, 75, adFldUpdatable
End With

'Open blank recordset
rsPMList.Open

'Create query for "Building Controllers"
Dim rsBCList As ADODB.Recordset
Set rsBCList = New ADODB.Recordset

SQLstr = "SELECT tblFacility.FacCode AS Facility, 'BC' AS Device, "
SQLstr = SQLstr & "tblBC.BCName AS Name, tblBC.IPAddress AS Address, "
SQLstr = SQLstr & "FROM tblFacility INNER JOIN tblBC "
SQLstr = SQLstr & "ON tblFacility.FacilityID = tblBC.Facility "
SQLstr = SQLstr & "WHERE tblFacility.FacCode = '" & Facility & "' "
SQLstr = SQLstr & "AND tblBC.ParentBC Is Null"
rsBCList.Open SQLstr, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

'Move records from query to blank recordset
Do While rsBCList.EOF <> True
    rsPMList.AddNew
        rsPMList.Fields("Facility") = rsBCList.Fields("Facility")
        rsPMList.Fields("Device") = rsBCList.Fields("Device")
        If IsNull(rsBCList.Fields("BarcodeID")) Then
            rsPMList.Fields("BarcodeID") = ""
        Else
            rsPMList.Fields("BarcodeID") = rsBCList.Fields("BarcodeID")
        End If
        rsPMList.Fields("Name") = rsBCList.Fields("Name")
        rsPMList.Fields("Address") = rsBCList.Fields("Address")
        rsPMList.Fields("Location") = rsBCList.Fields("Location")
    rsPMList.Update
rsBCList.MoveNext
Loop

'These lines shows that query data was successfully moved
'to the blank recordset.  Two text fields display two fields.
rsPMList.MoveFirst
txtShow1 = rsPMList.Fields("BarcodeID")
rsPMList.MoveNext
txtshow2 = rsPMList.Fields("BarcodeID")
rsBCList.Close
Set rsBCList = Nothing

'Set the record source of the subform to the newly created recordset
Set Me.frmFacilityInventory.Form.Recordset = rsPMList

rsPMList.Close
Set rsPMList = Nothing
在打开记录集之前,请设置其CursorLocation和LockType属性

此简化版本的记录集适用于my Access 2007表单

使用rsPMList .Fields.Append PMID、adInteger、adFldKeyColumn'已从adNumeric、4更改为 .Fields.Append工具,adChar,7,adFldUpdatable .Fields.Append设备,adChar,4,adFldUpdatable .CursorLocation=adUseClient .LockType=adlock悲观 打开 以
谢谢你,汉森。现在像个魔术师一样奔跑。你促使我更深入地研究打开记录集的特性,而不是随意使用默认值和挠头。谢谢