2017-01-16 9 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を持っていて、キーでそれを検索している切り抜いた検索文字列:(

+0

テーブル内の完全なクエリ?ID、それはアクセステーブルの右側のフィールドですか? – jsanchezs

+0

これは次のような意味です:rst2.source = "tablenameからIDを選択してください" ID: '"&messID&"' " – jsanchezs

+0

私はアクセスに慣れていないと私のアクセスバージョンはドイツ語で助けになりません。私は一意のID( "Stammdaten")を含む1つのテーブルを持っています。私は、各ID( "Verwendung")の複数のエントリを含む別のテーブルを持っています。私は一度に1つの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

不運にもうまくいきません。(実行時エラー3251)wierdのことは別のポイントで.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方法を試してみるべきだと思いますが、2つのアイデアは私が持っていたどちらも非常にgraceful-

1)Application.WorksheetFunction.Transpose(rst2.GetRows)(使用してください最初に.MoveLast.MoveFirstを入力して、レコードセットの配列を取得し、次に探しているIDを見つけることができます。

2)同じアイデアですが、このことができますレコードセット...また

、他の人が以前に新しいクエリは確かにあなたにyoureのを探していた値になるだろう述べてきたように...

希望、 TheSilkCodeあなたは検索しないのはなぜ

関連する問題