delphi不有例子吗?用ClientDataSet发送就行.
begin
  { Send the query string to the server and open the client dataset }
  ClientData.Close;
  ClientData.CommandText := Memo1.Lines.Text;{The SQL statement}
  ClientData.Open;
end;

解决方案 »

  1.   

    不行啊,这个查询只能获得服务端提供的单个表的查询,并不能动态
    查询其他表.唯一的办法是发送查询命令到服务端的Tdataset使服务端提供的表改变.
      

  2.   

    是啊,这样:
    把服务端的一个与TQuery相连的TDataSetProvider的Options的poAllowCommandText设上。再如heifei()兄所言,将的你的SQL语句放在与那个DataSetProvider相连的ClientDataSet的CommandText属性里,再OPEN那个CLIENTDATASET即可,就跟把SQL直接放到TQUERY里一样,不过有用参数的话会有不同。需要在CLIENTDATASET里手工加上参数
      

  3.   


    如果你只是要查询其他表何必这么麻烦,要传参呢:
    ClientData.CommandText := 'select * from '+TableName;
    不就行了吗?
      

  4.   

    ClientDataSet1.Close;
    ClientDataSet1.CommandText := 'SELECT * FROM '+''+TableName+'';ClientDataSet1.Open;
      

  5.   

    做三层结构,我建议不要用CommandText这个属性,除非你认为这个SQL语句几乎不可能
    改变。比较好的方法是在中间层定义方法或函数,实现种种你所要的功能,然后在客户端
    调用这个方法,最后更新数据就行了。
    如: ClientDataSet1.Close;
         MainForm.DcomConnection.Appserver.ExeSql_Exmple; //调用方法
         ClientDataSet1.Open;
    通过这种方式,可以很方便地维护程序。
    并且经过个人测试,使用CommandText与调用方法的执行速度是一样的。
      

  6.   

    to clus:
             请问既然速度一样为什么还要用服务器程序的方法呢?会不会多此一举?