dsp的Option指定poAllowCommandText为true
在ClientDateSet中动态指定CommandText属性就可以了

解决方案 »

  1.   

    我也像问这个问题,但如果多个Client 同时调用此DSP,会不会有影响?
      

  2.   

    你把ClientDataSet的PacketRecords指为-1让其一次性把数据申请完,就不会多个CLient冲突了
      

  3.   

    不会吧!好象在update的时候回出错,
      

  4.   

    要是dsp不是只读的话,当然会出现这个问题,就是其它模式也会出错,不过你可以设定容错个数,不让服务器端出现可怕的对话框提示,最好是自已写代码处理异常!!!
      

  5.   

    但是能把数据UPDATE上去吗?还有其他解决方法吗?
      

  6.   

    我是觉得放 n 个DSP 也没什么问题,只是那个 RemoteDataModule 太小了,所以不大好看点...
    如果你非要这样做首先得明白的是 Update时的动作, 大概过程是这样, 细节不记1. ClientDataSet call ApplyUpdates2. DataSetProvider active BeforeApplyUpdates
    3. DataSetProvider active BeforeUpdateRecord OnUpdateRecord AfterUpdateRecord every record
    4. DataSetProvider active AfterApplyUpdates关键就在于 2 中, 是实际更新语句, 这时是用一个分析器产生SQL语句,当然BeforeUpdateRecord时 Applied = true 时没有使用分析器...分析器是针对 SourceDS中字段产生SQL语句, 也就是说只要SourceDS是你要更新的表就可以正确更新,但SourceDS是个指针, 所有DataSet控件都是用 new分配的, 所以改不到调用者的值..我想了想, 可以在 BeforeApplyUpdates时, ClientDataSet送个表名就可以作到了
      

  7.   

    comanche 谢谢!我去试一下!