三层的数据如何做到实时刷新?

黑夜中最亮的星是菩提 2004-04-28 08:56:24
有这样一个要求:用户需要数据即时刷新。用什么方法好?我用的是TIMER,
但看了任务管理器的性能后,发现内存在不断增加。这个程序是三层结构的,
我把SQL语句写在TIMER里后,系统启动后报错:
Clientdataset2:Missing data provider or data packer


分不够加!谢谢各位了。我很急

...全文
227 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
w1w2w3w4 2004-05-11
  • 打赏
  • 举报
回复
来了看到deluxtx(tx)的话至能惭愧一番如果我全部会我是不会躲藏的问题是以前我也没整过>_<,我也没整过实在是说不出什么.最后祝工作顺利,更重要的是以后如果我要做这个的话也要请你多帮忙
  • 打赏
  • 举报
回复
如果您真是您所说这样的话,倒轮到我惭愧了.不过还是很感谢您的拎一下.
揭帖了.最后祝大家快乐.
shsunb 2004-05-10
  • 打赏
  • 举报
回复
我测试的好像sqlserver一定要把内存吃的还剩10M为止,这个问题不知道有没有人碰到过?
HjmaAsC 2004-05-10
  • 打赏
  • 举报
回复
对哦,实际三层结构中,经常有使用服务器通知客户端的需要,但Delphi提供的三层控件都不可以从服务器端对客户端进行操作,然后只能在服务器与客户端加上一个Socket控件来进行控制操作,嘿嘿!真是够晕的!!
gzxwxj 2004-05-10
  • 打赏
  • 举报
回复
用户需要数据即时刷新。用什么方法好?
在客户端用两个ClientDataSet组件:在新增时用一个组件直接更新数据库(insert语句--修改update语句)而另一个组件则将数据append..post的方法加入记录集;删除先用(Delete语句直接删除数据库中的数据)然后在删除记录集中的数据。
XXSingle 2004-05-10
  • 打赏
  • 举报
回复
肯定碰过,只是还没有更好的解决方案
  • 打赏
  • 举报
回复
yutish2002兄:
第一种方法是万万不可得.我也试过.然后看监测系统性能,乖乖,内存是以一兆增加得(定时为1秒).
我给你个思路:服务器上放个SERVER 通讯.客户机上放个 CLIENT 通讯. 客户机完成数据提交,刷新,删除等.都通过CLIENT 发送个信息. SERVER 接受到后,再判断又几个客户处于连接状态得基础上,返回这个信息.CLIENT 收到后,针对不同得讯息,做不同得处理.可以得.我试过了
bankhank 2004-05-08
  • 打赏
  • 举报
回复
学习
  • 打赏
  • 举报
回复
这个问题已经解决了.感谢各位的支持.
只是我很疑惑,
w1w2w3w4(gt)兄,您所说的
ServerSocket.Socket.Connections[i].SendText('Client Refresh');
.
.
.
是对的,但是为什么没有说全呢,是疏忽了还是其它原因...
要知道为了这个I 我可是两天两夜没睡啊.偏偏这个I是很关键的.
我不知道咱们中国的程序员为什么不能很好的沟通?为什么要在技术上有所保留
这个问题,网上的范例也是这样,关键的地方都处处隐含.好像不这样做就不能显示是
高手.咱们中国的程序员再也不能这样了.看看人家比利时.80年代末起步的,现在是世界
第一软件出口大国了.如果人家也象咱这样,会有今天软件的盛世么?
w1w2w3w4(gt)兄,我无意也无权对您指责,相反我对你的点滴很感激,只是希望您下次把
文章全点.

发发个人意见,暂时不结贴.看看,听听战友的意见
yutish2002 2004-05-08
  • 打赏
  • 举报
回复
呵呵。。。
这个问题我也想知道哟。
我呢试过几种方法。
1:就是在需要时用Close; Open;
行是行得通,可这样的话有点网络方面的问题影响执行效率。
2:在TDataSetProvider的Option属性中改PoAutoRefresh也行不通。
3:ClientDateSet1.Data:=DataSet.Delta;
可是如果是新增一笔数据而且有一字段是自增的又怎么办呢?
w1w2w3w4 2004-04-30
  • 打赏
  • 举报
回复
Erice(白雪公猪) 同志你是否真搞清了楼主想要做什么?MIDAS的即时更新有你所讲的那么容易你不是要告诉我设置下poAutoRefresh, poPropogateChanges?或许MIDAS里有实时更新的方法但绝不是你上面那几行就做到的.
不信你运行多个客户端试试,一个客户端更新了其它用你上面的那个更本没什么反应.
只所以加了SOCKET就是因为没有想出好的其它MIDAS中的方法才这样试的做的.但你上面那个也够搞笑.现在的问题就是你怎样去驱动让它去实时刷新纪录?
wuzhijie 2004-04-29
  • 打赏
  • 举报
回复
先close再open或许能解决问题
  • 打赏
  • 举报
回复
报错的问题搞定了,但是实时刷新,内存在不断增加
  • 打赏
  • 举报
回复
queryrecord是字定义函数? dspquery2呢?不好意思
sandyboy 2004-04-29
  • 打赏
  • 举报
回复
关注
  • 打赏
  • 举报
回复
我用的是 WebConnection.
Erice 2004-04-29
  • 打赏
  • 举报
回复
w1w2w3w4(gt) 说的方式与楼主用的MIDAS不一样,楼主用的是DCOM而w1w2w3w4(gt) 说的是SOCKT。
完全不对;


下付例子:
应用层:

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;

将查询放在应用层,加快查询速度,减少查询时间
(当然要考虑网络流通时间)。
  • 打赏
  • 举报
回复
如果要用,怎么用啊?
  • 打赏
  • 举报
回复
Udp也能在INTERNET网里使用么?
  • 打赏
  • 举报
回复
7里有啊,我现在就在试啊?
加载更多回复(9)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧