天道酬勤,学无止境

Using a Microsoft access DB .accdb on a linux server with Node.js

So, I got this working on windows easy, and that is not surprising. But I am more concerned about running this on a production linux server.

Is there a way to get the Access Runtime 2013 to work on a linux based system without throwing some weird way of doing it. If not, then I am going to have to rethink my plans.

Just as a code base this is what I am doing:

const ADODB = require('node-adodb');
ADODB.debug = true;
//Bring in LUT Database
const LUTDB = ADODB.open(
  'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database1.accdb;Persist Security Info=False'
);
LUTDB.query('SELECT * FROM Table1')
  .then(data => {
    console.log(data);
  })
  .catch(err => {
    console.log(err);
  });

评论

Nope.

The Access Runtime (as well as the database engine and full application) is only compatible with Windows, and barring Wine stuff/other trickery that's not production-worthy, it plain won't work.

There are third-party ODBC/JDBC drivers for Access out there that do work on Linux, but nothing official from Microsoft.

My recommendation would be: either don't use Access on Linux (best), or try UCanAccess with a JDBC wrapper (not affiliated). Note that the accdb file format has changed a number of times, so you can expect trouble/incompatibilities if you don't use an actively maintained product.

Like @ErikA suggests in his answer, if anyone is using Linux or MacOS, you can use BOTH:

  1. The open source UCanAccess http://ucanaccess.sourceforge.net/site.html
  2. Java library with the JDBC wrappers as package: https://www.npmjs.com/package/jdbc

I'm using MacOS Catalina. You can initialize a project with npm in a new directory:

npm init
npm i --save jdbc
mkdir index.js

Download and copy the 5 UCanAccess jar files:

  • Main jar ucanaccess-5.0.1.jar
  • All 4 jar files in lib directory

They can be put in the same directory too. I created a simple MS Access .accdb file with 1 table: employees (id, name, photo)

And, in index.js file, here is the codes to connect and SELECT to DB (most codes are from JDBC package, with a few modifications marked with // CUSTOM over the modified line):

var JDBC = require('jdbc');
var jinst = require('jdbc/lib/jinst');

if (!jinst.isJvmCreated()) {
  jinst.addOption("-Xrs");

  // CUSTOM
  jinst.setupClasspath([
    './drivers/ucanaccess-5.0.1.jar',
    './drivers/commons-lang3-3.8.1.jar',
    './drivers/commons-logging-1.2.jar',
    './drivers/hsqldb-2.5.0.jar',
    './drivers/jackcess-3.0.1.jar'
  ]);
}

var config = {
  // Required
  // CUSTOM
  url: 'jdbc:ucanaccess:///Users/Keitel/repos/mjsp/badge/badge-test.accdb',

  // Optional
  // CUSTOM
  drivername: 'net.ucanaccess.jdbc.UcanaccessDriver',
  minpoolsize: 10,
  maxpoolsize: 100,

  // Note that if you sepecify the user and password as below, they get
  // converted to properties and submitted to getConnection that way.  That
  // means that if your driver doesn't support the 'user' and 'password'
  // properties this will not work.  You will have to supply the appropriate
  // values in the properties object instead.
  // user: 'SA',
  // CUSTOM
  user: '',
  password: '',
  properties: {}
};

var hsqldb = new JDBC(config);

hsqldb.initialize(function(err) {
  if (err) {
    console.log(err);
    // CUSTOM
    return;
  }

  // CUSTOM
  console.log('successfully initialized');
});


// This assumes initialization as above.
// For series execution.
var asyncjs = require('async');

hsqldb.reserve(function(err, connObj) {
  // The connection returned from the pool is an object with two fields
  // {uuid: <uuid>, conn: <Connection>}
  if (connObj) {
    console.log("Using connection: " + connObj.uuid);
    // Grab the Connection for use.
    var conn = connObj.conn;

    // Adjust some connection options.  See connection.js for a full set of
    // supported methods.
    asyncjs.series([
      function(callback) {
        conn.setAutoCommit(false, function(err) {
          if (err) {
            callback(err);
          } else {
            callback(null);
          }
        });
      },
      // CUSTOM
      // Skip Schema selection with MS Access DB
    ], function(err, results) {
      // Check for errors if need be.
      // results is an array.
      if (err) {
        console.log('autocommit error', err);
      }
    });

    // Query the database.
    asyncjs.series([
      function(callback) {
        // Select statement example.
        conn.createStatement(function(err, statement) {
          if (err) {
            callback(err);
          } else {
            // Adjust some statement options before use.  See statement.js for
            // a full listing of supported options.
            statement.setFetchSize(100, function(err) {
              if (err) {
                callback(err);
              } else {
                // CUSTOM
                statement.executeQuery(
                  'SELECT id, name FROM employees;',
                  function(err, resultset) {
                    if (err) {
                      callback(err)
                    } else {
                      resultset.toObjArray(function(err, results) {
                        console.log('results', results);
                        callback(null, resultset);
                      });
                    }
                  }
                );
              }
            });
          }
        });
      },
    ], function(err, results) {
      // Results can also be processed here.
      // Release the connection back to the pool.
      hsqldb.release(connObj, function(err) {
        if (err) {
          console.log(err.message);
        }
      });
    });
  }
});

The results came out in terminal as:

results [
  { ID: 1, name: 'Keitel Jovin' },
  { ID: 2, name: 'Jetro Joseph' },
  { ID: 3, name: 'Bertha Bazile' }
]

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • PDO:如何在 Linux 上访问 Microsoft Access 文件?(PDO: How to access Microsoft Access file on Linux?)
    问题 我已设法使用 PDO 在 Windows 上读取 Microsoft Access 文件 (.accdb) 的数据,但在 Linux (CentOS) 上工作时遇到问题。 我可以看到模块已安装: [root@rapid host]# php -m | grep PDO PDO PDO_ODBC [root@rapid host]# php -m | grep odbc odbc 代码: <?php try{ $dbhAccess = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=/root/access/data.accdb;Uid=Admin"); } catch(PDOException $e){ echo $e->getMessage(); exit(); } 执行 (CLI) PHP 文件时出现错误: [root@rapid host]# php access.php SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified 回答1 您应该安装 MDB 驱动程序。 我现在无法尝试,但我认为 MDB
  • Access 2013-无法打开使用先前版本的应用程序创建的数据库(Access 2013 - Cannot open a database created with a previous version of your application)
    问题 我有一个Access数据库已创建了10多年了。 我的数据非常重要,我认为可以在Access 2007或更早版本中打开它。 当前,我的桌面上有Access 2013,使用此版本打开文件会导致错误“无法打开使用您的应用程序的先前版本创建的数据库” 这个问题有什么解决方案? 在哪里可以下载早期版本的MS Access? 回答1 我刚刚使用Excel 2016打开Access 2003表。 打开一个新的工作表转到数据标签点击“来自访问权限”菜单项选择数据库的.mdb文件在打开的“数据链接属性”框中,切换到“提供程序”选项卡选择“ Microsoft Jet 4.0 OLE DB提供程序” 点击下一步重新选择数据库的.mdb文件(更改Provider时会忘记该文件) 点击确定在出现的“选择表”对话框中,选择要导入的表。 回答2 如另一个答案中所述,Microsoft的正式用语是在Access 2003中打开Access 97文件并将其升级为更新的文件格式。 不幸的是,从现在开始,许多人将很难获得Access 2003的合法副本(或Access 2013之前的任何其他版本,或者碰巧是最新版本)。 在这种情况下,可能的解决方法是 安装32位版本的SQL Server Express Edition,然后使SQL Server导入实用程序使用Jet * ODBC将表导入到SQL
  • 到 Ubuntu 上 MS-Access 的 ODBC 连接(ODBC connection to MS-Access on Ubuntu)
    问题 我们的一名员工创建了 Microsoft Access 数据库并构建了 Joomla! 围绕它的模块。 它当前运行在 WAMP 服务器上,通过 ODBC 连接到 accdb 文件。 如何在 Ubuntu 上为 Access 数据库创建 ODBC 连接? 在这一点上,我愿意让数据库在我的 Ubuntu 服务器上本地运行,或者在某个地方的 SMB 共享上。 已经有人提议将其从 Access 移至 MySql。 这可能归结为这一点,但我真的被迫寻找另一种选择。 有谁知道这是否可行以及如何实现? 如果这个问题已经被问到,我很抱歉; 我确实已经在寻找它,但找不到任何特定于在 Linux 上通过 ODBC 连接 Access 的内容。 回答1 我不完全确定我理解这里的用例,但这里有一些想法: Access 数据库是基于文件的数据库,因此不需要服务器。 这意味着数据库文件本身可以驻留在本地 Windows 机器、Windows 网络共享或 linux 机器上的 SMB 共享上。 但是,查询数据库的应用程序必须有权访问操作数据库所需的驱动程序。 在 Windows 上,这不是问题:所有 Windows 版本都预装了旧.mdb格式的 Jet 驱动程序。 对于新的.accdb格式,您必须安装 MSOffice 2007/2010/2013、Access 2007/2010/2013、Access
  • 如何在64位窗口中将R与Access数据库连接?(How to connect R with Access database in 64-bit Window?)
    问题 当我尝试将R与Access数据库连接时出现错误 odbcConnectAccess is only usable with 32-bit Windows 有谁知道如何解决这个问题? library(RODBC) mdbConnect<-odbcConnectAccess("D:/SampleDB1/sampleDB1.mdb") 回答1 请改用odbcDriverConnect 。 如果安装了64位R,则可能必须使用32位R版本。 odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:/SampleDB1/sampleDB1.mdb") 回答2 这是一个单一功能,无需保存任何文件即可将数据从32位访问传输到64位R。 该函数将构建一个表达式字符串,该字符串将传递到第二个32位会话。 然后,使用套接字服务器包(svSocket)将数据返回到原始会话。 要注意的一件事是套接字服务器将访问数据保存在全局环境中,因此第二个参数用于定义输出,而不是使用“ <-”保存输出。 access_query_32 <- function(db_table = "qryData_RM", table_out = "data_access") { library(svSocket) # variables
  • LINUX通过python连接ACCESS(.mdb和.accdb文件)数据库
    前言 因为ACCESS主要还是微软的那一套,所以WIN平台的连接方式不再赘述,网上方案很多。 LINUX上的连接,主要还是分为ODBC和JDBC ODBC方案 包安装 linux需安装的包:mdbtools, unixODBC, libmdbodbc python需安装的包:pyodbc或pypyodbc 配置 配置/etc/odbcinst.ini [MDBToolsODBC] Description = MDB Tools ODBC Driver = /usr/lib/libmdbodbc.so.0 Setup = FileUsage = CPTimeout = CPReuse = 配置/etc/odbc.ini 或者 ~/.odbc.ini [mytest] Description = Microsoft Access Try DB Driver = MDBToolsODBC Database = /path/mytest.mdb Servername = localhost Username = Password = port = 5432 DEMO代码 import pyodbc conn = pyodbc.connect('DSN=mytest'); cur = conn.cursor() cur.execute('select * from test') cur
  • 如何通过 .NET 链接外部 Access 表?(How can I link an external Access table via .NET?)
    问题 我的解决方案中有两个文件位于App_Data文件夹中。 这两个文件都是.accdb文件,一个是表文件,即核心文件。 我有另一个文件,其中包含存储的查询和一些不再需要的 VBA 元素,但我需要存储的查询。 此解决方案位于网络驱动器上,并且保存查询的文件和保存表的文件是链接的。 当我创建安装项目并安装应用程序时,我只需要包含查询的文件。 问题是该文件链接回表文件的原始位置。 我需要它来请求包含表的文件的位置,因为这将安装在另一台机器上,其中包含该表的.accdb文件可以在任何地方。 有没有办法让OpenFileDialog出现要求他们指向它的位置? 我目前有一个 N 层应用程序,其中包含一个DAL ,它获取存储在My.Settings的连接字符串。 字符串是"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\App_Data\FPC_Reporting.accdb" ,这是包含存储查询的安装文件。 尽管如此,该文件仍然认为包含表的文件仍然指向我的网络位置,但如前所述,它可能在任何地方,所以我想让它询问用户; 安装后,关于包含表的本地文件所在的位置。 安装应用程序后以及断开网络驱动器后收到的错误是“N:\PROJECTS\FPC Reporting Tool\FPCReportBuilder
  • 如何通过 .NET 代码压缩和修复 ACCESS 2007 数据库?(How do I compact and repair an ACCESS 2007 database by .NET code?)
    问题 我需要压缩和修复 Access 2007 .accdb 数据库文件。 我知道 JRO.JetEngine 可以使用 .mdb 文件执行此操作,但我需要通过代码修复较新版本的 2007 格式。 有什么建议么? 编辑: 事情是这样的:我发现我可以使用 COM 对象库“Microsoft Office 12 Access 数据库引擎对象库”并使用 DBEngine 类并调用其 CompactDatabse 方法。 但是好像没有地方让我提供数据库密码; 似乎 Office 12 数据库引擎在任何地方都没有任何文档。 我找到了一些关于旧版本 CompactDatabase 方法的文档,但这些文档根本没有帮助我。 这真让我抓狂。 回答1 似乎 Office 12 数据库引擎在任何地方都没有任何文档。 不完全正确。 可用信息有限。 在 MSDN 上,请参阅: Access 2007 开发人员参考 Microsoft Jet Replication Objects (JRO) Reference 有一个分支,因此 JRO(包含 ADO 经典的库之一)仍然受到 ACE 的官方支持(并且 AFAIK 仍然有效),例如 accdb 格式。 CompactDatabase 方法采用两个参数,这两个参数都是 OLE DB 连接字符串。 因此,提供数据库密码应该与常规连接没有什么不同
  • 通过 DBI 从 Access 连接到 R(Connection from Access to R via DBI)
    问题 我希望在我的笔记本电脑上的 Access 数据库中分析 R 中的数据(使用 dplyr)。 (我第一次尝试在 R 中建立数据库连接。) 查看 tidyverse 站点,对于 dplyr 处理 Access 数据,似乎连接必须通过 DBI 包(而不是 RODBC)。 我正在为 dbConnect 的语法苦苦挣扎。 我的 RODBC 代码是 base1<-odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=[filepath]/AdventureWorks DW 2012.accdb") 我对 DBI 的(失败)尝试是 DB <- dbConnect(drv=Microsoft Access Driver (*.mdb, *.accdb)), host=[filepath]/AdventureWorks DW 2012.accdb) 我究竟做错了什么? (我正在使用 Windows 10 - 一切都是 64 位。) 回答1 我最近需要将 RODBC 定义的数据库连接转换为等效的 DBI 连接。 这是原始的 RODBC 函数: connect_to_access_rodbc <- function(db_file_path) { require(RODBC) # make sure
  • ODBC 从 R 连接到网络驱动器上的 Access DB .accdb 文件(ODBC connect from R to Access DB .accdb file on Network Drive)
    问题 我在网络驱动器上有一个 .accdb Access DB 文件,该文件已映射到本地计算机上的 Z:/ 驱动器。 你能把 ODBC 连接到这个吗? 这是创建 ODBC 的代码( usrAccessPath是包含文件路径的字符串变量): connAccessDB <- odbcDriverConnect(paste0("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=",usrAccessDBPath)) 此文件路径有效: C:/Users/boswelpa/Desktop/Projects/Absenteeism/Absenteeism Data.accdb 但是这个文件路径(映射的网络驱动器)不起作用: Z:/SSG Reporting Team/For Thomas/Absenteeism Data.accdb 相同的代码,只是不同的文件路径。 回答1 如前所述,ODBC 对 MS Access 数据库(如 R 与 RODBC 的调用)接受本地硬盘或网络路径(即,通用命名约定 (UNC)),前提是它们遵循 Windows 文件名规则。 当然,一定要通过将字符加倍来避免 R 中的反斜杠: 因此,以下远程路径应该可以工作: accDB = "\\\\Path\\To\\Network\\Drive\\Access\
  • Oppposite Workings of OLEDB/ODBC between Python and MS Access VBA
    Fellow more advanced programmers: Please forgive me if this seems like the tired Python 32-bit/64-bit ODBC/OLEDB Windows issue but I tried searching the forums and can't quite find the reason to my issue. Basically, I tried to connect a very simple Python script first via ODBC using the pypyodbc module, and then second via OLEDB using the adodbapi module, both attempts to an MS Access 2010 .accdb database. However, for OLEDB I consistently get the 'Provider not found. It may not be properly installed' error. And for ODBC I consistently receive the 'Data source name not found and no default
  • 连接到受保护的访问 accdb 文件抛出“错误的密码”(Connection to protected access accdb file throws "Wrong Password")
    问题 我正在尝试连接到加密访问 2013 accdb 文件,该文件通过 excel 文件中的 adodb vba 过程使用旧加密。 该过程在 cn.open 失败,我使用的是 office 64 位,错误消息:“它不是有效的密码”。 这个问题的特殊性是,密码正确,我可以通过微软查询连接到Access DB就好了,我可以用下面的代码连接另一个访问DB。 但是当我尝试在 Excel 上使用它时,会出现此错误,请注意,我在 access 和 excel vba 编辑器上启用了相同的引用。 我的问题是,如何通过 excel 从这个受密码保护的访问文件中提取数据,在我输入密码后,我尝试的每一种方法都失败了。 VBA程序 Sub LDBViewer2010() 'Reference Microsoft ActiveX Data Objects for this code to work Dim cn As New ADODB.Connection Dim Rs As New ADODB.Recordset Const conDatabase As String = "E:\1.accdb" ' Open connection to Access backend cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" &
  • Connecting to MS Access 2007 (.accdb) database using pyodbc
    I am on Win7 x64, using Python 2.7.1 x64. I am porting an application I created in VC++ to Python for educational purpouses. The original application has no problem connecting to the MS Access 2007 format DB file by using the following connection string: OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb"); Now, when I try to connect to the same DB file (put in C:\ this time) in Python using pyodbc and the following conenction string: conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft
  • 如何压缩 MS Access 数据库(How to compress an MS Access database)
    问题 我有一个 70MB 的.mdb文件。 删除文件中包含的所有记录后,大小仍为 70MB。 如何使我的.mdb文件更小? 回答1 曾经存在的每个数据库引擎都需要对其运行定期维护操作,以优化数据存储并恢复空闲空间。 例如,在 xBase 时代,您运行了 PACK 命令来删除已删除的行。 在 SQL Server 上,出于同样的原因,您可以运行脚本来缩小实际数据文件。 为什么每个数据库引擎都这样做? 因为如果每次写入数据库都必须以优化的顺序重写整个文件,那将是一个巨大的性能损失。 考虑一个将每个数据表存储在单独文件中的数据库。 如果一个表有 10000 条记录,而你删除了第 5000 条记录,为了摆脱空闲空间,你必须重写整个数据文件的后半部分。 相反,每个数据库都使用某种形式将已使用的空间标记为未使用和可丢弃,以便下次对数据表运行优化操作时。 在这方面,Jet/ACE 与任何其他数据库引擎没有什么不同,任何使用 Jet/ACE 数据库作为数据存储的应用程序都应该安排定期维护操作,包括备份和压缩。 在 Jet/ACE 中存在一些与服务器数据库引擎不存在的问题。 具体来说,除非所有用户都关闭了与数据文件的连接,否则您无法压缩。 在服务器数据库中,用户连接到数据库引擎的服务器端进程,服务器端恶魔是存储数据的实际数据文件的唯一“用户”。 因此,服务器恶魔可以决定何时执行优化和维护例程
  • 前端访问替代依赖于 ODBC 连接?(Front-end Access alternative relying on ODBC connection?)
    问题 我的任务是使用依赖于 ODBC 连接的 Access 2007 应用程序,并与具有相同 ODBC 连接的其他机构共享它。 如果我没有很好地传达这一点,请原谅我。 我不是开发人员,但自从我完成这个项目以来,我就一直负责这个项目。 我敢肯定这是以前从未发生过的... 首先,我将给出我们结构的布局: 我为一所大学工作,该大学通过 ODBC 与其他 31 所学校共享一个数据库。 为所有校园维护数据库的系统办公室只允许我们通过通用接入点服务器(CAP)的 VPN 访问只读数据,然后通过 ODBC 连接 CAP 服务器(唯一可以链接到 ODBC 的位置)具有 Microsoft Office,但无法访问 Internet。 每个校园都有一个唯一的 ODBC 连接,当将 accdb 放置在其 CAP 服务器上时,该连接需要重新链接表。 每次启动 Access 时,用户还必须登录到 ODBC 连接。 CAP 服务器可以在网络驱动器上读写,但反之则不行。 我们可以放心地假设 CAP 服务器上不能安装其他软件,但可以放置文件(这就是我们可以分发 accdb 文件的原因) Access 应用程序从 ODBC 中提取学生课程活动,并应用逻辑来确定学生是否/何时停止参加所有课程。 此时,此逻辑是与宏相关联的一系列查询。 然后数据库生成学生的报告(包含来自 ODBC 的更多信息)。 一个主动跟踪过程到位
  • Connection to protected access accdb file throws "Wrong Password"
    I am trying to connect to an encrypted access 2013 accdb file which is using legacy encryption through an adodb vba procedure within an excel file. The Procedure fails at cn.open, I am using office 64 bits, error message: "It is not a valid Password". The particularity of this problem is, the password is correct, I can connect to the Access DB through Microsoft query just fine, and I can connect with another access DB with the code below. But when I try to use it on Excel, this error jumps in, take note, I have enabled the same references on both access and excel vba editor. My question is
  • JDBC驱动程序MS Access连接(JDBC driver MS Access connection)
    问题 我想用Java GUI程序连接我的MS访问文件,但是连接有问题...。 我有Windows 7 64b和ms office2007。当我在控制面板中打开ODBC驱动程序管理器时,我没有找到任何用于Microsoft Access的驱动程序(也许当我启动ODBC时开始运行64位ODBC,现在我认为正在运行32位ODBC。我读到它,然后写成:“用于窗口7 64位计算机的jdbc-odbc连接。。1。右键单击数据源(ODBC).. go,以更改以下内容 目标[%SystemRoot%\ SysWOW64 \ odbcad32.exe]开始于:[%SystemRoot%\ System32] 按Enter并继续作为管理源:源链接“)现在,当我在控制面板中启动ODBC时,我可以看到驱动程序截屏 我的程序代码(我尝试了两种方法,但是有相同的错误): public void Connect() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // String DatabaseFile = "D:java/Invertory.mdb"; // String DATABASE = // "jdbc:odbc:Driver=" // + "{Microsoft Access Driver (*.mdb, *.accdb)};" //
  • PHP:调试与Access数据库(.accdb)的PDO连接(PHP: Debugging PDO connection to Access database (.accdb))
    问题 我是编程新手,想使用PDO类连接到ms-access(accdb)数据库。 环境:PHP(5.5.11)/ XAMPP / Windows 7 pro。 启用了用于ODBC(win32)的PDO驱动程序。 class db{ protected $dbName = "C:\xampp\htdocs\BillboardsManagement\Core\config\Billboards.accdb"; protected $Uid=""; protected $Upass=""; protected $conn; public function __construct() { try{ $this -> conn = new PDO('odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=$this->$dbName;Uid=$this->$Uid;Pwd=$this->$Upass'); } catch (Exception $e) { echo "\n $e-> getMessage()\n"; } } } 当我尝试实例化该类时,出现以下错误: 消息为'SQLSTATE [IM002] SQLDriverConnect的异常'PDOException':0 [Microsoft] [ODBC驱动程序管理器
  • 在非Windows平台(Linux或Mac)上使用Python使用Access数据库(Working with an Access database in Python on non-Windows platform (Linux or Mac))
    问题 我想访问Microsoft Access数据库中的数据。 我有一些.accdb和.mdb文件,想用Python读取它们。 根据我的研究,pyodbc只能在Windows平台上使用,但是我在Mac OS X上工作。我是Python的新手。 另一个选择是,如果我可以将数据从数据库导出到csv,然后在python中使用。 任何帮助或开始将不胜感激。 回答1 “根据我的研究,pyodbc只能在Windows平台上使用” 不对。 pyodbc主页上说 Windows和macOS上的大多数Python版本都提供了预编译的二进制轮子。 在其他操作系统上[pip install pyodbc]将从源代码构建。 但是,可以肯定的是,使用ODBC来操作Access数据库主要是在Windows上完成的。 人们经常提到“ MDB工具”以及“ unixODBC”是在非Windows平台上使用Access数据库的一种方法,但是根据我有限的经验,我发现它实际上并不能很好地工作(当它可以工作时)完全没有)。 当然,您始终可以为非Windows平台购买第三方MS Access ODBC驱动程序,但是如果您想要免费的开源解决方案,则可以使用UCanAccess JDBC驱动程序。 有两种方法可以实现此目的:JayDeBeApi和Jython。 在这两种情况下,您都需要下载最新版本的UCanAccess
  • 无法使用 pyodbc 连接到 Access DB(Cannot connect to Access DB using pyodbc)
    问题 几天来我一直在反对这个。 我正在尝试使用 pyodbc 连接到 Microsoft Access DB,但似乎无法正确获取连接字符串或其他内容。 这是我正在使用的: cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Path\to\file.accdb') 我不断收到错误: Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)') 即使当我运行dataSources()我看到: {'MS Access Database': 'Microsoft Access Driver (*.mdb, *.accdb)', 'dBASE Files': 'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)', 'Excel Files': 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)'} 有什么我在这里严重失踪的吗? 回答1 这是一个
  • 在连接字符串中为C#中的Access DB使用相对路径(Using a relative path in connection string for Access DB in C#)
    问题 我正在尝试在我的web.config文件中获取此行,以使用相对路径而不是硬编码的路径,但是似乎没有任何效果。 我只能找到SQL和mySQL数据库的内容 <connectionStrings> <add name="dbConnection" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Mike\Desktop\GeauxEat NEW\GeauxEat\App_Data\GeauxEatAccessDB.accdb"/> </connectionStrings> 我试着做 <add name="dbConnection" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|Data Directory|\GeauxEatAccessDB.accdb"/> 但是它会在此文件夹中查找不存在的内容。 "C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\DevServer\\10.0" 有什么办法让它相对吗? 它位于项目文件的AppData文件夹中 回答1 我环顾四周,使其正常工作。 我将此行插入Global