有这样一个要求:用户需要数据即时刷新。用什么方法好?我用的是TIMER,
但看了任务管理器的性能后,发现内存在不断增加。这个程序是三层结构的,
我把SQL语句写在TIMER里后,系统启动后报错:
Clientdataset2:Missing data provider or data packer
分不够加!谢谢各位了。我很急
但看了任务管理器的性能后,发现内存在不断增加。这个程序是三层结构的,
我把SQL语句写在TIMER里后,系统启动后报错:
Clientdataset2:Missing data provider or data packer
分不够加!谢谢各位了。我很急
解决方案 »
- 不创建新类能override如timage类控件的wndproc过程吗?
- 麻烦高手帮我看看这个题目的意思:勇创C++ ———戏中学软件 ,用DELPHIE开发
- 记录类型赋值的问题!!!
- 帮忙给看看什么意思?
- 如何管理客户端Socket,每个Socket和一个用户ID对应?(通过SockHand能找到响应的Socket吗?不用循环)
- 哪儿有正式版的fastreport下载
- 请问,哪儿有Delphi6.0英文版的Qreport3.6.2下载啊
- 有点难,怎么判断网络上的文件是否存在?
- 300分请教图像打印问题!
- 想不通大家为什么对做mis不感兴趣
- 如何将在delphi中将一个word文件或图片写入ms_sql sever数据库
- 重金之下,我不相信没有勇夫(一个问题300分)!
data:=null;
将实时刷新时间延长。最好在服务器上调用方法,不要在客户端直接COMMANDTEXT:=‘SELECT’;
ServerSocket.Socket.Connections[i].SendText('Client Refresh');
在Client端中的ClientSocket的OnRead事件中:
var str:string;
begin
str:=Socket.ReceiveText;
if str='Client Refresh' then
begin
ClientDataSet.Close;
ClientDataSet.CommandText:='select * from table';
ClientDataSet.Open;
end;
是不是将 ServerSocket 放在中间层
ClientSocket 放在客户端??
不好意思,问的很白痴吧.我第一次接触网络编程.
应该放在 DataSetProvider 的afterapplyupdate 或者 是afterapplyexecute 中了??
不好意思,实在麻烦你.搞定候,再给你上分.
完全不对;
下付例子:
应用层:function TEasy_Dcom_Server.resultrecord(const sql: WideString): OleVariant; //调用刷新的数据表
begin
if queryrecord(aquery2,sql) then //select
begin
result:=dspquery2.Data;
end else
begin
result:=null;
end;
end;客户端:
sql:='select * from yourtable';
clientdataset1.close;
clientdataset1.data:=null;
clientdataset1.data:=dm.socktconnection1.appserver.resultrecord(sql);
clientdataset1.open;将查询放在应用层,加快查询速度,减少查询时间
(当然要考虑网络流通时间)。
不信你运行多个客户端试试,一个客户端更新了其它用你上面的那个更本没什么反应.
只所以加了SOCKET就是因为没有想出好的其它MIDAS中的方法才这样试的做的.但你上面那个也够搞笑.现在的问题就是你怎样去驱动让它去实时刷新纪录?
只是我很疑惑,
w1w2w3w4(gt)兄,您所说的
ServerSocket.Socket.Connections[i].SendText('Client Refresh');
.
.
.
是对的,但是为什么没有说全呢,是疏忽了还是其它原因...
要知道为了这个I 我可是两天两夜没睡啊.偏偏这个I是很关键的.
我不知道咱们中国的程序员为什么不能很好的沟通?为什么要在技术上有所保留
这个问题,网上的范例也是这样,关键的地方都处处隐含.好像不这样做就不能显示是
高手.咱们中国的程序员再也不能这样了.看看人家比利时.80年代末起步的,现在是世界
第一软件出口大国了.如果人家也象咱这样,会有今天软件的盛世么?
w1w2w3w4(gt)兄,我无意也无权对您指责,相反我对你的点滴很感激,只是希望您下次把
文章全点.发发个人意见,暂时不结贴.看看,听听战友的意见
这个问题我也想知道哟。
我呢试过几种方法。
1:就是在需要时用Close; Open;
行是行得通,可这样的话有点网络方面的问题影响执行效率。
2:在TDataSetProvider的Option属性中改PoAutoRefresh也行不通。
3:ClientDateSet1.Data:=DataSet.Delta;
可是如果是新增一笔数据而且有一字段是自增的又怎么办呢?
第一种方法是万万不可得.我也试过.然后看监测系统性能,乖乖,内存是以一兆增加得(定时为1秒).
我给你个思路:服务器上放个SERVER 通讯.客户机上放个 CLIENT 通讯. 客户机完成数据提交,刷新,删除等.都通过CLIENT 发送个信息. SERVER 接受到后,再判断又几个客户处于连接状态得基础上,返回这个信息.CLIENT 收到后,针对不同得讯息,做不同得处理.可以得.我试过了
在客户端用两个ClientDataSet组件:在新增时用一个组件直接更新数据库(insert语句--修改update语句)而另一个组件则将数据append..post的方法加入记录集;删除先用(Delete语句直接删除数据库中的数据)然后在删除记录集中的数据。