MTS中的动态SQL语句执行(100分)

  • 主题发起人 主题发起人 jeffzxc
  • 开始时间 开始时间
J

jeffzxc

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近搞MTS中间服务器,由于可参考的书籍和资料不多,希望得到有经验的朋友
的帮助.
我在一本<Delphi4 编程技术内幕>的书中看到关于MTS的一些例子,客户端程序
中ClientDataSet的ProviderName属性都为空(即不导出Provider对象),客户端得到
数据集都是通过在接口定义GetData方法实现,那么我要动态执行Sql该怎么实现,难
道是在GetData方法中将Sql语句作为Variant变量传过去吗,如果那样感觉也太土了.
另外MTS不用自己编程实现Pooling,那么它是采用什么机制来支持多客户端的,
还有有经验的朋友能不能告诉我它在大量客户端(100个以上)同时接入的情况下性
能如何,是否稳定?
有没有关于MTS方面比较好的书或资料介绍一下.如果有朋友能提供成功的开发
实例就更好了,在此先多谢!
 
真的没人回答这个问题吗,还是我没说清楚.
我的意思是需要客户端根据需要组装select查询语句交给中间服务器执行返回
结果集.

 
中间层将DataSetProvider的Options->poAllowCommandText属性设置为True
客户端设置TClientDataSet的CommandText属性为你要执行的Sql语句就可以了
 
up..........
 
但是他是 ClientDataSet的ProviderName属性都为空
可能只要传SQL语句回去了,不过,一般在客户端最不要直接使用SQL
 
一般来说可以在中间层实现一个方法,执行客户端传进去的SQL语句,
然后将结果打包传到客户端,再转换成正常数据显示出来
如:
在中间层写一个方法:procedure queryopen(sql:widestring,returndata:widestring)
sql是客户端传进的SQL语句,returndat是查询结果
在客户端调用该过程:
var
sql,returndata:widestring;
co_aa:iaa //该方法的接口
begin
sql:='select aaa from aa';
co_aa:=coaa.create;
co_aa.queryopen(sql,returndata);
clientdataset1.close;
clientdataset1.xmldata:=returndata;
clientdataset1.open;
//returndata所存放的就是结果,不过xmldata这个属性只有在DELPHI6才有,
如果是在DELPHI5中,则要自己进行转换
sql:=' ';
//再进行别的操作
.........
end;

在这里,ClientDataSet的ProviderName属性都为空
 
to joan_is_here:
基本做法是这样,不过能否探讨一下,如果中间层用MTS或COM+ 由于中间组件是无状态的
客户机更新的数据怎么处理更好
 
to joan_is_here,再说明一下,如何更新啊?
 
看过李颖大虾用的方法!
在ClientDataSet.BeforeApplyUpdates中传入SQL语句
在Provider.BeforeApplyUpdates中将得到的SQL语句赋值给provider所连接TQuery.SQL.Text
程序如下:
Client端:
procedure xxxx.ClientDataSetBeforeApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
with Sender as TClientDataSetdo
OwnerData := CommandText;
end;

Server端:
procedure xxxx.ProviderBeforeApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
qrDataProvider.SQL.Text := OwnerData;
end;
 
后退
顶部