将 Node odbc 与 Microsoft Access 结合使用

Using Node odbc with Microsoft Access

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

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

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

我正在努力使任何数量的 odbc 功能正常工作,所以我认为问题是我没有正确配置环境。这是我定义容器环境的基本 Dockerfile。 运行 AccessDatabaseEngine.exe 文件 returns 一个未找到错误,即使我很确定文件 应该 存在于那里。现在,我已经注释掉了这一行。应用程序代码 运行 来自不同的 Dockerfile 集,构建于此。

# 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% 确定它是否是要尝试安装的正确文件。我 运行 进入 thisthat 似乎它可能是我需要的 odbc 驱动程序。但是,我尝试 docker 将他们提供的代码和 运行 转化为更多问题。

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

正如评论中所说。我在这里抓住了错误的稻草。我无法将访问驱动程序下载到我的 Linux 机器上。根据驱动程序系统要求 here,我必须使用 Windows OS。