عن المشروع
jetdb هي مكتبة Rust نقية وأداة سطر أوامر لقراءة ملفات قواعد بيانات Microsoft Access (.mdb و.accdb). لا تحتوي على تبعيات C/C++ أو FFI، مما يجعلها محمولة عبر macOS وWindows وLinux وحتى WebAssembly (بما في ذلك أهداف المتصفح). وهي تدعم Access 97 (Jet3) حتى Access 2019 (ACE17).
## التثبيت
- **أداة سطر الأوامر**: `cargo install jetdb-cli`
- **المكتبة**: أضف `jetdb = "0.2"` إلى ملف Cargo.toml الخاص بك.
## أمثلة استخدام سطر الأوامر
- `jetdb --password secret tables protected.accdb` – فتح ملف محمي بكلمة مرور
- `jetdb ver database.mdb` – عرض إصدار محرك قاعدة البيانات
- `jetdb tables database.mdb` – سرد الجداول
- `jetdb schema database.mdb` – عرض مخطط الجدول (الأعمدة، الفهارس، العلاقات)
- `jetdb schema database.mdb --ddl sqlite` – توليد DDL لـ SQLite أو PostgreSQL أو MySQL أو Access
- `jetdb export database.mdb Table1` – تصدير بيانات الجدول بصيغة CSV
- `jetdb queries list database.mdb` – سرد الاستعلامات المحفوظة
- `jetdb queries show database.mdb SelectQuery` – عرض SQL لاستعلام محفوظ
- `jetdb vba list database.mdb` – سرد وحدات VBA
- `jetdb vba show database.mdb Module1` – عرض كود VBA المصدري
- `jetdb macro list database.accdb` – سرد وحدات الماكرو المسماة
- `jetdb macro show database.accdb AutoExec` – عرض وحدة ماكرو كنص
- `jetdb prop database.mdb Table1` – عرض خصائص الكائن
## استخدام المكتبة
```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(())
}
```
## الإصدارات المدعومة
| المحرك | إصدار Access | تنسيق الملف |
|--------|---------------|-------------|
| 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 |
## الميزات
- قراءة البيانات الوصفية للجدول (الأعمدة، الفهارس، العلاقات)
- قراءة بيانات الصفوف مع تعيين أنواع Rust (Text، Long، Double، Timestamp، Money، Memo، OLE، GUID، إلخ)
- توليد DDL لـ SQLite وPostgreSQL وMySQL وAccess SQL
- استعادة SQL من الاستعلامات المحفوظة
- استخراج الكود المصدري لوحدات VBA
- قراءة خصائص الكائن (LvProp)
- فك تشفير قواعد البيانات المشفرة بـ RC4 وملفات .accdb المحمية بكلمة مرور (Agile، RC4 CryptoAPI، Standard/NonStandard AES)
- التعامل مع ترميزات Jet3 (Latin-1) وJet4+ (UTF-16LE، نص مضغوط)
- العمل على WebAssembly، بما في ذلك هدف المتصفح (`wasm32-unknown-unknown`)، عن طريق فتح قاعدة بيانات من البايتات في الذاكرة باستخدام `PageReader::open_reader`
## القيود
- للقراءة فقط (لا يوجد دعم للكتابة)
- لا توجد عمليات بحث قائمة على الفهارس (مسح كامل للجدول فقط)
- يتم تحميل جميع الصفوف في الذاكرة؛ كن حذراً من استهلاك الذاكرة مع الجداول الكبيرة جداً
- تتطلب ملفات .accdb المحمية بكلمة مرور استخدام `PageReader::open_with_password` (Agile، RC4 CryptoAPI، Standard/NonStandard AES)
- قواعد بيانات النسخ المتماثل (.mda) غير مختبرة
## تكامل وكلاء الذكاء الاصطناعي
متاحة كمهارة Claude Code عبر مستودع [agent-skills](https://github.com/dominion525/agent-skills). التثبيت عبر Claude Code Plugin Marketplace:
```
/plugin marketplace add dominion525/agent-skills
/plugin install jetdb-cli@dominion525-skills
```
أو عبر Vercel skills CLI:
```bash
npx skills add dominion525/agent-skills --skill jetdb-cli -a claude-code
```
## شكر وتقدير
- [mdbtools](https://github.com/mdbtools/mdbtools) – كان HACKING.md مرجعاً قيماً لفهم تنسيق ملف MDB/ACCDB
- [Jackcess](https://github.com/spannm/jackcess) (Apache License 2.0) – معظم ملفات الاختبار .mdb/.accdb مصدرها هذا المشروع
- [jackcessencrypt](https://github.com/jahlborn/jackcessencrypt) (Apache License 2.0) – ملفات الاختبار المتعلقة بالتشفير
- [MS-OFFCRYPTO](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-offcrypto/) – مواصفات Microsoft لتشفير مستندات Office
## الترخيص
MIT OR Apache-2.0
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.