0

目标:使用查询字符串设置记录集,然后执行FindFirst = number以在记录集中查找特定 ID 并因此记录。

问题:记录集生成正确但FindFirst一致,不正确地匹配低于某个值的 ID。

描述:当我创建一个记录集内部(或左或右)加入 Task 和 Task_Entry 匹配特定的 CycleID 和 TaskDataID 值时,我得到一个记录列表(在我的记录集中,我确保 TaskID 没有歧义)。如果我FindFirst有任何低于 1469 的值FindFirst,则每次都返回 1469 记录。请参阅下面的示例记录和结构。

原始查询(放入 a CurrentDB.OpenRecordset()):
"SELECT Datetime, TaskDataID, SigID, Task_Entry.* FROM Task INNER JOIN Task_Entry ON Task_Entry.TaskID = Task.TaskID WHERE Task.CycleID = " & inputCycleID & " AND Task.TaskDataID = " & inputTaskDataID & " ORDER BY Task.TaskID"

表结构

  • 通过自动编号 ID 字段绑定的两个表:
  • 任务包含一般任务信息(日期时间、签名 ID 等)
  • Task_Entry 包含条目特定信息的子集
  • 并非 Task 中的所有记录都与 Task_Entry 相关

示例记录
任务TaskID、Datetime、TaskDataID、CycleID、SigId
1447 03/09/16 15 7 1495 (TaskDataID 不同)
……其他记录
1469 03/15/16 15 8 1518
……其他记录

Task_Entry:任务ID 、数据1、
数据2 1447 929 930.5
1469 919 922

故障排除

  • 最初FindFirst在 VBA 中使用:rst.FindFirst "TaskID = " & inputTaskID其中 inputTaskID 是一个变体。
    • 数据类型无关紧要。强制数据类型为 Long 并且仍然以某种方式匹配 1447 到 1469。
  • 将记录集更改为仅返回 TaskID = inputTaskID。
    • "SELECT Datetime, TaskDataID, SigID, Task_Entry.* FROM Task INNER JOIN Task_Entry ON Task_Entry.TaskID = Task.TaskID WHERE Task.TaskID = " & inputTaskID
    • 这行得通;返回与 inputTaskID 匹配的一条记录。
    • 我有返回整个集合匹配 CycleID 和 TaskDataID 的用例,所以我仍然想知道为什么这不起作用。
4

1 回答 1

0

FindFirst在记录集上使用并导致NoMatch为真时,记录集将保留在当前记录上。

在这种特定情况下,原始查询过度约束 TaskDataID 参数上的记录,返回一组不包含正在搜索的 ID 的记录。执行FindFirst将记录集留在第一条记录上(在本例中是 TaskID = 1469 的记录)。

于 2016-07-08T19:13:50.357 回答