Sobre o projeto

jetdb é uma biblioteca e ferramenta de linha de comando em Rust puro para ler arquivos de banco de dados do Microsoft Access (.mdb e .accdb). Não possui dependências C/C++ ou FFI, tornando-o portátil entre macOS, Windows, Linux e até WebAssembly (incluindo alvos de navegador). Suporta Access 97 (Jet3) até Access 2019 (ACE17). ## Instalação - **Ferramenta CLI**: `cargo install jetdb-cli` - **Biblioteca**: Adicione `jetdb = "0.2"` ao seu Cargo.toml. ## Exemplos de Uso da CLI - `jetdb --password secret tables protected.accdb` – abrir um arquivo protegido por senha - `jetdb ver database.mdb` – mostrar a versão do mecanismo do banco de dados - `jetdb tables database.mdb` – listar tabelas - `jetdb schema database.mdb` – mostrar esquema de tabelas (colunas, índices, relacionamentos) - `jetdb schema database.mdb --ddl sqlite` – gerar DDL para SQLite, PostgreSQL, MySQL ou Access - `jetdb export database.mdb Table1` – exportar dados de tabela como CSV - `jetdb queries list database.mdb` – listar consultas salvas - `jetdb queries show database.mdb SelectQuery` – mostrar SQL de uma consulta salva - `jetdb vba list database.mdb` – listar módulos VBA - `jetdb vba show database.mdb Module1` – mostrar código-fonte VBA - `jetdb macro list database.accdb` – listar macros nomeadas - `jetdb macro show database.accdb AutoExec` – mostrar uma macro como texto - `jetdb prop database.mdb Table1` – mostrar propriedades de objeto ## Uso da Biblioteca ```rust use jetdb::{PageReader, read_catalog, read_table_def, read_table_rows}; fn main() -> Result<(), jetdb::FileError> { let mut reader = PageReader::open("database.mdb")?; let catalog = read_catalog(&mut reader)?; for entry in &catalog { println!("{}", entry.name); } let entry = &catalog[0]; let table_def = read_table_def(&mut reader, &entry.name, entry.table_page)?; let result = read_table_rows(&mut reader, &table_def)?; for row in &result.rows { println!("{:?}", row); } Ok(()) } ``` ## Versões Suportadas | Mecanismo | Versão do Access | Formato de Arquivo | |--------|---------------|-------------| | 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 | ## Recursos - Ler metadados de tabelas (colunas, índices, relacionamentos) - Ler dados de linhas com mapeamento de tipos Rust (Text, Long, Double, Timestamp, Money, Memo, OLE, GUID, etc.) - Gerar DDL para SQLite, PostgreSQL, MySQL e SQL do Access - Recuperar SQL de consultas salvas - Extrair código-fonte de módulos VBA - Ler propriedades de objeto (LvProp) - Descriptografar bancos de dados criptografados com RC4 e arquivos .accdb protegidos por senha (Agile, RC4 CryptoAPI, AES Padrão/Não Padrão) - Lidar com codificações Jet3 (Latin-1) e Jet4+ (UTF-16LE, texto compactado) - Executar em WebAssembly, incluindo o alvo de navegador (`wasm32-unknown-unknown`), abrindo um banco de dados a partir de bytes na memória com `PageReader::open_reader` ## Limitações - Somente leitura (sem suporte a escrita) - Sem buscas baseadas em índice (apenas varredura completa de tabela) - Carrega todas as linhas na memória; esteja ciente do uso de memória com tabelas muito grandes - Arquivos .accdb protegidos por senha exigem `PageReader::open_with_password` (Agile, RC4 CryptoAPI, AES Padrão/Não Padrão) - Bancos de dados de replicação (.mda) não testados ## Integração com Agentes de IA Disponível como uma Skill do Claude Code via repositório [agent-skills](https://github.com/dominion525/agent-skills). Instale via Mercado de Plugins do Claude Code: ``` /plugin marketplace add dominion525/agent-skills /plugin install jetdb-cli@dominion525-skills ``` Ou via CLI de skills da Vercel: ```bash npx skills add dominion525/agent-skills --skill jetdb-cli -a claude-code ``` ## Agradecimentos - [mdbtools](https://github.com/mdbtools/mdbtools) – HACKING.md foi uma referência inestimável para entender o formato de arquivo MDB/ACCDB - [Jackcess](https://github.com/spannm/jackcess) (Licença Apache 2.0) – a maioria dos arquivos de teste .mdb/.accdb é proveniente deste projeto - [jackcessencrypt](https://github.com/jahlborn/jackcessencrypt) (Licença Apache 2.0) – arquivos de teste relacionados a criptografia - [MS-OFFCRYPTO](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-offcrypto/) – especificação da Microsoft para criptografia de documentos do Office ## Licença MIT OU Apache-2.0