Findfirst 错误地匹配长整数
Findfirst matching long integers incorrectly
Objective:使用查询字符串设置记录集,然后执行FindFirst = number
在记录集中查找特定ID,并因此记录。
问题:记录集生成正确,但FindFirst
始终如一,错误匹配低于特定值的 ID。
描述:当我创建记录集内部(或左侧或右侧)连接任务并Task_Entry匹配特定的 CycleID 和 TaskDataID 值时,我得到一个记录列表(在我的记录集中,我确保 TaskID 没有歧义)。如果我 FindFirst
任何低于 1469 的值,每次都会 FindFirst
return 记录 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"
Table 结构:
- 通过自动编号 ID 字段绑定的两个表:
- 任务包含一般任务信息(日期时间、签名 ID 等)
- Task_Entry 包含条目特定信息的子集
- 并非任务中的所有记录都与 Task_Entry
相关
示例记录:
任务:TaskID、Datetime、TaskDataID、CycleID、SigId
1447 03/09/16 15 7 1495 (TaskDataID 不同)
...其他记录
1469 16 年 3 月 15 日 15 8 1518
...其他记录
Task_Entry: TaskID, Data1, Data2
1447 929 930.5
1469 919 922
疑难解答:
- 最初在 VBA 中执行
FindFirst
使用:rst.FindFirst "TaskID = " & inputTaskID
其中 inputTaskID 是一个变体。
- 数据类型无关紧要。强制数据类型为 Long,但仍然以某种方式匹配 1447 到 1469。
- 将记录集更改为仅 return TaskID = inputTaskID。
"SELECT Datetime, TaskDataID, SigID, Task_Entry.* FROM Task INNER JOIN Task_Entry ON Task_Entry.TaskID = Task.TaskID WHERE Task.TaskID = " & inputTaskID
- 这有效; return一条匹配inputTaskID的记录。
- 我有 return 整个集合匹配 CycleID 和 TaskDataID 的用例,所以我仍然想知道为什么这不起作用。
当 FindFirst
用于记录集并导致 NoMatch
为真时,记录集保留在当前记录上。
在此特定情况下,原始查询过度限制了 TaskDataID 参数上的记录,返回一组不包含要搜索的 ID 的记录。执行 FindFirst
将记录集留在第一条记录上(在本例中是 TaskID = 1469 的记录)。
Objective:使用查询字符串设置记录集,然后执行FindFirst = number
在记录集中查找特定ID,并因此记录。
问题:记录集生成正确,但FindFirst
始终如一,错误匹配低于特定值的 ID。
描述:当我创建记录集内部(或左侧或右侧)连接任务并Task_Entry匹配特定的 CycleID 和 TaskDataID 值时,我得到一个记录列表(在我的记录集中,我确保 TaskID 没有歧义)。如果我 FindFirst
任何低于 1469 的值,每次都会 FindFirst
return 记录 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"
Table 结构:
- 通过自动编号 ID 字段绑定的两个表:
- 任务包含一般任务信息(日期时间、签名 ID 等)
- Task_Entry 包含条目特定信息的子集
- 并非任务中的所有记录都与 Task_Entry 相关
示例记录:
任务:TaskID、Datetime、TaskDataID、CycleID、SigId
1447 03/09/16 15 7 1495 (TaskDataID 不同)
...其他记录
1469 16 年 3 月 15 日 15 8 1518
...其他记录
Task_Entry: TaskID, Data1, Data2
1447 929 930.5
1469 919 922
疑难解答:
- 最初在 VBA 中执行
FindFirst
使用:rst.FindFirst "TaskID = " & inputTaskID
其中 inputTaskID 是一个变体。- 数据类型无关紧要。强制数据类型为 Long,但仍然以某种方式匹配 1447 到 1469。
- 将记录集更改为仅 return TaskID = inputTaskID。
"SELECT Datetime, TaskDataID, SigID, Task_Entry.* FROM Task INNER JOIN Task_Entry ON Task_Entry.TaskID = Task.TaskID WHERE Task.TaskID = " & inputTaskID
- 这有效; return一条匹配inputTaskID的记录。
- 我有 return 整个集合匹配 CycleID 和 TaskDataID 的用例,所以我仍然想知道为什么这不起作用。
当 FindFirst
用于记录集并导致 NoMatch
为真时,记录集保留在当前记录上。
在此特定情况下,原始查询过度限制了 TaskDataID 参数上的记录,返回一组不包含要搜索的 ID 的记录。执行 FindFirst
将记录集留在第一条记录上(在本例中是 TaskID = 1469 的记录)。