在多记录的最后一个实例中查找值

时间:2013-11-22 21:31:00

标签: vba ms-access access-vba ms-access-2010

我是Access和SQL的新手,所以我对这个毫无疑问的简单问题有点麻烦。

我正在使用VBA和SQL根据一些listbox选项更新表。

我正在更新的一个字段是“实例”字段,它跟踪每个ID的实例编号。例如,第一次将ID 5添加到表中,其实例编号为1.第二次将其添加到表中,其实例将为2.所以它看起来像这样:

ID        |      Date       |     InstanceNUM    |
005       |    11/22/2013   |         1          |
005       |    11/23/2013   |         2          | 

等等。其他记录可能/将在上面的示例中分隔两个记录。

在做了一些研究之后,似乎DLast是这项工作的最佳功能,因为特定ID的最后一个实例也将包含第三个字段中的实例编号。但是,当我使用这种语法时:

Dim i As Long
Dim IDnum As Long
i = DLast("[InstanceNum]", "tbl_Data", [ID] = IDnum)
'where [InstanceNum] is the field name for the value I want to return, _
'"tbl_Data" is the table name where the value I want to return exists, _
'and [ID] is the field name where the ID exists.

我得到Run-time error '94': Invalid use of Null。我对此错误的理解是DLast无法根据此条件找到值(并且它无法将该结果存储在Long数据类型变量中),但我知道该记录存在(我已经检查了表的值,我已经检查了变量的值)。 的修改
[ID]字段是文本数据类型。我用这种方式设置IDnum变量:

Dim IDnum As String
Set ctlList = Me!List7  

For i = 0 To ctlList.ListCount - 1
    If ctlList.Selected(i) = True Then
        IDnum = ctlList.Column(0, i)
        Exit For
    End If
Next I

上面的代码以我拥有的形式循环遍历列表框,并将IDnum变量设置为第一列中的ID号。

根据HansUp的建议,我已将代码更新为:

i = DLast("InstanceNum", "tbl_Data", "[ID] =" & IDnum)

但现在我得到了Run-time error '3464': Data type mismatch in criteria expression.

我为何会发生这种情况感到茫然。也许有一个简单的答案,但我找不到一个......也许有一个更容易的方法来做到这一点?有谁知道为什么会发生这种错误?

1 个答案:

答案 0 :(得分:2)

由于[ID]是文字类型,因此为IDnum的{​​{1}}值添加引号。

DLast

但是,如果存储的i = DLast("InstanceNum", "tbl_Data", "[ID] = '" & IDnum & "'") 值包含前导零,则必须[ID] Format包含这些值。

IDnum