如果在服务端有10个数据库要与客户端进行操作(在客户端进行查询、增加、删除等)。是否对于每一个数据库在服务端都要有放置一个datasetprovider,与之相对的客户端是否也要放置一个clientdataset,这样的话,服务端与客户端就要用到很多控件,有没有方法使用少几个控件,也能实现以上的数据传递操作。

解决方案 »

  1.   

    可以这样:服务器端只用一个ADOQuery,一个datasetprovider,在查询前先设置ADOQuery的Connection属性,对每个查询ADOQuery设置对应的SQL语句,查询返回的结果可作为方法的返回结果,即result:=datasetprovider.data;
    也可将多个查询结果作为方法的返回结果:
    vData:=VarArrayCreate([0,2],VarVariant);
    ADOQuery.sql.text:=sql_str;
    ADOQuery.open;
    vData[0]:=datasetprovider.data;ADOQuery.close;
    ADOQuery.sql.text:=sql_str;
    ADOQuery.open;
    vData[1]:=datasetprovider.data;...result:=vData;至于客户端,若一个查询返回多个结果集,则须多个clientdataset。
    增加、删除等可参考查询的做法。
      

  2.   

    上面说的:服务器端只用一个ADOQuery,一个datasetprovider
    是可行的。我觉得还是一个表对象用一个 ADOQuery,一个datasetprovider,(包括查询、修改)这样也清晰,也不用传sql。
      

  3.   

    如果很简单的话只需一对就可以
    1.服务端datasetprovider----OPTIONS------AUTOCOMMANDTEXT
    2.客户端在查询时动态给clientdataset--COMMANDTEXT 赋SQL语句,在SQL中设置你所操作的数据库和相关操作