2013-11-01 83 views
8

我需要从Access表中生成字段(名称,类型和大小)的列表。这个简单的VB代码给我几乎我需要什么:从recordset.field.type属性获取ADO数据类型的名称?

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(类型):什么?

如果这是一个“愚蠢的问题”,提前道歉,但我没有在VB每天工作,谷歌没有产生明确的答案。

+3

这不是一个愚蠢的问题。尝试'Debug.Print TypeName(rs.Fields(x)),VarType(rs.Fields(x))'我还没有测试过,但只是给它一个 – 2013-11-01 21:28:29

+3

有没有简单的方法来转换(在VBA中)一个枚举值到其等效的“名称”。你拥有它的方式几乎是你如何做到的。 –

+2

艾伦布朗有一个很好的[页面列出常量](http://allenbrowne.com/ser-49.html),他甚至有一个[FieldTypeName](http://allenbrowne.com/func-06.html) (在该页面上向下滚动一点)功能,但您可能仍然需要自行滚动才能获得您想要的内容。 – Blackhawk

回答

6

上述问题中的评论答案非常好,不幸的是他们归结为“你无法从这里得到。”没有简单的方法在字段中获取包含的数据类型。我能来最接近的是为快速正脏做到这一点:

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)的回答。

+1

+1提醒我关于Allen Browne的网站。 – paulroho