Покрокова інструкція для одноразової синхронізації даних із MySQL (джерело) до MS Access (ціль), з урахуванням наданих описів таблиць і зв’язків.
---
Мета — витягнути дані з таблиць MySQL, трансформувати їх у відповідності до структури Access, і вставити в Access у правильному порядку, зберігаючи зв’язки між таблицями.
---
## ????️ Відповідність таблиць
| MySQL | MS Access | Коментар |
|------------------------------|-------------------------|----------|
| virtuemart_order_userinfos | qdfMain (Клієнти) | Інформація про замовника |
| virtuemart_orders | qdfInvoices (Рахунки) | Інформація про замовлення |
| virtuemart_order_items | tblInvoicesProducts | Продукти в замовленні |
| virtuemart_products | tblProducts | Список продуктів |
---
## ???? Послідовність синхронізації
1. **Крок 1: Клієнти (`qdfMain`)**
З таблиці `virtuemart_order_userinfos` — вставити нових клієнтів у `qdfMain`.
Важливо зберегти відповідність `virtuemart_order_userinfo_id` ↔ `ID`.
2. **Крок 2: Рахунки (`qdfInvoices`)**
З таблиці `virtuemart_orders`.
Для кожного замовлення знайти відповідного клієнта (через `virtuemart_order_id`) і встановити `ClientID`.
3. **Крок 3: Продукти (`tblProducts`)** *(опційно)*
Можна попередньо завантажити продукти з `virtuemart_products`, якщо їх ще немає в Access.
4. **Крок 4: Продукти замовлень (`tblInvoicesProducts`)**
З таблиці `virtuemart_order_items`.
Потрібно:
- зв'язати з рахунком (`InvoiceID`)
- зв'язати з клієнтом (`ClientID`)
- зв'язати з продуктом (`Product`)
---
## ???? Приклад: логіка на Python
```python
import mysql.connector
import pyodbc
# Підключення до MySQL
mysql_conn = mysql.connector.connect(
host='localhost', user='root', password='пароль', database='назва_бд'
)
mysql_cursor = mysql_conn.cursor(dictionary=True)
# Підключення до Access (через ODBC)
access_conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=шлях\до\файлу.accdb;')
access_cursor = access_conn.cursor()
# Крок 1: Синхронізація клієнтів
mysql_cursor.execute("SELECT * FROM virtuemart_order_userinfos")
clients = mysql_cursor.fetchall()
for client in clients:
access_cursor.execute("""
INSERT INTO qdfMain (ID, FirstName, LastName, Email)
VALUES (?, ?, ?, ?)
""", client['virtuemart_order_userinfo_id'], client['first_name'], client['last_name'], client['email'])
access_conn.commit()
```
---
## ???? Увага
- Якщо в Access використовуються **автоматичні ID (AutoNumber)**, треба зберігати відповідність між MySQL ID та Access ID (використовувати `SELECT @@IDENTITY` або `cursor.lastrowid`).
- Дотримуйтесь **послідовності вставки**: Спочатку клієнти, потім рахунки, потім продукти в рахунках.
- Рекомендується працювати з **тимчасовими словниками** чи `dict`, щоб зберегти відповідності ID між джерелом і ціллю.
---
## ???? Результат
Після завершення:
- Дані з MySQL успішно перенесені до MS Access
- Всі зв’язки між таблицями збережені
- Доступно для звітів чи подальшої обробки в Access