在搜索方法VBA上使用多个索引

时间:2016-08-11 13:47:28

标签: vba ms-access indexing seek

如何在第一个字段上使用多个索引键,在第二个字段上使用多个索引键。

例如:

在MS Access上

Table: Persons(Name[string], Family_name, Age[Int])
Index: Second_key(Name, Age)
在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

我收到错误“RUN-TIME error'3421'类型转换错误”

MS Access允许按多个键进行搜索,请参阅https://msdn.microsoft.com/en-us/library/bb221096%28v=office.12%29.aspx

请帮助我。

1 个答案:

答案 0 :(得分:2)

稍微忽略你的例子,因为对我来说没有意义为什么你要为那种数据使用那个特定的索引,甚至没有提到为什么你想要以这种方式寻找它。我只是假设这部分内容是一个抽象的例子,你只是为了提出一般问题......

仔细检查文档。 Recordset.Seek并不期望您为多列索引中的每列使用不同的比较器。相反,它将找到匹配比较器的第一个项目和指定的所有值。您希望将当前代码替换为类似Table_1.SEEK ">=", Name, Age的内容,这些内容会搜索名称> = Name和Age> = Age

的第一行

但这可能不是你想要达到的目标,因为它允许Name> Name和年龄= Age。因此,您最好只需更改为能够提供所需内容的SQL查询,例如

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

然后使用QueryDef从这个已保存的参数化查询中获取记录集,如下例所示:https://msdn.microsoft.com/en-us/library/office/ff820966.aspx