Обновление базы данных sql из данных FoxPro на сервере Glassfish
Я создаю систему, которая включает в себя клиенты JavaFX, извлекающие данные с сервера MS SQL через сервлеты на сервере приложений Glassfish. Я также потребляю некоторые данные из базы данных Visual FoxPro, которая поступает из устаревшей системы, которую нельзя изменить. Я использую библиотеку JDataConnect для создания JDBC-соединения на сервере Glassfish, с помощью которого я могу выполнять регулярные запросы SQL для получения нужных мне данных.
Мои клиенты javafx включают много табличных представлений, которые связаны с ObservableLists данными, извлеченными из баз данных. Существует одна таблица, которая представляет собой совокупность данных из данных MS SQL и данных FoxPro. Данные FoxPro обновляются из другой системы. Поскольку у клиента есть много способов нарезать и вырезать данные, которые они представляют пользователю, запрещается пытаться синхронизировать эти составные данные (не невозможно, но сложно). Было бы проще (и лучше для дизайна клиентов) обновить столбцы в соответствующих таблицах в базе данных MS SQL с необходимыми значениями из базы данных FoxPro по мере их изменения. А так как многие клиенты будут получать доступ к данным, нецелесообразно, чтобы клиенты пытались обновить базу данных.
Итак, могу ли я написать приложение, которое будет работать на сервере Glassfish, которое будет отслеживать базу данных foxpro и записывать необходимые изменения / данные в базу данных сервера SQL? Я просто не знаю, с чего начать разработку этого типа решения, если действительно, это то, что эксперты предложили бы. Я даже не уверен, что искать. Полностью потерянный суммирует это лучше всего.
Спасибо за любую помощь или идеи.
2 ответа
Возможно, вам не удастся изменить унаследованную систему FoxPro, но если таблицы хранятся в контейнере базы данных VFP (например, файл DBC), вы можете написать триггеры хранимых процедур (вставка, обновление и / или удаление) в VFP. Контейнер базы данных и пусть они пишут непосредственно на сервер SQL базы данных. Вам нужно:
- Доступ к контейнеру базы данных VFP
- Строка подключения к базе данных сервера SQL
- Для записи триггеров хранимых процедур VFP для данных VFP, которые вы хотите отправить в таблицы SQL Server.
Как только соединение разобрано, вы можете написать хранимые процедуры VFP с помощью команды SQLEXEC(), которая отправляет "оператор SQL в источник данных, где оператор обрабатывается" (из справки VFP). Например
m.lnFileHandle = SQLSTRINGCONNECT(m.lcConnectString)
m.lcSQLCommand = "insert into elctablebk.dbo.t_bkcust (custidnum) values ('EdTest')"
m.lnRetVal = SQLEXEC(m.lnFileHandle, m.lcSQLCommand)
Приведенный выше код получает дескриптор файла при подключении к серверу, переменная создается с помощью команды SQL INSERT, а оператор SQL выполняется на сервере с помощью команды SQLEXEC(). В случае успеха запись вставляется в пример файла t_bkcust на сервере.
Итак, могу ли я написать приложение, которое будет работать на сервере Glassfish, которое будет контролировать базу данных FoxPro и записывать необходимые изменения / данные в базу данных сервера SQL?
Идеальным было бы, если бы база данных FoxPro могла выдвинуть изменения в ваше приложение. Вы можете сделать это, если FoxPro создает журнал изменений базы данных, и ваше приложение может прочитать этот журнал. Мне не хватает эксперта FoxPro, чтобы сказать, возможен ли этот метод.
Другим процессом будет периодическое чтение вашего приложения базой данных FoxPro. Скажем, каждые 15 минут. Тогда ваше приложение должно выяснить, в чем дело, и обновить базу данных SQL Server. База данных SQL Server всегда будет отставать от базы данных FoxPro к интервалу опроса. Вам нужно будет определить, как часто читать базу данных FoxPro, чтобы удовлетворить потребности вашего приложения.