MS Access 2007 DAO 使用指定索引打开记录集

MS Access 2007 DAO open recordset using a specified index

这是我第一次提出问题,尽管多年来我在这里找到了许多问题的解决方案。

我有一个令人沮丧的问题,我找不到答案。我想在通过链接 table 按顺序读取之前进行初始读取,该链接 table 使用 table 上定义的特定索引名称作为动态集 DAO 记录集打开。

我的代码 returns 错误 3251 'operation is not supported...' 在 .index 行。毫无疑问,有一个明显的解决方案(请注意,我试图避免打开一个 SQL 查询,这将是显而易见的答案)。

Public Function IOrdCustomerStock(CustomerID As Long, ProductID As Long, KeepRsOpen As Boolean, Optional UseIndexName As String) As Boolean

    Set zcls_CS.CS_rs = CurrentDb.OpenRecordset(Name:=CS_TableName, Type:=RecordsetTypeEnum.dbOpenDynaset)
    With zcls_CS.CS_rs
        If Not IsMissing(UseIndexName) Then
            .Index = UseIndexName
        End If
        .FindFirst "CS_CustomerID = " & CustomerID & " and CS_ProductID = " & ProductID
        If .NoMatch Then
            zcls_CS.CS_EOF = True
        Else
            zcls_CS.CS_EOF = False
            zcls_CS.CS_ID = .Fields("[ID]")
            zcls_CS.CS_CustomerID = .Fields("[CS_CustomerID]")
            zcls_CS.CS_PhysSalesStock = .Fields("[CS_PhysSalesStock]")
            zcls_CS.CS_ProductID = .Fields("[CS_ProductID]")
            zcls_CS.CS_PurQuantityRecvd = .Fields("[CS_PurQuantityRecvd]")
            zcls_CS.CS_PurUnitDesc = .Fields("[CS_PurUnitDesc]")
            zcls_CS.CS_PurUnitFactor = .Fields("[CS_PurUnitFactor]")
            zcls_CS.CS_SaleQuantityAlloc = .Fields("[CS_SaleQuantityAlloc]")
            zcls_CS.CS_SaleQuantityOrdered = .Fields("[CS_SaleQuantityOrdered]")
            zcls_CS.CS_SaleUnitDesc = .Fields("[CS_SaleUnitDesc]")
            zcls_CS.CS_SaleUnitFactor = .Fields("[CS_SaleUnitFactor]")
        End If
    End With
    If Not KeepRsOpen Then
        Call IOclCustomerStock
    End If

    IOrdCustomerStock = Not zcls_CS.CS_EOF

End Function

将问题限制在链接表后,我发现了以下 post:

https://social.msdn.microsoft.com/Forums/office/en-US/d402a8d2-0771-458c-b57e-09e2d6f0c536/trying-to-open-a-linked-table-whats-going-on?forum=accessdev

我不假装理解 OpenDatabase 参数,但它确实有效。我只需要在我的小概念证明中添加通常的错误处理:

Public Function IOksInitRsIX1CustomerStock(UseIndexName As String, CustomerID As Long, ProductID As Long) As Boolean
Set zcls_CS.CS_rs = OpenDatabase(Mid(DBEngine(0)(0).TableDefs(CS_TableName).Connect, 11)).OpenRecordset(CS_TableName)
With zcls_CS.CS_rs
    zcls_CS.CS_rs.Index = UseIndexName
    If (CustomerID > 0 And ProductID > 0) Then
        .Seek "=", CustomerID, ProductID
    Else
        If CustomerID > 0 Then
            .Seek "=", CustomerID
        End If
    End If
    If .NoMatch Then
        zcls_CS.CS_EOF = True
    Else
        zcls_CS.CS_EOF = False
        zcls_CS.CS_ID = .Fields("[ID]")
        zcls_CS.CS_CustomerID = .Fields("[CS_CustomerID]")
        zcls_CS.CS_PhysSalesStock = .Fields("[CS_PhysSalesStock]")
        zcls_CS.CS_ProductID = .Fields("[CS_ProductID]")
        zcls_CS.CS_PurQuantityRecvd = .Fields("[CS_PurQuantityRecvd]")
        zcls_CS.CS_PurUnitDesc = .Fields("[CS_PurUnitDesc]")
        zcls_CS.CS_PurUnitFactor = .Fields("[CS_PurUnitFactor]")
        zcls_CS.CS_SaleQuantityAlloc = .Fields("[CS_SaleQuantityAlloc]")
        zcls_CS.CS_SaleQuantityOrdered = .Fields("[CS_SaleQuantityOrdered]")
        zcls_CS.CS_SaleUnitDesc = .Fields("[CS_SaleUnitDesc]")
        zcls_CS.CS_SaleUnitFactor = .Fields("[CS_SaleUnitFactor]")
    End If
End With

IOksInitRsIX1CustomerStock = Not zcls_CS.CS_EOF

结束函数