Приложение MS Access – преобразование данных из Access на SQL Server

Имейте в виду здесь, я не гуру доступа. Я владею SQL Server и .NET Framework. Вот моя ситуация:

Очень большое приложение MS Access 2007 было создано для моей компании подрядчиком.

Приложение было разделено на два уровня BY ACCESS; есть передняя часть, которая содержит все формы доступа Ms, а затем на задней части, которые являются таблицами доступа, запросами и т. д., которые хранятся на компьютере в сети.

Ну, конечно, необходимо преобразовать часть хранения данных в SQL Server 2005, сохраняя все эти форматы GUI, которые были созданы в Ms Access. Здесь я и прихожу.

Я немного прочитал и обнаружил, что вы можете связать формы или, возможно, даже таблицы доступа с таблицами SQL Server, но я по-прежнему не уверен, что именно можно сделать и как это сделать.

Кто-нибудь сделал это? Просьба прокомментировать любые возможности, ограничения, соображения относительно такого обязательства. Благодаря!

Не используйте мастер увеличения из Access:

  • Во-первых, он не будет работать с SQL Server 2008.

  • Во-вторых, есть намного лучший инструмент для работы:
    SSMA, помощник по миграции SQL Server для доступа, который предоставляется бесплатно Microsoft.

Он многое сделает для вас:

  • переместите данные из Access на SQL Server
  • автоматически привязать таблицы к Access
  • дать вам много информации о потенциальных проблемах из-за различий в двух базах данных
  • отслеживает изменения, поэтому вы можете синхронизировать их с течением времени до завершения переноса.

Недавно я написал запись в блоге .

У вас есть пара опций, мастер увеличения делает приличную (иш) работу по перемещению структуры и данных от доступа к Sql. Затем вы можете настроить связанные таблицы, чтобы ваше приложение «работало» так, как сейчас. К сожалению, диалект Sql, используемый Access, отличается от Sql Server, поэтому, если в коде есть какие-либо «сырые SQL-выражения», они могут нуждаться в изменении.

Поскольку вы связаны с таблицами, хотя все другие функции Access, QBE, формы и т. Д. Должны работать так, как ожидалось. Это самый простой и, вероятно, лучший подход.

Другой способ приблизиться к проблеме – это перенести данные, как указано выше, а затем вместо использования связанных таблиц использовать ADO изнутри доступа. Этот подход является своего рода famaliar, если вы привыкли к другим языкам / dev, но это неправильный подход. Доступ приходит с множеством встроенных материалов, что делает работу с данными очень простой, если вы вернетесь к использованию ADO / Sql, вы потеряете многие из этих преимуществ.

Я предлагаю начать с небольшой части приложения – не существенные данные и перенести несколько таблиц и посмотреть, как это происходит. Конечно, сначала ты возвращаешь все.

Удачи

Другие предложили оптимизировать работу Jet back на SQL Server и подключиться через ODBC. В идеальном мире приложение будет работать красиво, без необходимости ничего менять.

В реальном мире вы обнаружите, что некоторые из ваших интерфейсных объектов, которые были разработаны для эффективной и быстрой работы с задней панелью Jet, на самом деле не очень хорошо работают с базой данных сервера. Иногда Jet догадывается неправильно и посылает на сервер что-то действительно неэффективное. Это особенно актуально при массовых обновлениях записей – для того, чтобы не загружать серверные ресурсы (хорошая вещь), Jet отправит один оператор UPDATE для каждой записи (что плохо для вашего приложения, поскольку это много, много медленнее, чем один оператор UPDATE).

Что вам нужно сделать, так это оценить все в своем приложении после того, как вы его повысили, и где есть проблемы с производительностью, переместите часть логики на сервер. Это означает, что вы можете создать несколько видов на стороне сервера, или вы можете использовать сквозные запросы (передать всю инструкцию SQL SQL Server и не позволять Jet беспокоиться об этом), или вам может потребоваться создать хранимые процедуры на сервере ( особенно для операций обновления).

Но в целом на самом деле вполне безопасно предположить, что большая часть из них будет работать нормально без изменений. Скорее всего, это будет не так быстро, как старое приложение Access / Jet, но вы можете использовать SQL Profiler, чтобы выяснить, что такое удержание, и перепроектировать вещи, чтобы быть более эффективными с задней стороны SQL Server.

Если приложение Access уже было эффективно спроектировано (например, формы никогда не привязаны к полным таблицам, а вместо этого к источникам данных с ограничительными предложениями WHERE, возвращающими только 1 или несколько записей), то это, скорее всего, будет работать очень хорошо. С другой стороны, если он использует много плохих методов, наблюдаемых в примерах баз данных Access и шаблонов, вы можете столкнуться с огромными проблемами.

Я считаю, что каждое приложение Access / Jet должно быть спроектировано с самого начала с идеей о том, что когда-нибудь это будет увеличено, чтобы использовать серверный конец. Это означает, что приложение Access / Jet на самом деле будет достаточно эффективным и быстрым, но также, когда вы увеличите размер, это приведет к минимуму боли.

Это ваш самый дешевый вариант. Вы захотите настроить соединение ODBC для своих клиентов Access, указывающих на ваш SQL Server. Затем вы можете использовать (я думаю) вариант «Импорт» для «привязки» таблицы к SQL Server через источник ODBC. Перенесите данные из таблиц Access в SQL Server, и у вас есть данные на SQL Server в форме, которую вы можете управлять и выполнять резервное копирование. Важно, что запросы могут быть записаны на SQL Server в виде представлений и представлены в Access db как связанные таблицы.

Таблицы Linked Access работают нормально, но я использовал их только с ODBC и другими базами данных (Firebird, MySQL, Sqlite3). Информация о первичных или внешних ключах не проходила. Были также проблемы с интерпретацией типов данных: дата в MySQL – это не то же самое, что и в Access VBA. Я думаю, что эти проблемы не так уж плохи при использовании SQL Server.

Важная точка. Если вы связываете таблицы в Access с SQL Server, в таблице EVERY должен быть указан первичный ключ (Project Access? Experience? Experience говорит, что, вероятно, в некоторых таблицах нет ПК). Если PK не определен, то формы доступа не смогут обновлять и вставлять строки, делая таблицы эффективными только для чтения.

Взгляните на этот инструмент миграции Access to SQL Server. Это может быть один из немногих, если не ТОЛЬКО, истинных одноранговых или серверных средств миграции, работающих как чистое веб-приложение. Он использует в основном ASP 3.0, XML, объект файловой системы, объект словаря данных, ADO, ADO Extensions (ADOX), объекты для создания словаря и несколько других опрятных технологий и технологий Microsoft. Если у вас есть таблица доступа источника на одном сервере и целевой сервер SQL Server на другом сервере или даже на том же сервере, и вы хотите запустить это как решение для интернет-Интернета, это продукт для вас. В этом примере обсуждается корзина покупок VPASP, но она будет работать для ЛЮБОЙ версии Access и для ЛЮБОЙ версии SQL Server с SQL 2000 до SQL 2008.

Я заканчиваю разработку для общего процесса преобразования базы данных, включающего автоматическое преобразование таблиц доступа, представлений и индексных структур в магазине VPASP Shopping или любой другой системы доступа в их эквиваленты SQL Server 2005/2008. Он работает прямо с вашего сервера без необходимости внешней помощи со стороны внешнего персонала или консультантов.

После создания клона ваших таблиц Access, индексов и представлений в SQL Server эта процедура миграции данных выборочно перенесет все данные из ваших таблиц Access в ваши новые таблицы SQL Server 2005/2008 без необходимости выдавать либо вашу фактическую базу данных Access, либо Содержимое таблицы или ваши пароли для всех.

Вот часть процесса обратного проектирования, работающая с системой с почти 200 таблицами и почти 300 индексами и представлениями, которые выполняются в качестве системного приемочного теста. Все еще продолжается работа, но основные части на месте.

http://www.21stcenturyecommerce.com/SQLDDL/ViewDBTables.asp

Я делаю автоматическую обратную разработку DDL-таблиц доступа (Data Definition Language) и преобразовываю их в SQL-эквивалентные DDL-выражения, поскольку структуры таблиц и даже дополнительные таблицы могут быть немного разными для каждого клиента VPASP и для каждой версии VP-ASP ,

Я заканчиваю фактическую процедуру преобразования данных, которая будет переносить данные из Access на SQL Server после создания этих новых таблиц SQL, включая любые представления или индексы. Он написан полностью в ASP, с VB Scripting, Объектом файловой системы (FSO), Объектом словаря, XML, DHTML, JavaScript прямо сейчас и выполняется довольно быстро, как вы увидите на базе базы данных SQL Server 2008 только ради пример.

Требуется 15-20 секунд, чтобы перепроектировать почти 500 различных объектов базы данных. В этом примере может быть в общей сложности более 2000 столбцов для 170 таблиц и 270 индексов.

Я даже предложил вам запустить обе системы VPASP параллельно, используя два разных файла подключения к базе данных на одном сервере, чтобы убедиться, что заказы, введенные в систему доступа и SQL Server, дают те же результаты перед фактическим переходом к производству.

John (a / k / a SQL Dude) [email protected] (это демонстрационный сайт VP-ASP)

Вот техника, о которой я слышал один из разработчиков. Это если вы действительно хотите что-то вроде приложения Client-Server.

  1. Создайте файлы .mdb / .mde для каждого пользователя (вы увидите, почему).
  2. Для каждой таблицы им нужно выполнить CRUD, иметь локальную копию в файле в # 1.
  3. Формы остаются связанными с локальными таблицами.
  4. Напишите код VBA для обработки CRUD из локальных таблиц в базу данных SQL Server.
  5. Отчеты могут основываться на временных таблицах, созданных на SQL Server (не смогут создавать временные таблицы в файле mde, я не думаю).

После того, как вы решите, как вы хотите сделать это с помощью одной формы, не слишком сложно применить ту же технику к остальным. Самое приятное в работе с формой на локальной таблице – вы можете сохранить много существующих функций как существующее приложение (вот почему они использовали и продолжают использовать Access, я надеюсь). Вам просто нужно обратиться к получению данных в SQL Server.

Вы можете продолжать иметь связанные таблицы, а затем постепенно постепенно их устранять с помощью этой техники, поскольку время и производительность требуют диктата.

Поскольку каждый пользователь имеет свой собственный локальный файл, он может работать с локальной копией данных. Только минимальный размер, необходимый для выполнения своей задачи, должен быть скопирован локально. Пример: если они обновляют одну запись, таблица будет иметь только эту запись. Когда пользователь добавляет новую запись, вы заметите, что поле ID для записи равно Null, поэтому требуется инструкция insert.

Я полагаю, что локальная таблица действует как набор данных в .NET? Я уверен, что это несовершенная аналогия.

  • DAO RecordsAffected не возвращает правильное значение после слияния passthru
  • Не удалось подключиться к Excel VBA ODBC
  • Каков наилучший способ постоянно отмечать запись как доступную только для чтения?
  • Использование SQL Select Statement в VBA
  • Соединение DSN-less с интерфейсом MS Access и сервером SQL-сервера
  • Установить время (0) Тип данных на сервере Sql до NULL
  • Как обойти «Выбрать источник данных» Запрос для таблиц запросов с VBA
  • Как загрузить данные из доступа к серверу sql при открытии файла
  • sql server: есть ли способ получить последнюю запись, вставленную без хранимой процедуры?
  • Возможно ли изменить значение тайм-аута соединения OLEDB по умолчанию? Ошибка времени выполнения (80040e31)
  • Справка SQL Command в VBA MSAccess
  • Давайте будем гением компьютера.