Покрокова інструкція для одноразової синхронізації даних із 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