【问题标题】:Use multiple index on seek method VBA在查找方法VBA上使用多个索引
【发布时间】:2016-08-11 13:47:28
【问题描述】:

如何使用多个索引键,第一个字段相等且大于第二个字段。

例如:

在 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

请帮帮我。

【问题讨论】:

    标签: vba ms-access indexing seek


    【解决方案1】:

    忽略您的示例,因为对我而言,您为什么要对此类数据使用该特定索引没有任何意义,甚至没有提及您为什么要以这种方式搜索它。我只是假设其中的某些部分是一个抽象的例子,你只是为了提出一般性问题......

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

    的第一行

    但这可能不是您想要实现的,因为它允许 Name > Name 和 Age = 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

    【讨论】:

    • 感谢您的回答。在一个真实的基地中,我需要在指定机器中的特定日期之后搜索第一个服务干预。而且我使用查询select min(date) from Table_01 where ATM_SN = 'A1230' and date >#8-16-2016# and region = 'WARSAW';,但是,这个工作很慢......我想用各种比较的seek方法来加速程序性能,嗯,我不能。
    • @MirekF.:为了加快查询速度,请确保 WHERE 子句中的所有列都已编入索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 2022-11-22
    相关资源
    最近更新 更多