关于在客户端提出查询的疑问(100分)

  • 主题发起人 主题发起人 李尚强
  • 开始时间 开始时间

李尚强

Unregistered / Unconfirmed
GUEST, unregistred user!
我看了《Delphi4技术内幕》,里面关于有三层结构的例子,但是只是显示数据
而已,实际上是把数据库里的数据copy到TClientDataSet里,再来编辑数据。
这样网络流量岂不是仍然很大?
客户端可以查询吗?是不是只能用Params属性?
 
可以,可以在客户端提交查询内容,如
ClientDatsSet1.Provider.DataRequest(sqlstring);
可在服务器端Provider1的ondataRequest事件中响应,如
Query1.sql.text:=Input;
当然,Params也是一种很好查询方法
 
d5 提供一个command属性,直接写SQL。
 
CJ:有什么好点的D5新功能介绍的网址或书吗?
 
当然可以了:
set parameter传参数
用clientdataset.datarequest(sql text) (D5)
用clientdataset.command
直接在服务器写一个过程,客户端去调用,这样还可以使用事务。
 
cj :clientdataset.commandtext如何用。我写的不行,好象说是readonly
 

不会吧,我也没用过,一个E文站上说的,好象不是RO吧?
小天:有,搜索一下吧,E文的,忘记了:-)
 
E文的呀,唉。
英文26个字母,小天才认得25个,
呜~~~~~~~~~~~~~~~~~~~~~~~
 
hehe , 发clientdataset.commandtext命令前要clientdataset.close才行:-)
就好象query.sql改先把query关闭一样.
 
对必须的数据,哪怕网络再慢,也只能传过来,没办法
实现查询的方法:
服务器那边的Provider挂一个TQuery,
在OnDataRequest事件里写:
Query.SQL.Text:=Input;
客户端查询的代码这样写:
with ClientDataSetdo
begin
Close;
DataRequest(SQLStatement);
Open;
end;

如果考虑到流量的问题,只好编程的时候小心点了,
1、查询条件尽量严格,这点最重要
2、只取需要的字段,不要select *
3、如果要取记录数,改用select count(*),不要用recordcount
 
>cj :clientdataset.commandtext如何用。我写的不行,好象说是readonly
关键是服务器端Provider的Options中poAllowCommandText必须要打开
然后直接可以当作一个TQuery来操作...
 
我已经明白了
 
flier:我赌人头,绝对不是READONLY
 
其实对于网络来说,数据传输是很快的,数据库那点东西花不了
什么时间,关键在于连接上,时间一般是耗费在网络的连通
上,所以我认为应从这个角度优化程序.
 
多人接受答案了。
 
后退
顶部