我是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.
我为何会发生这种情况感到茫然。也许有一个简单的答案,但我找不到一个......也许有一个更容易的方法来做到这一点?有谁知道为什么会发生这种错误?
答案 0 :(得分:2)
由于[ID]
是文字类型,因此为IDnum
的{{1}}值添加引号。
DLast
但是,如果存储的i = DLast("InstanceNum", "tbl_Data", "[ID] = '" & IDnum & "'")
值包含前导零,则必须[ID]
Format
包含这些值。
IDnum