经常有朋友问怎么得到ACCESS的表结构。
- Public Sub getTables()
- Dim rs As New ADODB.Recordset
- Dim conn As ADODB.Connection
- Dim sSql As String
- Set conn = CurrentProject.Connection
- sSql = "select id,Name from MSysObjects where Type=1 and flags=0"
- rs.Open sSql, conn
- Do While Not rs.EOF
- Debug.Print "****"; rs.Fields("Name").Value; "****************"
- getTableColumns rs.Fields("Name").Value
- rs.MoveNext
- Loop
- rs.Close
- Set rs = Nothing
- Set conn = Nothing
- End Sub
- Public Sub getTableColumns(sTableName As String)
- Dim rs As New ADODB.Recordset
- Dim conn As ADODB.Connection
- Dim fld As ADODB.Field
- Set conn = CurrentProject.Connection
- rs.Open sTableName, conn, , , adCmdTable
- For Each fld In rs.Fields
- Debug.Print fld.Name, sFldType(fld.Type), fld.NumericScale, fld.Precision
- Next
- rs.Close
- Set rs = Nothing
- Set conn = Nothing
- End Sub
- Public Function sFldType(iType As Integer)
- Select Case iType
- Case 20
- sFldType = "BigInt"
- Case 128
- sFldType = "Binary"
- Case 11
- sFldType = "Boolean"
- Case 8
- sFldType = "BSTR"
- Case 136
- sFldType = "Chapter"
- Case 129
- sFldType = "Char"
- Case 6
- sFldType = "Currency"
- Case 7
- sFldType = "Date"
- Case 133
- sFldType = "DBDate"
- Case 134
- sFldType = "DBTime"
- Case 135
- sFldType = "DBTimeStamp"
- Case 14
- sFldType = "Decimal"
- Case 5
- sFldType = "Double"
- Case 0
- sFldType = "Empty"
- Case 10
- sFldType = "Error"
- Case 64
- sFldType = "FileTime"
- Case 72
- sFldType = "GUID"
- Case 9
- sFldType = "IDispatch"
- Case 3
- sFldType = "Integer"
- Case 13
- sFldType = "IUnknown"
- Case 205
- sFldType = "LongVarBinary"
- Case 201
- sFldType = "LongVarChar"
- Case 203
- sFldType = "LongVarWChar"
- Case 131
- sFldType = "Numeric"
- Case 138
- sFldType = "PropVariant"
- Case 4
- sFldType = "Single"
- Case 2
- sFldType = "SmallInt"
- Case 16
- sFldType = "TinyInt"
- Case 21
- sFldType = "UnsignedBigInt"
- Case 19
- sFldType = "UnsignedInt"
- Case 18
- sFldType = "UnsignedSmallInt"
- Case 17
- sFldType = "UnsignedTinyInt"
- Case 132
- sFldType = "UserDefined"
- Case 204
- sFldType = "VarBinary"
- Case 200
- sFldType = "VarChar"
- Case 12
- sFldType = "Variant"
- Case 139
- sFldType = "VarNumeric"
- Case 202
- sFldType = "VarWChar"
- Case 130
- sFldType = "WChar"
- Case Else
- sFldType = "unKnown"
- End Select
- End Function
该博客展示了如何使用VBA(Visual Basic for Applications)来获取ACCESS数据库的表结构。通过定义ADODB Recordset 和 Connection 对象,作者编写了两个子程序 `getTables` 和 `getTableColumns`。`getTables` 用于列出所有表名,而 `getTableColumns` 用于打印指定表的所有字段名称及其对应的类型、数值规模和精度。代码中还包含了一个名为 `sFldType` 的函数,用于根据字段类型整数转换为易读的字段类型字符串。
219

被折叠的 条评论
为什么被折叠?



