【发布时间】:2016-11-11 10:12:41
【问题描述】:
目标:使用查询字符串设置记录集,然后执行FindFirst = number 以在记录集中查找特定ID,从而记录。
问题:记录集生成正确,但 FindFirst 始终错误地匹配低于某个值的 ID。
描述:当我创建一个记录集内部(或左或右)加入 Task 和 Task_Entry 匹配特定 CycleID 和 TaskDataID 值时,我得到一个记录列表(在我的记录集中,我确保 TaskID 不是t 模棱两可)。如果我 FindFirst 任何低于 1469 的值,FindFirst 每次都会返回 1469 记录。请参阅下面的示例记录和结构。
原始查询(放入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:TaskID、Data1、Data2
1447 929 930.5
1469 919 922
疑难解答:
- 最初在 VBA 中使用
rst.FindFirst "TaskID = " & inputTaskID执行FindFirst,其中 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 的用例,所以我仍然想知道为什么这不起作用。
【问题讨论】:
-
您是否看到与更简单的“从任务中选择不同的任务 ID”查询相同的行为?
-
是的。只需运行上面的“原始查询”,添加 DISTINCT 并删除 ORDER BY(因为它引发了有关冲突的错误)。相同的不匹配 1469 = 1447。
-
发生这种情况时
rst.NoMatch的值是多少?执行 Findfirst 之前 Field 的值是否发生变化? -
啊啊啊!真的?!?!为什么是真的?!以及为什么它会返回错误的数字。啊!
-
是真的,因为没有匹配(所以当前记录没有改变)。至于为什么没有匹配 - 如果你打印出所有的值就是你在输出中寻找的那个?
标签: vba ms-access dao data-access-object