将节点 odbc 与 Microsoft Access 一起使用

Posted

技术标签:

【中文标题】将节点 odbc 与 Microsoft Access 一起使用【英文标题】:Using Node odbc with Microsoft Access 【发布时间】:2021-06-24 18:30:42 【问题描述】:

我正在尝试编写一个容器化的 Node 应用程序,它接收 Microsoft Access 数据库并访问其中的数据。我想将应用程序放在 docker 容器中,并希望使用 npm odbc 与 Access 进行交互。我没有太多创建容器的经验,所以这是一个学习过程。

我正在努力为 Access 安装和配置 odbc。根据我链接的文档,odbc 有三个要求。

    安装 unixODBC 和 unixODBC-devel 为目标数据库安装 ODBC 驱动程序 定义 odbc.ini 和 odbcinst.ini

我正在努力让任何数量的 odbc 功能正常工作,所以我认为问题是我没有正确配置环境。这是我定义容器环境的基础 Dockerfile。运行 AccessDatabaseEngine.exe 文件会返回 Not Found 错误,即使我很确定文件 应该 存在于那里。现在,我已经注释掉了这条线。应用程序代码从一组不同的 Dockerfiles 运行,这些 Dockerfiles 建立在这个文件之上。

# Use Ubuntu OS as base image
FROM ubuntu:latest

# Set env vars
ENV NPM_CONFIG_LOGLEVEL info

# odbc requirement #1
# Install unixODBC, unixODBC-devel, and curl
RUN apt-get update
RUN apt-get -y install unixodbc
RUN apt-get -y install unixodbc-dev
RUN apt-get -y install curl

# Download & install Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_12.x | bash
RUN apt-get -y install nodejs

# odbc requirement #2
# Install ODBC drivers for Access database
RUN curl -LJO https://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine.exe
RUN cp AccessDatabaseEngine.exe /bin/
RUN chmod +x /bin/AccessDatabaseEngine.exe
# RUN ['/bin/AccessDatabaseEngine.exe'] # Error: #14 0.249 /bin/sh: 1 [/bin/AccessDatabaseEngine.exe]: not found

# Run node
CMD [ "node" ]

在我的应用程序中,我尝试像这样使用 odbc。找到了 odbc 需求 #3 的连接字符串here:

// Test function to test out npm odbc
exports.export = async (file) => 
    // odbc requirement #3
    // Make Access connection
    const conn = await odbc.connect(`Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=$file.path`);

    // Execute test query
    const res = await conn.query('SELECT 1');
    console.log(JSON.stringify(res));

我对 odbc 要求 #1 和 #3 的实现感觉非常好,但我在 #2(为目标数据库安装 ODBC 驱动程序)方面遇到了困难。我不仅在努力运行 AccessDatabaseEngine.exe,而且我也不能 100% 确定它是否是要尝试安装的正确文件。我遇到了this, 似乎它可能是我需要的 odbc 驱动程序。但是,我尝试对他们提供的代码进行 docker 化,但遇到了更多问题。

再次,我想创建一个容器化的 Node 应用程序,它使用 ODBC npm 库来访问 Microsoft Access 数据库中的数据。有没有人有这样做的经验?任何帮助,将不胜感激。提前谢谢。

【问题讨论】:

Eh... 你想在 Linux 上安装一个 exe?祝你好运 @ErikA 不错。现在看来很明显。我认为我没有为 odbc 驱动程序使用正确的文件。我可能会在this 的文档之后发布更新。 呃,那是SQL server的驱动,和Access完全不同的产品。 Linux 上的 Access 没有第一方 ODBC 驱动程序。有一些第三方工具(例如 mdbtools)提供有限的功能,但我不敢打赌它运行良好。如果你想使用 Access,你需要 Windows,否则事情会变得一团糟,所以如果你没有特别好的理由使用 Access,我会尝试另一个数据库系统 @ErikA 你说得对,这不适用于 Access。我在这里抓住了错误的稻草。我拥有的原始 exe 文件是正确的文件。我重新阅读了系统要求,它需要 Windows 操作系统。在Linux上不可能发生,似乎没有办法。使用 Access 是不可协商的。除非有人推荐替代方案,否则我的应用程序似乎必须构建在 Windows 操作系统上,而不是 Linux 上。感谢您的洞察力!我需要一个全新的视角。 【参考方案1】:

正如 cmets 中所说的那样。我在这里抓住了错误的稻草。我无法将 Access Drivers 下载到我的 Linux 机器上。根据驱动系统要求here,我必须使用 Windows 操作系统。

【讨论】:

这是一个来自easysoft 的Linux MS-Access ODBC 驱动程序,但它是商业的。看这里; easysoft.com/products/data_access/odbc-access-driver/… @Alex_M 很高兴知道,但我可能会走向不同的方向。我觉得我会问更远的问题。感谢您的评论。

以上是关于将节点 odbc 与 Microsoft Access 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

RODBC 与 ms-access 错误 07002 17 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确

适用于 Oracle 和 JDBC 的 Microsoft ODBC

使 ODBC 链接访问表对用户可用

[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

Postgresql odbc driver error c# [IM002] [Microsoft][ODBC Driver Manager] Data source name not found

JSP - Microsoft ODBC - Microsoft Access 驱动程序找不到文件“(未知)”