← All databases

Database · native ODBC

Microsoft Access `.mdb`/`.accdb` into Apache Arrow with ADBC

Microsoft Access `.mdb`/`.accdb`, read and written through adbcBridge — the ADBC driver that loads the database's ODBC driver — read-only on Linux, macOS arm64 and Windows x64. Everything below is the compatibility matrix's record for this row.

Status

Linux✓ read

PASS

macOS arm64✓ read

PASS (mdbtools 1.0.1 from source, one local patch: fakeglib g_strsplit)

Windows x64✓ read

PASS (Microsoft Access Database Engine 2016 x64, Microsoft Access Driver (*.mdb, *.accdb) = ACEODBC.DLL, reports ACCESS (via ODBC) 04.00.0000; the checked-in access.mdb fixture, so the entry's MDB-Tools-shaped workload — read-only, no parameters, no astral check — is what ran; the first real Jet/ACE measurement of this entry)

Driver and connection string

ODBC driver
MDB Tools 1.0 (odbc-mdbtools)
Wire
native ODBC
adbcBridge
0.1.1 (release)

The connection string the matrix used, as the connection strings reference records it (File-based (no server)); {drv} is the driver library or its name from odbcinst.ini, and the host, port and credentials are the test server's.

Driver={drv};DBQ=<path>/access.mdb;

Python

import adbcbridge

# {drv}: the ODBC driver library (path), or its name from odbcinst.ini
conn = adbcbridge.connect(uri="Driver={drv};DBQ=<path>/access.mdb;")
with conn.cursor() as cur:
    cur.execute("SELECT * FROM my_table")
    table = cur.fetch_arrow_table()      # pyarrow.Table

Polars and pandas

import polars as pl, pandas as pd

df = pl.read_database("SELECT * FROM my_table", connection=conn)   # Polars, Arrow-native
pdf = pd.read_sql("SELECT * FROM my_table", conn)                   # pandas 2.2+, ADBC connection

pip install adbcbridge brings the driver library; the Microsoft Access `.mdb`/`.accdb` ODBC driver is installed the way its vendor documents, then named in Driver=. Rust, Go, C# and Java use the same connection string through their ADBC driver managers — see the docs.

What the matrix recorded

the driver executes no DDL/DML and has no SQLBindParameter; 32-bit SQLLEN, as Db2