You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中使用ADODB获取MS Access数据库的所有列

在MS Access中通过ADODB获取表的所有列

你之前用的INFORMATION_SCHEMA.COLUMNS是SQL Server这类数据库的标准系统视图,但MS Access不支持这个。不过用ADODB有两种可靠的方式实现相同需求:

1. 用ADODB的OpenSchema方法(推荐)

这是ADO的标准接口,不需要依赖Access特定的系统表,兼容性更好,也不用处理权限问题。

下面是VBA里的示例代码:

Sub GetAccessTableColumns()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim targetTable As String
    
    targetTable = "你的表名" ' 替换成你要查的表名
    
    ' 建立数据库连接
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\你的数据库路径\数据库名.accdb;"
    
    ' 调用OpenSchema获取指定表的列信息
    ' adColumns是Schema类型常量,筛选数组顺序是:目录、架构、表名、列名
    Set rs = conn.OpenSchema(adColumns, Array(Empty, Empty, targetTable))
    
    ' 遍历结果输出列名
    Do While Not rs.EOF
        Debug.Print rs("COLUMN_NAME").Value ' 也可以把值存到变量或列表里
        rs.MoveNext
    Loop
    
    ' 清理资源
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

如果是其他支持ADODB的语言(比如VB6),逻辑完全一样,只是语法细节可能略有不同。

2. 查询Access的系统表

Access自带MSysColumns(存列信息)和MSysObjects(存对象信息)两个系统表,关联它们就能查到列名,但默认普通用户没有这两个表的访问权限,需要先授权。

SQL查询语句如下:

SELECT MSysColumns.Name AS COLUMN_NAME
FROM MSysColumns
INNER JOIN MSysObjects ON MSysColumns.ObjectId = MSysObjects.Id
WHERE MSysObjects.Name = '你的表名'
  AND MSysObjects.Type = 1 ' Type=1代表用户表
  AND MSysColumns.Name NOT LIKE 'MSys%' ' 排除系统自带的列

用ADODB执行这个SQL的示例:

Sub GetColumnsFromSystemTables()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim targetTable As String
    Dim sqlStr As String
    
    targetTable = "你的表名"
    
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\你的数据库路径\数据库名.accdb;"
    
    ' 注意转义表名里的单引号,避免SQL注入
    sqlStr = "SELECT MSysColumns.Name AS COLUMN_NAME " & _
             "FROM MSysColumns INNER JOIN MSysObjects ON MSysColumns.ObjectId = MSysObjects.Id " & _
             "WHERE MSysObjects.Name = '" & Replace(targetTable, "'", "''") & "' " & _
             "AND MSysObjects.Type = 1 AND MSysColumns.Name NOT LIKE 'MSys%'"
    
    Set rs = conn.Execute(sqlStr)
    
    Do While Not rs.EOF
        Debug.Print rs("COLUMN_NAME").Value
        rs.MoveNext
    Loop
    
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

如果运行时提示权限错误,需要打开Access数据库,依次操作:文件>选项>信任中心>信任中心设置>宏设置,勾选启用所有宏;然后通过工具>安全>用户与组权限给当前用户赋予MSysColumns和MSysObjects的读取权限。

内容的提问来源于stack exchange,提问作者Mohammed Saber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:27:29