2017-09-03 91 views
0

这是我第一次问一个问题,虽然多年来我找到了许多我的兄弟的解决方案。使用指定索引的MS Access 2007 DAO打开记录集

我有一个令人沮丧的问题,我无法找到答案。我想通过使用表中定义的特定索引名称作为动态集DAO记录集打开的链接表,按顺序执行初始读取。

我的代码在.index行中返回错误3251'operation is not supported ...'。毫无疑问,有一个明显的解决方案(请注意,我试图避免打开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 
+0

附:如果我将记录集类型更改为Type:= RecordsetTypeEnum.dbOpenTable,那么我在openrecordset行上得到一个无效操作,并且如果我将记录定义从dao.recordset更改为普通记录集。 – user7425513

+0

P.P.S.如果我使用本地定义的记录集(只是为了消除使用定义为类的元素的记录集的任何探针),我会得到相同的错误。我认为最基本的问题是我需要打开记录集作为表类型,以使我能够使用记录集的索引属性,但我显然做了一些事情(我期望非常明显)是错误的。 – user7425513

+0

对于错字的道歉...我在我的备份计算机上用法语键盘挣扎,因为我的主机器是游泳池...... – user7425513

回答

0

一旦我已经制约了问题链接的表,我发现下面的帖子:

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 

端功能

相关问题