migratsiya-bazy-dannyh-acces/index.html

403 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru" data-theme="auto">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Миграция базы данных Access 2003 → Access 2016+</title>
<link rel="stylesheet" href="design-system/kt-ai-fonts.css">
<link rel="stylesheet" href="design-system/kt-ai-tokens.css">
<link rel="stylesheet" href="design-system/kt-ai-components.css">
<link rel="stylesheet" href="design-system/kt-ai-page.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🗄️</text></svg>">
<style>
a.kt-ai-btn { text-decoration: none; }
.doc-table { width:100%; border-collapse:collapse; margin:var(--kt-ai-space-4) 0 }
.doc-table th, .doc-table td { padding:var(--kt-ai-space-3) var(--kt-ai-space-4); border:1px solid var(--kt-ai-border); text-align:left }
.doc-table th { background:var(--kt-ai-bg-soft); font-weight:var(--kt-ai-weight-semibold) }
.doc-table tr:hover td { background:var(--kt-ai-bg-soft) }
.step-num { display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:var(--kt-ai-radius-full); background:var(--kt-ai-primary); color:var(--kt-ai-bg); font-size:var(--kt-ai-text-sm); font-weight:var(--kt-ai-weight-bold); margin-right:var(--kt-ai-space-2); flex-shrink:0 }
.step-row { display:flex; align-items:flex-start; gap:var(--kt-ai-space-3); margin:var(--kt-ai-space-4) 0 }
.step-row p { margin:0 }
code { font-family:var(--kt-ai-font-mono); background:var(--kt-ai-bg-soft); padding:2px 6px; border-radius:var(--kt-ai-radius-md); font-size:var(--kt-ai-text-sm) }
.warn-box { background:var(--kt-ai-bg-soft); border-left:4px solid var(--kt-ai-primary); padding:var(--kt-ai-space-4); border-radius:var(--kt-ai-radius-md); margin:var(--kt-ai-space-4) 0 }
.checklist { list-style:none; padding:0 }
.checklist li { padding:var(--kt-ai-space-2) 0; display:flex; align-items:flex-start; gap:var(--kt-ai-space-2) }
.checklist li::before { content:"☐"; flex-shrink:0 }
.toc a { color:var(--kt-ai-link); text-decoration:none }
.toc a:hover { text-decoration:underline }
.toc li { padding:var(--kt-ai-space-1) 0 }
</style>
</head>
<body>
<header class="kt-ai-pagehead">
<div class="kt-ai-wrap kt-ai-pagehead-in">
<strong>Миграция Access</strong>
<span class="kt-ai-spacer"></span>
<a class="kt-ai-btn" data-variant="ghost" href="#audit">Аудит</a>
<a class="kt-ai-btn" data-variant="ghost" href="#platform">Платформа</a>
<a class="kt-ai-btn" data-variant="ghost" href="#migration">Миграция</a>
<a class="kt-ai-btn" data-variant="ghost" href="#testing">Тесты</a>
<a class="kt-ai-btn" data-variant="ghost" href="#exploitation">Эксплуатация</a>
</div>
</header>
<section class="kt-ai-hero" data-align="center">
<div class="kt-ai-wrap">
<h1>Миграция базы данных Access 2003 → Access 2016+</h1>
<p class="kt-ai-hero-sub">Технический документ: переход с формата .mdb (Access 2003) на формат .accdb (Access 2016/2019/365) с сохранением работоспособности на Windows 10.</p>
</div>
</section>
<div class="kt-ai-wrap" style="margin-top:var(--kt-ai-space-6)">
<nav class="kt-ai-card" style="padding:var(--kt-ai-space-6)">
<h2 style="margin-top:0">Содержание</h2>
<ol class="toc">
<li><a href="#audit">Аудит текущей структуры данных</a></li>
<li><a href="#platform">Выбор целевой платформы</a></li>
<li><a href="#migration">Схема миграции данных</a></li>
<li><a href="#testing">План тестирования целостности</a></li>
<li><a href="#exploitation">Инструкция по эксплуатации</a></li>
</ol>
</nav>
</div>
<!-- ==================== 1. АУДИТ ==================== -->
<section id="audit" class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>1. Аудит текущей структуры данных</h2>
<p>Перед миграцией необходимо зафиксировать состав объектов базы и выявить потенциальные проблемы.</p>
</div>
<h3>1.1. Инвентаризация объектов</h3>
<p>Откройте базу .mdb в Access 2003 (или в режиме совместимости) и заполните таблицу:</p>
<table class="doc-table">
<thead>
<tr><th>Тип объекта</th><th>Имя</th><th>Кол-во записей</th><th>Примечание</th></tr>
</thead>
<tbody>
<tr><td>Таблица</td><td colspan="3"><em>заполнить по каждой таблице</em></td></tr>
<tr><td>Запрос</td><td colspan="3"><em>заполнить по каждому запросу</em></td></tr>
<tr><td>Форма</td><td colspan="3"><em>заполнить по каждой форме</em></td></tr>
<tr><td>Отчёт</td><td colspan="3"><em>заполнить по каждому отчёту</em></td></tr>
<tr><td>Макрос</td><td colspan="3"><em>заполнить по каждому макросу</em></td></tr>
<tr><td>Модуль VBA</td><td colspan="3"><em>заполнить по каждому модулю</em></td></tr>
</tbody>
</table>
<h3>1.2. Что проверить обязательно</h3>
<div class="kt-ai-grid" style="margin-top:var(--kt-ai-space-4)">
<article class="kt-ai-tile">
<h3>Связи между таблицами</h3>
<p>Откройте окно связей (Ctrl+L). Зафиксируйте все связи, типы (1:1, 1:∞) и каскадные правила. После миграции связи должны сохраниться, но проверить нужно.</p>
</article>
<article class="kt-ai-tile">
<h3>Типы полей</h3>
<p>Обратите внимание на: <code>Счётчик</code> (AutoNumber), <code>OLE Object</code> (проблемный при миграции), <code>Гиперссылка</code>, <code>Расчётное поле</code>. Запишите все нестандартные типы.</p>
</article>
<article class="kt-ai-tile">
<h3>VBA-код и макросы</h3>
<p>Откройте редактор VBA (Alt+F11). Проверьте: ссылки на внешние библиотеки (Tools → References), использование <code>DoCmd.TransferDatabase</code>, API-вызовы Windows (<code>Declare</code>).</p>
</article>
<article class="kt-ai-tile">
<h3>Фронтенд / бэкенд</h3>
<p>Если база разделена (linked tables → отдельный .mdb), зафиксируйте путь к бэкенду и список связанных таблиц.</p>
</article>
</div>
<div class="warn-box">
<strong>Внимание: объекты OLE Object</strong><br>
Поле <code>OLE Object</code> в Access 2003 хранило встроенные объекты (Excel, Word, картинки). В .accdb эти данные могут не отобразиться корректно. Рекомендуется экспортировать содержимое OLE-полей в файлы до миграции.
</div>
<h3>1.3. Размер и производительность</h3>
<table class="doc-table">
<thead><tr><th>Параметр</th><th>Значение</th><th>Комментарий</th></tr></thead>
<tbody>
<tr><td>Размер файла .mdb</td><td><em>___ МБ</em></td><td>Файлы &gt; 2 ГБ потребуют архивации старых записей</td></tr>
<tr><td>Кол-во таблиц</td><td><em>___</em></td></tr>
<tr><td>Кол-во записей (суммарно)</td><td><em>___</em></td></tr>
<tr><td>Кол-во форм/отчётов</td><td><em>___</em></td></tr>
<tr><td>Наличие VBA</td><td><em>Да / Нет</em></td></tr>
<tr><td>Linked tables (бэкенд)</td><td><em>Да / Нет</em></td><td>Если да — нужна миграция обоих файлов</td></tr>
</tbody>
</table>
</div>
</section>
<!-- ==================== 2. ПЛАТФОРМА ==================== -->
<section id="platform" class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>2. Выбор целевой платформы</h2>
<p>Целевой формат: <code>.accdb</code> — нативный формат Access 2007–2019/365. Полностью совместим с Windows 10.</p>
</div>
<h3>2.1. Сравнение версий</h3>
<table class="doc-table">
<thead><tr><th>Параметр</th><th>Access 2003 (.mdb)</th><th>Access 2016+ (.accdb)</th></tr></thead>
<tbody>
<tr><td>Макс. размер файла</td><td>2 ГБ</td><td>2 ГБ (без изменений)</td></tr>
<tr><td>Формат по умолчанию</td><td>Jet 4.0 (.mdb)</td><td>ACE (.accdb)</td></tr>
<tr><td>Шифрование</td><td>Нет</td><td>Да (AES-128)</td></tr>
<tr><td>Поля вложений</td><td>Нет</td><td>Да (замена OLE Object)</td></tr>
<tr><td>Многозначные поля</td><td>Нет</td><td>Да (но не рекомендуется)</td></tr>
<tr><td>История изменений Memo</td><td>Нет</td><td>Да</td></tr>
<tr><td>Вычисляемые поля</td><td>Нет</td><td>Да</td></tr>
<tr><td>Внешние данные (SharePoint, Outlook)</td><td>Ограниченно</td><td>Расширенная интеграция</td></tr>
<tr><td>Совместимость с Windows 10</td><td>Проблемная (UAC, DEP)</td><td>Полная</td></tr>
</tbody>
</table>
<h3>2.2. Рекомендуемая версия</h3>
<div class="kt-ai-card" style="padding:var(--kt-ai-space-6)">
<table class="doc-table">
<thead><tr><th>Вариант</th><th>Лицензия</th><th>Плюсы</th><th>Минусы</th></tr></thead>
<tbody>
<tr>
<td><strong>Access 2016 (standalone)</strong></td>
<td>Разовая покупка</td>
<td>Стабильная, без подписки, совместима с Windows 10/11</td>
<td>Нет обновлений функционала</td>
</tr>
<tr>
<td><strong>Access 2019 (standalone)</strong></td>
<td>Разовая покупка</td>
<td>Последняя «коробочная» версия</td>
<td>Только Windows 10/11</td>
</tr>
<tr>
<td><strong>Microsoft 365 (Access included)</strong></td>
<td>Подписка</td>
<td>Постоянные обновления, последняя версия</td>
<td>Ежемесячная/годовая оплата</td>
</tr>
</tbody>
</table>
<p style="margin-bottom:0"><strong>Рекомендация:</strong> Access 2016 или 2019 — минимальная версия, гарантирующая полную совместимость с Windows 10 и форматом .accdb.</p>
</div>
<div class="warn-box">
<strong>Важно: нельзя перейти на .accdb и вернуться обратно</strong><br>
Обратная конвертация .accdb → .mdb не поддерживается. Перед миграцией обязательно сделайте резервную копию исходного .mdb файла.
</div>
</div>
</section>
<!-- ==================== 3. МИГРАЦИЯ ==================== -->
<section id="migration" class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>3. Схема миграции данных</h2>
<p>Пошаговый процесс конвертации базы из формата .mdb в .accdb с сохранением всех объектов.</p>
</div>
<h3>3.1. Подготовка</h3>
<div class="step-row"><span class="step-num">1</span><div><p><strong>Резервная копия.</strong> Скопируйте исходный файл <code>база.mdb</code> в безопасное место. Имя копии — с датой: <code>база_backup_2026-09-14.mdb</code>.</p></div></div>
<div class="step-row"><span class="step-num">2</span><div><p><strong>Сжатие и восстановление.</strong> В Access 2003: <code>Сервис → Служебные программы → Сжатие и восстановление</code>. Это устраняет повреждения перед миграцией.</p></div></div>
<div class="step-row"><span class="step-num">3</span><div><p><strong>Документация.</strong> Заполните таблицы из раздела 1 (аудит) — они нужны для проверки после конвертации.</p></div></div>
<h3>3.2. Конвертация</h3>
<div class="step-row"><span class="step-num">4</span><div><p><strong>Откройте .mdb в Access 2016/2019/365.</strong> Двойной клик по файлу — Access откроет его в режиме совместимости (строка заголовка покажет «Режим совместимости»).</p></div></div>
<div class="step-row"><span class="step-num">5</span><div><p><strong>Конвертация формата.</strong> <code>Файл → Сохранить как → База данных Access (*.accdb)</code>. Укажите новое имя (например, <code>база_new.accdb</code>). Access преобразует формат.</p></div></div>
<div class="step-row"><span class="step-num">6</span><div><p><strong>Проверка объектов.</strong> После конвертации откройте .accdb и сверьте количество таблиц, запросов, форм, отчётов, макросов и модулей с данными аудита.</p></div></div>
<h3>3.3. Пост-миграция: что исправить вручную</h3>
<table class="doc-table">
<thead><tr><th>Проблема</th><th>Где искать</th><th>Решение</th></tr></thead>
<tbody>
<tr>
<td>Поля OLE Object пустые или не читаются</td>
<td>Таблицы с полем типа OLE Object</td>
<td>Заменить на «Вложение» (Attachment) или сохранить файлы отдельно и использовать гиперссылки</td>
</tr>
<tr>
<td>Ссылки на внешние библиотеки VBA (MISSING:)</td>
<td>VBA → Tools → References</td>
<td>Снять галочку с помеченных «MISSING», подключить актуальные версии библиотек</td>
</tr>
<tr>
<td>Linked tables указывают на старый .mdb</td>
<td>Диспетчер связанных таблиц (внешние данные)</td>
<td>Переподключить на новый .accdb-бэкенд</td>
</tr>
<tr>
<td>Макросы с <code>DoCmd.TransferDatabase</code></td>
<td>Макросы и VBA-процедуры</td>
<td>Проверить параметры — формат источника/приёмника должен быть <code>ACCD</code></td>
</tr>
<tr>
<td>Специальные символы в именах полей</td>
<td>Все таблицы</td>
<td>Переименовать: убрать пробелы, точки, спецсимволы. Использовать <code>snake_case</code> или <code>CamelCase</code></td>
</tr>
</tbody>
</table>
<h3>3.4. Разделённая база (frontend / backend)</h3>
<p>Если база разделена на фронтенд (.mdb) и бэкенд (.mdb):</p>
<div class="step-row"><span class="step-num">A</span><div><p>Сконвертируйте <strong>бэкенд</strong> в .accdb первым (пункты 4–6).</p></div></div>
<div class="step-row"><span class="step-num">B</span><div><p>Сконвертируйте <strong>фронтенд</strong> в .accdb.</p></div></div>
<div class="step-row"><span class="step-num">C</span><div><p>Во фронтенде: <code>Внешние данные → Управление связями</code> — переподключите все таблицы на новый .accdb-бэкенд.</p></div></div>
<div class="step-row"><span class="step-num">D</span><div><p>Разверните .accdb-фронтенд пользователям.</p></div></div>
</div>
</section>
<!-- ==================== 4. ТЕСТИРОВАНИЕ ==================== -->
<section id="testing" class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>4. План тестирования целостности</h2>
<p>Проверка после миграции — убедиться, что все данные и объекты работают корректно.</p>
</div>
<h3>4.1. Проверка данных</h3>
<table class="doc-table">
<thead><tr><th>№</th><th>Проверка</th><th>Метод</th><th>Результат</th></tr></thead>
<tbody>
<tr><td>1</td><td>Кол-во записей в каждой таблице</td><td>Сравнить с данными аудита (раздел 1)</td><td><em>☐ Совпадает</em></td></tr>
<tr><td>2</td><td>Первичные ключи</td><td>Открыть таблицу, проверить уникальность PK</td><td><em>☐ Без дублей</em></td></tr>
<tr><td>3</td><td>Внешние ключи (связи)</td><td>Проверить окно связей, каскадные правила</td><td><em>☐ Сохранены</em></td></tr>
<tr><td>4</td><td>Поля с маской ввода</td><td>Открыть таблицу в режиме конструктора, проверить свойства полей</td><td><em>☐ Работают</em></td></tr>
<tr><td>5</td><td>Значения по умолчанию</td><td>Проверить свойства полей в конструкторе</td><td><em>☐ Совпадают</em></td></tr>
<tr><td>6</td><td>Подстановки (Lookup)</td><td>Открыть таблицы с полями Lookup, проверить выпадающие списки</td><td><em>☐ Работают</em></td></tr>
</tbody>
</table>
<h3>4.2. Проверка объектов</h3>
<table class="doc-table">
<thead><tr><th>№</th><th>Проверка</th><th>Метод</th><th>Результат</th></tr></thead>
<tbody>
<tr><td>7</td><td>Запросы выполняются</td><td>Открыть каждый запрос, проверить результат</td><td><em>☐ Без ошибок</em></td></tr>
<tr><td>8</td><td>Формы открываются</td><td>Открыть каждую форму, пролистать записи</td><td><em>☐ Данные отображаются</em></td></tr>
<tr><td>9</td><td>Отчёты формируются</td><td>Предпросмотр каждого отчёта</td><td><em>☐ Без ошибок</em></td></tr>
<tr><td>10</td><td>Макросы работают</td><td>Запустить каждый макрос</td><td><em>☐ Выполняются</em></td></tr>
<tr><td>11</td><td>VBA-модули компилируются</td><td>VBA → Debug → Compile</td><td><em>☐ Без ошибок</em></td></tr>
<tr><td>12</td><td>Кнопки на формах</td><td>Нажать каждую кнопку с привязанным действием</td><td><em>☐ Работают</em></td></tr>
</tbody>
</table>
<h3>4.3. Проверка на Windows 10</h3>
<table class="doc-table">
<thead><tr><th>№</th><th>Проверка</th><th>Ожидаемый результат</th></tr></thead>
<tbody>
<tr><td>13</td><td>Открытие .accdb двойным кликом</td><td>Access открывает базу без ошибок UAC/DEP</td></tr>
<tr><td>14</td><td>Работа с включённым UAC</td><td>База работает без запуска от имени администратора</td></tr>
<tr><td>15</td><td>Печать отчётов</td><td>PDF-экспорт и печать работают корректно</td></tr>
<tr><td>16</td><td>Экспорт в Excel</td><td>Выгрузка данных из таблиц/запросов в .xlsx</td></tr>
</tbody>
</table>
<h3>4.4. Нагрузочный тест (для многопользовательских баз)</h3>
<p>Если база используется несколькими пользователями одновременно:</p>
<ul class="checklist">
<li>Откройте .accdb с 2–3 компьютеров одновременно</li>
<li>Проверьте, что блокировки записей работают корректно</li>
<li>Выполните одновременную запись в одну таблицу с разных машин</li>
<li>Проверьте, что нет конфликтов и потери данных</li>
</ul>
</div>
</section>
<!-- ==================== 5. ЭКСПЛУАТАЦИЯ ==================== -->
<section id="exploitation" class="kt-ai-section" data-divider="true">
<div class="kt-ai-wrap">
<div class="kt-ai-section-head">
<h2>5. Инструкция по эксплуатации</h2>
<p>Правила работы с мигрированной базой на Windows 10.</p>
</div>
<h3>5.1. Требования к окружению</h3>
<table class="doc-table">
<thead><tr><th>Компонент</th><th>Минимум</th><th>Рекомендуется</th></tr></thead>
<tbody>
<tr><td>ОС</td><td>Windows 10 (x64)</td><td>Windows 10 22H2+ / Windows 11</td></tr>
<tr><td>Access</td><td>Access 2016</td><td>Access 2019 или Microsoft 365</td></tr>
<tr><td>ОЗУ</td><td>4 ГБ</td><td>8 ГБ+</td></tr>
<tr><td>Свободное место</td><td>2× размер базы</td><td>Для сжатия и резервных копий</td></tr>
<tr><td>Сеть (для общего доступа)</td><td>100 Мбит/с</td><td>1 Гбит/с, стабильное соединение</td></tr>
</tbody>
</table>
<h3>5.2. Ежедневные операции</h3>
<div class="kt-ai-grid" style="margin-top:var(--kt-ai-space-4)">
<article class="kt-ai-tile">
<h3>Резервное копирование</h3>
<p><strong>Частота:</strong> ежедневно (или перед каждым сеансом массовых изменений).<br>
<strong>Метод:</strong> копировать .accdb на сетевой диск / USB / облако.<br>
<strong>Имя:</strong> <code>база_YYYY-MM-DD.accdb</code>.<br>
<strong>Хранение:</strong> минимум 7 последних копий.</p>
</article>
<article class="kt-ai-tile">
<h3>Сжатие базы</h3>
<p><strong>Частота:</strong> еженедельно или при росте файла.<br>
<strong>Метод:</strong> <code>Файл → Сведения → Сжатие и восстановление</code>.<br>
<strong>Зачем:</strong> удаляет «мусор», уменьшает файл, ускоряет работу.</p>
</article>
<article class="kt-ai-tile">
<h3>Обновление связей</h3>
<p>Если бэкенд перемещён — переподключите таблицы через <code>Внешние данные → Управление связями</code>. Путь к бэкенду должен быть доступен всем пользователям.</p>
</article>
<article class="kt-ai-tile">
<h3>Локальная копия фронтенда</h3>
<p>Каждый пользователь должен иметь <strong>свою локальную копию</strong> фронтенда (.accdb). Не открывайте общий файл одновременно — это источник повреждений. Обновления фронтенда — через замену файла.</p>
</article>
</div>
<h3>5.3. Типичные проблемы и решения</h3>
<table class="doc-table">
<thead><tr><th>Проблема</th><th>Причина</th><th>Решение</th></tr></thead>
<tbody>
<tr>
<td>«Файл заблокирован другим пользователем»</td>
<td>Файл .laccdb не удалён (аварийное завершение)</td>
<td>Удалить файл <code>база.laccdb</code> в папке с базой (когда никто не работает)</td>
</tr>
<tr>
<td>База открывается медленно</td>
<td>Фрагментация, накоплен «мусор»</td>
<td>Сжатие и восстановление (пункт 5.2)</td>
</tr>
<tr>
<td>«Недостаточно памяти»</td>
<td>Сложные запросы, индексы</td>
<td>Оптимизировать запросы, добавить индексы на поля фильтрации</td>
</tr>
<tr>
<td>Формы выглядят иначе</td>
<td>Разрешение экрана, тема Windows</td>
<td>Настроить макет форм в конструкторе под текущее разрешение</td>
</tr>
<tr>
<td>VBA не компилируется</td>
<td>Ссылки на старые библиотеки</td>
<td>VBA → Tools → References → снять MISSING, подключить актуальные</td>
</tr>
</tbody>
</table>
<h3>5.4. Чек-лист перед «боевым» запуском</h3>
<ul class="checklist">
<li>Резервная копия исходного .mdb сохранена и проверена</li>
<li>Все объекты (таблицы, запросы, формы, отчёты, макросы, модули) перенесены</li>
<li>Данные совпадают с аудитом (кол-во записей, ключи, связи)</li>
<li>VBA компилируется без ошибок (Debug → Compile)</li>
<li>Все формы открываются и отображают данные</li>
<li>Все отчёты формируются корректно</li>
<li>Проверено на Windows 10 (UAC, DEP, печать, экспорт)</li>
<li>Многопользовательский доступ протестирован (если применимо)</li>
<li>Резервное копирование настроено и работает</li>
<li>Пользователи проинструктированы (локальная копия фронтенда)</li>
</ul>
</div>
</section>
<footer class="kt-ai-wrap kt-ai-pagefoot">
<span>© 2026 Миграция Access</span>
<span class="kt-ai-spacer"></span>
<span>Технический документ</span>
</footer>
</body>
</html>