2016-08-11 8 views
0

第1フィールドが等しく、第2フィールドがより大きい複数のインデックスキーを使用する方法。シーク方式で複数のインデックスを使用するVBA

例:VBA

DIM Name as string 
DIM Age as Integer 
DIM Table_1 as Recordset 

Name = "Tom" 
Age = 20 

Set Table_1 = Currentdb.OpenRecorset("Persons") 
Table_1.INDEX = "Second_key" 
Table_1.SEEK "=", Name, ">", Age 

上のMS Accessの

Table: Persons(Name[string], Family_name, Age[Int]) 
Index: Second_key(Name, Age) 

と私はエラー "実行時エラー '3421' 種類変換エラー"

MSを取得複数のキーで検索することができます。https://msdn.microsoft.com/en-us/library/bb221096%28v=office.12%29.aspx

お願いします。

答えて

2

あなたの例を少し無視してください。私には意味がありません。そのようなデータにその特定のインデックスを使用する理由は何ですか?私はちょうどあなたが一般的な質問をするために取り組んだ抽象的な例であると仮定しています。

ドキュメンテーションを再度確認してください。 Recordset.Seekは、複数列のインデックスの各列に対して異なる比較器を使用するとは限りません。代わりに、コンパレータと一致する最初の項目と指定されたすべての値が検索されます。あなたは名> = Nameと年齢> = Age

最初の行に努めてまいりますTable_1.SEEK ">=", Name, Ageようなもので、あなたの現在のコードを交換したいと思います。しかし、それは名前を可能にするので、それは、あなたが達成したいかなり何おそらくではありません>Nameおよび年齢= Agehttps://msdn.microsoft.com/en-us/library/office/ff820966.aspx

:だから、あなただけのこれらの例のように、この保存された、パラメータ化クエリからレコードセットを取得するために QueryDefを使用

SELECT TOP 1 Name, Family_Name, Age 
FROM Persons 
WHERE Name = [SearchName] 
    AND Age > [SearchAge] 

のように、あなたが望んでいたまさに与えSQLクエリに変更し、おそらく方がいいでしょう

+0

あなたの答えをありがとう。 実際のベースでは、指定されたマシンの特定の日付の後に最初のサービス介入を検索する必要があります。 そして私は、クエリ 'ATM_SN = 'A1230' と日付>#2016年8月16日#や地域= 'WARSAW' Table_01 から分(日) を選択し使用;' しかし、これは非常にゆっくりと作品を.. プログラムのパフォーマンスを向上させるためにさまざまな比較でシークメソッドを使用したいと考えていました。 まあ、できません。 –

+1

@MirekF:クエリをスピードアップするには、WHERE句のすべての列がインデックスされていることを確認してください。 – Andre

関連する問題