从recordset.field.type 属性中获取ADO 数据类型的名称?
Posted
技术标签:
【中文标题】从recordset.field.type 属性中获取ADO 数据类型的名称?【英文标题】:Get the name of an ADO data type from the recordset.field.type property? 【发布时间】: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 那样使用动态类型)。
【参考方案1】:
问题(上)下的 cmets 中的答案非常好,不幸的是,它们归结为“你无法从这里到达那里”。没有简单的方法可以在字段中获取包含的数据类型。我能做到的最接近的就是为快速而肮脏的人做这个:
Function Scripting()
Dim rs As DAO.Recordset
Dim ff As String
Dim fieldType As String
ff = "c:\Users\me\Desktop\Structure.txt"
Open ff For Output As #1
Set rs = CurrentDb.OpenRecordset("myTable")
For x = 0 To rs.Fields.Count - 1
Print #1, rs.Fields(x).Name & vbTab & TypeName(rs.Fields(x).Value) & vbTab & rs.Fields(x).Size
Next
Close #1
rs.Close
Set rs = Nothing
End Function
建议您访问Allen Browne 的优秀页面并获取他的 FieldTypeName() 函数以获得更好的解决方案。
感谢所有提供答案的人(mehow、blackhawk、Chris Rolliston 和 Tim Williams)。
【讨论】:
以上是关于从recordset.field.type 属性中获取ADO 数据类型的名称?的主要内容,如果未能解决你的问题,请参考以下文章