【发布时间】:2013-11-01 21:26:01
【问题描述】:
我需要从 Access 表中生成字段列表(名称、类型和大小)。这个简单的 VB 代码给了我几乎我需要的东西:
Set rs = CurrentDb.OpenRecordset("myTable")
For x = 0 To rs.Fields.Count - 1
Print #1, rs.Fields(x).Name & vbTab & rs.Fields(x).Type & vbTab & rs.Fields(x).Size
Next
但是,“类型”当然是像“10”这样的数字常量,而不是像“Varchar”这样的东西。
我打算这样做:
Select Case rs.Fields(x).Type
Case adChar
fieldType = "adChar"
Case adInteger
fieldType = "adInteger"
Case adDouble
ETCETERA....
但我想知道是否有更好的方法,比如 DataTypeEnum.FindName(Type) 之类的?
如果这是一个“愚蠢的问题”,请提前道歉,但我不是每天都在 VB 中工作,谷歌搜索对此没有明确的答案。
【问题讨论】:
-
这不是一个愚蠢的问题。试试
Debug.Print TypeName(rs.Fields(x)), VarType(rs.Fields(x))我还没有测试过但试一试 -
没有简单的方法可以将(在 VBA 中)枚举值转换为其等效的“名称”。你拥有它的方式几乎就是你如何做到的。
-
艾伦布朗有一个很好的page listing the constants,他甚至还有一个FieldTypeName(在那个页面上向下滚动一点)功能,但你可能仍然需要自己动手才能得到确切的结果你想要的。
-
@mehow - 感谢您的快速响应,我最终得到的结果是 TypeName(rs.Fields(x).Value),它给了我所需的 90% (它报告了两个“货币”字段为“空”,但我可以忍受。)再次感谢。
-
@user1071914 - 如果值为空,它将报告“空”。您这样做的方式不是检查字段/列 ADO 类型,而是检查字段/列中值的 VBA 类型。诚然,这里的区别在纯 Access 上下文中有点学术性(ADO 和 VBA 类型系统之间的映射非常直接,而且 Access 作为数据库引擎并不像 SQLite 那样使用动态类型)。