前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA与数据库——写个类操作ADO_读取字段信息

VBA与数据库——写个类操作ADO_读取字段信息

作者头像
xyj
发布2022-03-29 17:10:55
5300
发布2022-03-29 17:10:55
举报
文章被收录于专栏:VBA 学习VBA 学习
读取字段信息:这个和读取表名是一样,也是为了避免不必要的浪费时间,做成手动来读取。

ADO读取字段信息也可以使用OpenSchema,但是有的数据库也不一定支持。

像读取表名那样,很多数据库都有特定的sql语句,但是又存在返回的信息不统一的问题,特别是对字段类型的描述,不同数据库之间差异较大。

个人目前是读取表的数据,使用Recordset返回的字段信息:

代码语言:javascript
复制
Function GetFieldsInfo(sTableName As String, ret() As FieldInfo) As RetCode
    On Error GoTo errHandle
    
    Dim rst As ADODB.Recordset
    Set rst = adoconn.Execute("select * from " & sTableName & " where 1=2", adOpenForwardOnly, adLockReadOnly)
    
    ReDim ret(rst.Fields.Count - 1) As FieldInfo
    Dim i As Long
    For i = 0 To rst.Fields.Count - 1
        ret(i).SName = rst.Fields(i).name
        ret(i).IType = rst.Fields(i).Type
        ret(i).SType = GetFieldStrType(ret(i).IType)
    Next
    
    GetFieldsInfo = RetCode.SuccRT
    
    Exit Function
errHandle:
    GetFieldsInfo = ERROR_NO
    StrErr = Err.Description
End Function

Private Function GetFieldStrType(i As DataTypeEnum) As String
    Select Case i
    Case adArray
        GetFieldStrType = "adArray"
    Case adBigInt
            GetFieldStrType = "adBigInt"
    Case adBinary
            GetFieldStrType = "adBinary"
    Case adBoolean
            GetFieldStrType = "adBoolean"
    Case adBSTR
            GetFieldStrType = "adBSTR_Char"
    Case adChapter
            GetFieldStrType = "adChapter"
    Case adChar
            GetFieldStrType = "adChar"
    Case adCurrency
            GetFieldStrType = "adCurrency"
    Case adDate
            GetFieldStrType = "adDate"
    Case adDBDate
            GetFieldStrType = "adDBDate"
    Case adDBTime
            GetFieldStrType = "adDBTime"
    Case adDBTimeStamp
            GetFieldStrType = "adDBTimeStamp"
    Case adDecimal
            GetFieldStrType = "adDecimal"
    Case adDouble
            GetFieldStrType = "adDouble"
    Case adEmpty
            GetFieldStrType = "adEmpty"
    Case adError
            GetFieldStrType = "adError"
    Case adFileTime
            GetFieldStrType = "adFileTime"
    Case adGUID
            GetFieldStrType = "adGUID"
    Case adIDispatch
            GetFieldStrType = "adIDispatch"
    Case adInteger
            GetFieldStrType = "adInteger"
    Case adIUnknown
            GetFieldStrType = "adIUnknown"
    Case adLongVarBinary
            GetFieldStrType = "adLongVarBinary"
    Case adLongVarChar
            GetFieldStrType = "adLongVarChar"
    Case adLongVarWChar
            GetFieldStrType = "adLongVarWChar"
    Case adNumeric
            GetFieldStrType = "adNumeric"
    Case adPropVariant
            GetFieldStrType = "adPropVariant"
    Case adSingle
            GetFieldStrType = "adSingle"
    Case adSmallInt
            GetFieldStrType = "adSmallInt"
    Case adTinyInt
            GetFieldStrType = "adTinyInt"
    Case adUnsignedBigInt
            GetFieldStrType = "adUnsignedBigInt"
    Case adUnsignedInt
            GetFieldStrType = "adUnsignedInt"
    Case adUnsignedSmallInt
            GetFieldStrType = "adUnsignedSmallInt"
    Case adUnsignedTinyInt
            GetFieldStrType = "adUnsignedTinyInt"
    Case adUserDefined
            GetFieldStrType = "adUserDefined"
    Case adVarBinary
            GetFieldStrType = "adVarBinary"
    Case adVarChar
            GetFieldStrType = "adVarChar"
    Case adVariant
            GetFieldStrType = "adVariant"
    Case adVarNumeric
            GetFieldStrType = "adVarNumeric"
    Case adVarWChar
            GetFieldStrType = "adVarWChar"
    Case adWChar
            GetFieldStrType = "adWChar"
        
    Case Else
        GetFieldStrType = "UnKnowDataType"
    End Select
End Function

这样能够保证字段的数据类型统一,在后续的一些处理上比较方便。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档