我已经在Delphi XE7中建立了连接到DataSnap服务器的客户端。我需要将在客户端上创建的SQL字符串发送到要针对Firebird DB执行的服务器。我正在使用FireDAC,但如果我使用DB Express,我会得到类似的结果。
我有TFDPhysFBDriverLink - > TFDConnection - > TFDQuery - >服务器上的TDataSetProvider。
我有TSQLConnection - > TDSProviderConnection - > TClientDataSet - > TDataSource - >客户端上的DBGrid
TFDQuery似乎在设计时需要SQL.Text值。 (例如,从Cust_Master中选择*)我可以将SQL字符串(例如select * from Proj_Master)发送回服务器并将其加载到TFDQuery中,如果我在更改SQL.Text之前和之后检查受影响的行,我获取为客户和项目查询返回的正确行数。问题是在客户端,我只得到设计时间SQL的结果,即客户,而不是我发送到服务器的SQL,即在网格中显示的项目。我将SQL发送到服务器后调用ClientDataSet.Refresh。
我需要能够将各种SQL查询发送回服务器,我无法在设计时将它们全部定义。我是否使用正确的组件来实现这一目标?
答案 0 :(得分:0)
您必须关闭并重新打开ClientDataSet。一个简单的刷新不会。
答案 1 :(得分:0)
您需要将DSServer的生命周期设置为Invocation,或者直接在ServerMethods'中创建FBQuery。阶级功能。我推荐第二个。
答案 2 :(得分:0)
检查TDataSetProvider->选项 - >检查poAllowCommandText