2017-09-03 2 views
0

지난 몇 년 동안 많은 문제에 대한 솔루 션을 찾았지만 처음 질문을했습니다.지정된 인덱스를 사용하는 MS Access 2007 DAO 오픈 레코드

저는 답을 찾을 수없는 좌절스러운 문제가 있습니다. 테이블에 정의 된대로 특정 인덱스 이름을 사용하여 다이너 셋 DAO 레코드 집합으로 연 링크 된 테이블을 통해 순차적으로 읽기 전에 초기 읽기를 수행하려고합니다.

내 코드는 .index 행에서 '작업이 지원되지 않습니다 ...'오류 3251을 반환합니다. 의심의 여지가 명백한 솔루션입니다 (당신은 명백한 대답이 될 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 행에 잘못된 연산이 발생하고 recordert 정의를 dao.recordset에서 일반 레코드 세트로 변경하는 경우에도 마찬가지입니다. – user7425513

+0

P.P.S. 로컬로 정의 된 레코드 세트를 사용하면 동일한 오류가 발생합니다 (클래스의 요소로 정의 된 레코드 세트를 사용하는 모든 probem을 제거하기 위해). 기본 문제는 레코드 집합의 인덱스 속성을 사용할 수 있도록 테이블 형식으로 레코드 집합을 열어야하지만 분명히 뭔가를하고 있다는 것입니다. – user7425513

+0

오타의 사과 ... 내 주 컴퓨터가 풀이므로 내 백업 컴퓨터의 프랑스어 키보드로 고민 중입니다 ... – user7425513

답변

0

내가 연결된 테이블에 대한 문제를 제한 더라면, 나는 다음과 같은 게시물을 발견 : 나는 수 OpenDatabase 매개 변수를 이해하는 척하지 않지만 작동

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

.

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 

최종 기능