Findfirst错误地匹配长整数

时间:2016-07-08 18:46:07

标签: vba dao access data-access-object

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

问题:记录集生成正确但FindFirst一致,错误地匹配低于特定值的ID。

描述:当我创建一个记录集内部(或左或右)连接Task和Task_Entry匹配特定的CycleID和TaskDataID值时,我得到一个记录列表(在我的记录集中,我确保TaskID isn&# 39;暧昧)。如果我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中使用FindFirst执行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的用例,所以我仍然想知道为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

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

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