Синхронизация между SQL Server 2008 Express и таблицами VFP

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

Первая база данных — это SQL Server 2008 Express, которая работает на отключенных ноутбуках (без доступа к сети или Интернету). Вторая база данных (основная) — это VFP 9.0, работающая на сервере.

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

Помимо различных механизмов баз данных, я должен принять во внимание следующие моменты:

  1. Таблицы не обязательно должны иметь одинаковую структуру
  2. Первичные ключи не совпадают (GUID в SQL Server и часто комбинация символьных полей в VFP).
  3. Синхронизация таблиц должна выполняться в определенном порядке, чтобы соблюдать отношения родитель-потомок.
  4. При некоторой вставке на стороне SQL Server должен быть сгенерирован новый первичный ключ и синхронизирован в таблице VFP.
  5. Должен быть сделан ряд проверок, и иногда требуется некоторая обратная связь от пользователя.
  6. Не все записи нужно синхронизировать
  7. Некоторые записи на SQL Server необходимо удалить после синхронизации.
  8. Необходимо учитывать удаленные записи с обеих сторон
  9. Необходимо внести минимальные изменения в базу данных VFP.

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

Я быстро посмотрел на Microsoft Sync Framework, но со всеми ограничениями, которые у меня есть, и тем фактом, что у меня нет уже построенного клиента VFP (AFAIK), я не думаю, что это будет большой помощью.

Заранее благодарим за отзыв.

Обновление. Приложение для ноутбука представляет собой приложение C# WinForm и использует SQL Server 2008 Express.


person izokurew    schedule 20.05.2009    source источник


Ответы (2)


Сложность ситуации и требований приводит меня к мысли, что вам нужно написать приложение Visual FoxPro. Visual FoxPro легко подключается к данным SQL Server 2008. Сложность кода заключается в соответствии требованиям и определении данных, которые необходимо синхронизировать, а не в синтаксисе. Сильной стороной Visual FoxPro является язык обработки данных и возможность подключения практически к любому источнику данных (родные DBF, ODBC, ADO и XML).

SQL Server может считывать данные VFP 9 через драйвер VFP 9 OLE DB. Вы можете написать хранимые процедуры T-SQL для доступа к данным VFP. Однако не уверен, как он распознает ноутбук, подключенный к сети.

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

Поскольку у меня есть опыт работы с Visual FoxPro, мне было бы проще пойти другим путем, но это только я. Вы должны идти с набором навыков ресурсов, которые у вас есть для проекта.

VFP считывает и записывает данные SQL Server через соединение (DSN, ConnectionString) и любые методы, включающие сквозную передачу SQL (SQLConnect(), SQLExec() и SQLDisconnect()), CursorAdapters, Remote Views или их комбинацию.

Программа Visual FoxPro также может распознавать события Windows, такие как подключение к сети. Приложение может быть установлено на каждом ноутбуке и запущено для распознавания событий Windows. После возникновения события приложение может попытаться подключиться к базе данных SQL Server (возможно, оно подключается к сети без доступного SQL Server или к другой сети).

После подключения он запускает логику для проверки и синхронизации баз данных.

Похоже, у вас нет большого контроля над записью приложения в данные VFP 9 на ноутбуке. Если у вас есть контроль над записью приложения в базу данных VFP 9, вы можете рассмотреть возможность изменения приложения для записи в экземпляр SQL Server Express на ноутбуке, а затем вы можете использовать репликацию SQL Server для управления синхронизацией. Однако это нетривиальная задача, и репликация SQL Server, хотя и становится лучше с каждым выпуском, вызывает у администраторов баз данных потерю волос. Определенно много работы идет по этому пути.

Рик Шуммер Visual FoxPro MVP

person Rick Schummer    schedule 07.06.2009
comment
Спасибо за ответ. Извините, но я забыл упомянуть, что приложение для ноутбука представляет собой приложение C# WinForm, которое я написал и использует SQL Server 2008 Express. Я очень хорошо знаю VFP, так как использую его более 10 лет, но мы пытаемся от него отойти по разным причинам. - person izokurew; 08.06.2009
comment
Иногда переход на другой язык упрощает задачу, а иногда не очень. Релиз Sedna для VFP включает поставщика DDEX для Visual Studio 2005 (и я думаю, что он может работать с 2008, но не цитируйте меня по этому поводу). Это может упростить доступ к данным в коде C#. - person Rick Schummer; 09.06.2009

Я бы посоветовал вам еще раз взглянуть на структуру синхронизации MS. У нас возникла ситуация, когда мы хотим синхронизировать время от времени подключаемые клиентские приложения C# с нашим бэкэндом Java/Oracle. Вы можете использовать поставщиков инфраструктуры синхронизации для клиента C# и реализовать свой собственный подкласс KnowledgeSyncProvider для серверной части. Это проведет вас на полпути и покажет вам хороший образец для остальных.

person David Betts    schedule 17.07.2009