2017-01-16 3 views
2

를 사용 recordset.find. 전체 코드는 여기에 있습니다 :내가 일이 사소한 검색을 얻으려고 꽤 필사적 얻고 변수 VBA ADODB

Option Compare Database 
Option Explicit 

'Modul zum Updaten des Status eines Messmittels in der Stammdatenbank (Entnommen/Verfügbar)3 

Public Function updateStatus() 

Dim rst2 As ADODB.Recordset 
Dim rst As ADODB.Recordset 
Dim messID As String 

Set rst = New ADODB.Recordset 'Stammdaten zur Bearbeitung öffnen 
      rst.ActiveConnection = CurrentProject.AccessConnection 
      rst.CursorType = adOpenKeyset 
      rst.LockType = adLockOptimistic 
      rst.Open "Stammdaten" 
      rst.MoveFirst 

Set rst2 = New ADODB.Recordset 'zur Bearbeitung öffnen 
      rst2.ActiveConnection = CurrentProject.AccessConnection 
      rst2.CursorType = adOpenKeyset 
      rst2.LockType = adLockOptimistic 
      rst2.Open "Verwendung" 

Do While Not rst.EOF 
      messID = rst!ID 
      Debug.Print messID 
      rst2.Find "ID = '" & messID & "'" 
      If rst2.EOF = True Then 'Falls nicht vorhanden 
       Debug.Print "Keine Verwendung gefunden!" 
      Else 
       rst2.Sort = "Nr DESC" 
       rst2.MoveFirst 
       Debug.Print rst2!Status 
      End If 
      rst.MoveNext 
Loop 
rst.Close 
rst2.Close 

End Function 

무엇이 누락 되었습니까? 말 그대로 당신은 테이블 형 recorset을하고 키를 검색하는 diffrent 검색 문자열 :(

+0

왜 당신이 검색하지 않는 TheSilkCode, 당신에게 개봉을 위해 ...

희망이 도움이 찾고 가치를 확실히 것이다 테이블 내에서 완전한 쿼리를 통해? ID, 액세스 테이블의 필드일까요? – jsanchezs

+0

다음과 같이 말합니다 : rst2.source = "tablename에서 ID 선택 =" "& messID &" ' " – jsanchezs

+0

죄송합니다. 액세스에 익숙하지 않아 액세스 버전이 독일어로되어 있습니다. 나는 고유 ID ("Stammdaten")를 포함하는 하나의 테이블을 가지고 있는데, 각 ID ("Verwendung")에 대해 여러 개의 항목이 들어있는 다른 테이블이 있습니다. 한 번에 하나의 ID에 대한 모든 항목을 가져와 이러한 항목을 정렬 한 다음 다른 테이블 (코드가 아닌)에 하나만 쓰면 조금 도움이됩니다. 쿼리를 사용하면 이후에 작동하지 않습니다. 각 ID에 대해 여러 항목이 있습니다. ( –

답변

1

의 hunderds을 시도했다.이 대신 Find 방법의 Seek 방법의 일반적인 사용 사례입니다.

이에 따라

: https://support.microsoft.com/en-us/kb/108149

찾기 방법 (FindFirst, FindLast, FindNext, 및 FindPrevious)이 다이너 셋 및 스냅 샷에 적용되지만 표 개체하지에 역으로, 상기 방법은 테이블 만 오브젝트에 사용할 구한다..

해당 페이지가 ADO 이상으로 DAO에 초점을 맞추었지만 동일한 논리가 두 경우 모두에 적용되어야합니다.

난 당신이 https://msdn.microsoft.com/en-us/library/ms675109(v=vs.85).aspx

rst2.Seek "=", messID 
If rst2.NoMatch Then ' not found ... 
+0

unfortunatly 찾기가 작동하지 않습니다. (런타임 오류 3251) 이상한 점은 .find 작동합니다. 완벽하게 똑같은 방식으로 정의 된 레코드 세트 (같은 테이블에서 동일한 데이터 유형의 다른 컬럼) ... –

+1

@ l.wach 놀랍지도 않지만 Seek 메소드는 대개 고유/인덱스 필드에서 작동합니다. 구문은 아마 완전하지 않습니다.이 예제에서와 같이 적용하려고 할 수 있습니다 생각 : https://msdn.microsoft.com/en-us/library/ms675770(v=vs.85).aspx'rst2.Seek 배열 (messId), adSeekFirstEQ' –

+0

검색은 DAO 전용이며 링크 된 것은 아닙니다. 테이블. – Gustav

1

내가 자주 ADO를 사용하지 않는 Seek 방법을 시도해야한다고 생각하지만,이 개 아이디어는 내가 가지고도 매우 graceful-

1) Application.WorksheetFunction.Transpose(rst2.GetRows) (사용해야합니다 .MoveLast.MoveFirst 첫 번째) 당신이 찾고있는 ID를 찾기 위해 반복 할 수있는 레코드 세트의 배열을 얻으려면 ...

2) 같은 생각이지만 그냥 해보십시오. 다른 사람이 이전에 새 쿼리를 언급 한대로 레코드 ... 또한

,