MS-Access VBA Listbox.ItemData基础数据类型

时间:2015-12-09 12:37:47

标签: database vba ms-access access-vba type-conversion

请考虑下面的小片段:

 If rs!Manufacturer = myListbox.ItemData(Index) Then

这两只手表:

Watch :  rs!Manufacturer.Value            :  1    : Variant/Long
Watch :  Me.myListbox.ItemData(Index)     : "1"   : Variant/String

rs!Manufacturer.Value来自记录集myTablers检索到的表Me.myListbox.ItemData(Index)中的整数值完全相同的数据但显示在我的ListBox控件中表格并从同一张表中检索。

似乎很清楚,listbox正在将原始数据类型转换为原始值的字符串表示形式,因此,当我期望它成功时,与给定值的比较失败...

所以问题是:是否有一种(简单)方法从我的列表框中检索原始数据类型的数据(换句话说,与我的表格中的数据类型相同)?

许多人可以指出我可以轻松地将列表框值转换回CInt()CLng()的整数,但是在检索原始类型的数据时会使我的代码严重绑定到每个特定情况,不会这会使代码更清晰,更完整可靠。

好的,另一个想法是将记录集值转换为string,但从C程序员的角度来看,这对我来说似乎太痛苦了,所以我宁愿避免它。

提前致谢!

1 个答案:

答案 0 :(得分:1)

列表 - 和 ComboBox 始终返回一个字符串。

这真的没什么大不了的。您将知道记录集字段的数据类型,因此只需转换即可 - 例如:

rs!Manufacturer.Value = Val(Me!myListbox.ItemData(Index))

<强>附录

如果您希望继续使用数据类型,只需在填充列表框时在列表框中添加一列填充VarType值即可。

从列表框中读取值时,还要读取包含数据类型的(隐藏)列,并使用带有Select .. Case构造的函数将文本值转换为原始数据类型。