VBA-access表信息的获取

1.首先我们来直接获取某个数据库的所有表信息

Sub 获取数据库中所有表的名称和类型()
    Dim i As String
    Dim mydata As String
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    mydata = ThisWorkbook.Path & "\学生管理.accdb"
    With con
        .Provider = "microsoft.ace.oledb.12.0"
        .Open mydata
        
    End With
    Cells.Clear
    Range("A1:B1") = Array("表名称", "表类型")
    i = 2
    Set rs = con.OpenSchema(adSchemaTables)
    Do Until rs.EOF
    If rs("table_type") = "TABLE" Then
        Cells(i, 1) = rs("table_name")
        Cells(i, 2) = rs("table_type")
        i = i + 1
    End If
        rs.MoveNext
    Loop
    Columns.AutoFit
    rs.Close
    Set rs = Nothing
    Set con = Nothing
    
End Sub

2.检查某个字段是否存在

Sub 检查数据是否存在()
    Dim mydata As String
    Dim mytable As String
    Dim mycol As String
    Dim con As New ADODB.Connection
    Dim rs As ADODB.Recordset
    mydata = ThisWorkbook.Path & "\学生管理.accdb"
    mytable = "学生"
    mycol = "姓名"
    
    With con
        .Provider = "microsoft.ace.oledb.12.0"
        .Open mydata
    End With
    Set rs = con.OpenSchema(adSchemaColumns)
    rs.Find "column_name='" & mycol & "'"
    If rs.EOF Then
        MsgBox "数据表<" & mytable & ">中不存在字<" & mycol & ">"
    Else
        MsgBox "数据表<" & mytable & ">中存在字<" & mycol & ">"
    End If
hhh:
    rs.Close
    con.Close
    Set rs = Nothing
    Set con = Nothing
    

End Sub

3.获取某个数据表的所有字段名称和类型,要注意的是用field.type 返回的不是字符串结果,而是其对应的数字,所以,用自定义函数inttostring来实现转换

Sub 获取数据表的所有表的名称和类型()
    Dim i As Integer
    Dim mydata As String
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim mytable As String
    mydata = ThisWorkbook.Path & "\学生管理.accdb"
    mytable = "学生"
    With con
        .Provider = "microsoft.ace.oledb.12.0"
        .Open mydata
        
    End With
    Cells.Clear
    Range("A1:C1") = Array("字段名", "字段类型", "字段大小")
    i = 2
    Dim myfield As ADODB.Field
    rs.Open mytable, con, adOpenKeyset, adLockOptimistic '直接打开对应的表
    For Each myfield In rs.Fields
        Range("A" & i) = myfield.Name
        'field.type 用于获取字段的类型,但不会直接返回类型的字符串
        '而是返回表示该类型的一个integer
        'Range("B" & i) = myfield.Type
         Range("B" & i) = inttostring(myfield.Type)
        Range("C" & i) = myfield.DefinedSize
        i = i + 1
    Next
    Columns.AutoFit
    rs.Close
    con.Close
    Set rs = Nothing
    Set con = Nothing
    
        
    
End Sub

4.转换函数

Function inttostring(myint As Integer) As String
    Dim mystr As String
    Select Case myint
        Case 20: mystr = "adBigInt"
        Case 128: mystr = "adBinary"
        Case 11: mystr = "adBoolean"
        Case 8: mystr = "adBSTR"
        Case 136: mystr = "adChapter"
        Case 126: mystr = "adChar"
        Case 6: mystr = "adCurrency"
        Case 7: mystr = "adDate"
        Case 133: mystr = "adDBDate"
        Case 134: mystr = "adDBTime"
        Case 135: mystr = "adDBTimeStamp"
        Case 14: mystr = "adDecimal"
        Case 5: mystr = "adDouble"
        Case 0: mystr = "adEmpty"
        Case 10: mystr = "adError"
        Case 64: mystr = "adFileTime"
        Case 72: mystr = "adGUID"
        Case 9: mystr = "adIDispatch"
        Case 3: mystr = "adInteger"
        Case 205: mystr = "adLongVarBinary"
        Case 201: mystr = "adLongVarChar"
        Case 203: mystr = "adLongVarWchar"
        Case 131: mystr = "adNumeric"
        Case 130: mystr = "adPropVariant"
        Case 4: mystr = "adSingle"
        Case 2: mystr = "adSmallInt"
        Case 16: mystr = "adTinyInt"
        Case 21: mystr = "adUnsignedBigInt"
        Case 19: mystr = "adUnsignedInt"
        Case 18: mystr = "adUnsignedSmallInt"
        Case 17: mystr = "adUnsignedTinyInt"
        Case 132: mystr = "adUserDefined"
        Case 204: mystr = "adVarBinary"
        Case 200: mystr = "adVarchar"
        Case 12: mystr = "adVariant"
        Case 139: mystr = "adVarNumeric"
        Case 202: mystr = "adVarWChar"
        Case 130: mystr = "adWChar"
        Case Else: mystr = "error"
    End Select
    inttostring = mystr
    
End Function

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值