【问题标题】:Findfirst matching long integers incorrectlyFindfirst 不正确地匹配长整数
【发布时间】: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_EntryTaskID、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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多