2017-01-16 71 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 

我錯過了什麼?我真的試過不同勢搜索字符串:(

+0

你爲什麼不搜索在表內的完整查詢中,ID是來自訪問表的字段? – jsanchezs

+0

我的意思是,像這樣:rst2.source =「Select * from tablename where ID ='」&messID&「'」 – jsanchezs

+0

對不起,我不熟悉訪問和我的訪問版本是在德國,這並沒有幫助.. 。我有一個包含唯一ID的表(「Stammdaten」)。我有另一個包含每個ID(「Verwendung」)的多個entrys的表。我試圖讓一個ID的每個條目一次排序這些條目,然後只寫一個回到另一個表(不在代碼中)希望有一點幫助.... 使用查詢將無法正常工作有多個條目爲每個ID :( –

回答

1

的hunderds你有一個表型recorset而你由按鍵搜索它。這是典型的用例的Seek方法,而不是Find方法。

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

查找方法(使用FindFirst,FindLast中,FindNext和FindPrevious中)適用於動態集和快照,但不表對象相反,Seek方法僅適用於Table對象。

儘管該頁面似乎比ADO更注重DAO,但同樣的邏輯應該適用於這兩種情況。

我想你應該嘗試的Seek方法https://msdn.microsoft.com/en-us/library/ms675109(v=vs.85).aspx

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

尋找不幸不起作用(運行時錯誤3251)奇怪的是,在另一點a .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,很多時候,但2個想法,我既沒有很graceful-

1)Application.WorksheetFunction.Transpose(rst2.GetRows)(請確保使用.MoveLast.MoveFirst首先)獲得一個記錄集的數組,然後您可以通過迭代找到您正在尋找的ID ...

2)相同的想法,但只是在做記錄...

而且,其他人曾提到一個新的查詢一定會得到你您是在尋找...

希望這有助於價值, TheSilkCode