2017-09-03 100 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 

端功能

相關問題