将远程 Firebird table 复制到本地数据库
Copying remote Firebird table to local database
我有一个带有数据库的远程 Firebird 3.0 服务器。在这个数据库中,有一个很大的table。客户在工作中经常查询这个table。有太多客户端和糟糕的互联网连接,所以使用这个 table 的工作很糟糕。我通过 IBExpert 将此 table 的本地副本复制到一个临时数据库中,该数据库与客户端应用程序一起分发。
但现在需要更改此 table 中的某些值(添加新值并编辑一些旧值)。所以我需要某种同步 - 将远程修改的 table 复制到客户端的本地数据库。
客户端应用程序是使用 Delphi Berlin 10.1 制作的。所以同步应该通过Delphi代码来完成。
你能给我一个想法吗,如何正确同步这么大的 table,好吗?
您可以在 master 数据库上触发 POST_EVENT(用于插入、更新、删除(触发器))以通知客户端应用程序有更改。
那么您的客户端将需要触发程序(在本地数据库上)以进行同步。这可以通过 EXECUTE STATEMENT ON EXTERNAL
FOR EXECUTE STATEMENT ('SELECT ... WHERE CURRENT_TIMESTAMP >= tablename.modifiedon')
ON EXTERNAL 'SERVER/PORT:DBPATH'
您应该在主数据库中包含 insert/modified/delete 的日期。
我有一个带有数据库的远程 Firebird 3.0 服务器。在这个数据库中,有一个很大的table。客户在工作中经常查询这个table。有太多客户端和糟糕的互联网连接,所以使用这个 table 的工作很糟糕。我通过 IBExpert 将此 table 的本地副本复制到一个临时数据库中,该数据库与客户端应用程序一起分发。
但现在需要更改此 table 中的某些值(添加新值并编辑一些旧值)。所以我需要某种同步 - 将远程修改的 table 复制到客户端的本地数据库。
客户端应用程序是使用 Delphi Berlin 10.1 制作的。所以同步应该通过Delphi代码来完成。
你能给我一个想法吗,如何正确同步这么大的 table,好吗?
您可以在 master 数据库上触发 POST_EVENT(用于插入、更新、删除(触发器))以通知客户端应用程序有更改。
那么您的客户端将需要触发程序(在本地数据库上)以进行同步。这可以通过 EXECUTE STATEMENT ON EXTERNAL
FOR EXECUTE STATEMENT ('SELECT ... WHERE CURRENT_TIMESTAMP >= tablename.modifiedon')
ON EXTERNAL 'SERVER/PORT:DBPATH'
您应该在主数据库中包含 insert/modified/delete 的日期。