2

我正在构建一个系统,其中包括 JavaFX 客户端通过 glassfish 应用服务器上的 servlet 从 MS SQL 服务器中提取数据。我还使用来自无法修改的遗留系统的 Visual FoxPro 数据库中的一些数据。我正在使用 JDataConnect 库在 glassfish 服务器上创建一个 JDBC 连接,我可以对它进行常规 SQL 查询以获取我需要的数据。

我的 javafx 客户端包括许多绑定到从数据库检索到的数据的 ObservableLists 的表视图。有一个表是来自 MS SQL 数据和 FoxPro 数据的数据的组合。FoxPro 数据是从不同的系统更新的。由于客户端有很多方法可以对他们呈现给用户的数据进行切片和切块,因此尝试使这些复合数据保持同步是令人望而却步的(并非不可能,但很困难)。在 MS SQL 数据库中的相关表中使用 FoxPro 数据库中的必要值在更改时更新它们会更容易(并且对于客户端的设计更好)。而且由于许多客户端将访问数据,因此让客户端尝试更新数据库是不明智的。

那么,我是否可以编写一个在 glassfish 服务器上运行的应用程序,该应用程序将监视 foxpro 数据库并将必要的更改/数据写入 SQL 服务器数据库?我只是不知道从哪里开始开发这种类型的解决方案,如果确实这是专家的建议。我什至不确定要搜索什么。完全失去了最好的总结。

感谢您的任何帮助或想法。

4

2 回答 2

1

You may not be able to modify the legacy FoxPro system, but if the tables are stored in a VFP Database container (i.e. DBC file), you may be able to write stored procedure triggers (insert, update and/or delete) within the VFP database container and have them write directly to the SQL server db. You'd need:

  1. Access to the VFP database container
  2. Connection string to the SQL server database
  3. To write VFP stored procedure triggers for the VFP data you want pushed up to the SQL Server tables.

Once you have the connection sorted out, you can write VFP stored procedures using SQLEXEC() command which sends a "SQL statement to the data source, where the statement is processed" (from VFP help). E.g.

m.lnFileHandle = SQLSTRINGCONNECT(m.lcConnectString)
m.lcSQLCommand = "insert into elctablebk.dbo.t_bkcust (custidnum) values ('EdTest')"
m.lnRetVal = SQLEXEC(m.lnFileHandle, m.lcSQLCommand)

The above code gets a filehandle # from connecting to the server, a variable is created with an SQL INSERT command, and the SQL statement is executed on the server using the SQLEXEC() command. If successful, a record is inserted in the example t_bkcust file on the server.

于 2012-10-09T04:32:01.977 回答
0

那么,我是否可以编写一个在 glassfish 服务器上运行的应用程序来监视 FoxPro 数据库并将必要的更改/数据写入 SQL 服务器数据库?

理想的情况是 FoxPro 数据库可以将更改推送到您的应用程序。如果 FoxPro 生成数据库更改日志并且您的应用程序可以读取此日志,则可以执行此操作。FoxPro 专家还不足以说这种方法是否可行。

另一个过程是让您的应用程序定期读取 FoxPro 数据库。比如说,每 15 分钟一次。然后由您的应用程序找出不同之处并更新 SQL Server 数据库。SQL Server 数据库将始终落后于 FoxPro 数据库的轮询间隔。您必须确定读取 FoxPro 数据库的频率以满足应用程序的需要。

于 2012-10-05T15:28:40.907 回答