0

我在 Delphi XE7 中设置了一个连接到 DataSnap 服务器的客户端。我需要将在客户端上创建的 SQL 字符串发送到服务器以针对 Firebird DB 执行。我正在使用 FireDAC,但如果我使用 DB Express,我会得到类似的结果。

我在服务器上有 TFDPhysFBDriverLink -> TFDConnection -> TFDQuery -> TDataSetProvider。

我在客户端上有 TSQLConnection -> TDSProviderConnection -> TClientDataSet -> TDataSource -> DBGrid

TFDQuery 在设计时似乎需要一个 SQL.Text 值。(例如 select * from Cust_Master)我可以将 SQL 字符串(例如 select * from Proj_Master)很好地发送回服务器并将其加载到 TFDQuery 中,如果我在更改 SQL.Text 之前和之后检查受影响的行,我获取为客户和项目查询返回的正确行数。问题是,在客户端,我只得到设计时 SQL 即客户的结果,而不是我发送到服务器的 SQL 即在网格中显示的项目。在将 SQL 发送到服务器后,我确实调用了 ClientDataSet.Refresh。

我需要能够将各种 SQL 查询发送回服务器,我不能在设计时将它们全部定义。我是否使用正确的组件来实现这一目标?

4

3 回答 3

0

您必须关闭并重新打开 ClientDataSet。一个简单的刷新不会做。

于 2014-12-01T09:20:53.377 回答
0

检查 TDataSetProvider->Options->poAllowCommandText 是否被选中

于 2015-02-13T12:20:29.297 回答
0

您需要将 DSServer 的生命周期设置为 Invocation 或直接在 ServerMethods 的类函数中创建 FBQuery。不过我推荐第二个。

于 2015-02-02T16:19:51.623 回答