jetdb 0.1.1

Pure Rust library for reading Microsoft Access (.mdb/.accdb) files
Documentation
  • Coverage
  • 60.48%
    202 out of 334 items documented1 out of 79 items with examples
  • Size
  • Source code size: 410.08 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 19.11 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 25s Average build duration of successful builds.
  • all releases: 25s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • dominion525/jetdb
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • dominion525

jetdb

CI License: MIT OR Apache-2.0 MSRV: 1.82

日本語版 (Japanese)

A Rust library and CLI tool for reading Microsoft Access database files (.mdb / .accdb).

Written in pure Rust with no C/C++ dependencies or FFI, so it works out of the box on macOS, Windows, and Linux. Supports Access 97 (Jet3) through Access 2019 (ACE17).

Installation

CLI Tool

cargo install jetdb-cli

As a Library

[dependencies]
jetdb = "0.1.1"

CLI Usage

# Show the database engine version
jetdb ver database.mdb

# List tables
jetdb tables database.mdb

# Show table schema (columns, indexes, relationships)
jetdb schema database.mdb
jetdb schema database.mdb -T Table1

# Generate DDL (SQLite / PostgreSQL / MySQL / Access)
jetdb schema database.mdb --ddl sqlite

# Export table data as CSV
jetdb export database.mdb Table1

# List saved queries / show SQL
jetdb queries list database.mdb
jetdb queries show database.mdb SelectQuery

# List VBA modules / show source code
jetdb vba list database.mdb
jetdb vba show database.mdb Module1

# Show object properties
jetdb prop database.mdb Table1

See docs/cli.md for detailed options and output examples.

Library Usage

use jetdb::{PageReader, read_catalog, read_table_def, read_table_rows};

fn main() -> Result<(), jetdb::FileError> {
    let mut reader = PageReader::open("database.mdb")?;

    // List tables
    let catalog = read_catalog(&mut reader)?;
    for entry in &catalog {
        println!("{}", entry.name);
    }

    // Read table definition
    let entry = &catalog[0];
    let table_def = read_table_def(&mut reader, &entry.name, entry.table_page)?;

    // Read row data
    let result = read_table_rows(&mut reader, &table_def)?;
    for row in &result.rows {
        println!("{:?}", row);
    }

    Ok(())
}

For detailed API documentation and more examples, run cargo doc --open or see docs.rs/jetdb (available after crates.io publication).

Supported Versions

Engine Access Version File Format
Jet3 Access 97 .mdb
Jet4 Access 2000/2003 .mdb
ACE12 Access 2007 .accdb
ACE14 Access 2010 .accdb
ACE15 Access 2013 .accdb
ACE16 Access 2016 .accdb
ACE17 Access 2019 .accdb

Features

  • Read table metadata (columns, indexes, relationships)
  • Read row data with Rust type mapping (Text, Long, Double, Timestamp, Money, Memo, OLE, GUID, etc.)
  • Generate DDL for SQLite, PostgreSQL, MySQL, and Access SQL
  • Recover SQL from saved queries
  • Extract VBA module source code
  • Read object properties (LvProp)
  • Decrypt RC4-encrypted databases
  • Handle Jet3 (Latin-1) and Jet4+ (UTF-16LE, compressed text) encodings

Limitations

  • Read-only (no write support)
  • No index-based lookups (full table scan only)
  • Loads all rows into memory; be mindful of memory usage with very large tables
  • Password-protected databases are not supported
  • Replication databases (.mda) are untested
  • Multi-page overflow rows (LOOKUP_FLAG) are skipped; some large memo/OLE fields may be missing

Acknowledgments

  • mdbtoolsHACKING.md was an invaluable reference for understanding the MDB/ACCDB file format
  • Jackcess (Apache License 2.0) — most test .mdb/.accdb files are sourced from this project (some were created independently)

License

MIT OR Apache-2.0