ClientDataSet 怪问题,请高手帮忙!!!!(100分)

  • 主题发起人 主题发起人 Lihang001
  • 开始时间 开始时间
L

Lihang001

Unregistered / Unconfirmed
GUEST, unregistred user!
三层结构,用ClientDataSet执行查询数据数据操作,第一次、第二次都成功(单击同一个Button,执行相同的SQL语句),可是第三次(单击同一个Button,执行相同的SQL语句)或第四次就会死机,请问这是怎么回事呀?请高手赐教!!!
 
数据缓存没有更新或状态值未归位
 
间隔时间太短了吧?
 
很可能和你的连接机制和线程模型有关。
尽量要用无状态连接机制。
 
关注此问题,我用同样技术做的三层,应用服务器大约每运行一天多,客户端就无法连接上
 
8成服务器端没释放!要是一天查个几万次,每次1K,也就当了。。。
 
如何查询的呢,具体一点说出来.
 
中间层要做成无状态的。
可以使用ADO或者dbExpress连接,操作的时候应该使用这样的方式:
obj: IMyComObj;
obj := coMyComObj.CreateRemote('ServerPC');
try
ClientDataSet.Date := obj.AS_GetRecords(...);
finally
obj := nil;
end;

保证每次调用完了以后都正确释放。
 
帮顶!
http://www.source520.com
站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载
http://www.source520.com/search/search.asp
"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
用COM+先取得数据,再送给客户端.
 
采用無狀態模式來實現。
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
我是在客户端写的SQL语句,服务端用一 DataSetProvider+Query 建立连接,客户端给ClientDataSet的Commandtext赋SQL语句,然后ClientDataSet.open;
to huangsong:
请问如何“数据缓存没有更新或状态值未归位 ”?谢谢!!

to happycyp:
请问怎样使用”无状态连接机制“连接?谢谢!!
to bbgsgs:
请问服务器端如何释放? 谢谢!!
to delphisuccess:
请问如何实现无状态模式?谢谢!!
请赐教!!!
 
无状态连接,就是一个服务器端的进程不需要释放和重新建立就可以反复的为不通的客户端请求服务,即只有采用了无状态连接方式才可以使用Pooling(池)来极大的提高软件的运行效率并同事降低中间件服务器的资源占用。
有状态连接就是服务器端必须保存客户端的状态信息,以备下一次同一个客户端连接进来以后可以进行下一步的操作,比如客户端打开了一个什么表,下一次可能会对这个表进行更新,这个过程中服务器端必须记住表的名字和数据库的连接信息。否则的话下一次进行更新(ApplyUpdate)的时候服务器就不知道要对哪个表进行操作了。[red]客户端连接到服务端之后,服务端会初始化一个新的服务进程来为客户端服务,在客户端做完所有操作之前不释放,客户端完成所有操作只有再释放。[/red]
无状态连接是相对于有状态连接而言的,即所有的信息都保存在客户端。客户端每次连接到服务器端可以不用开一个新的服务进程,只要连接到一个现有的服务进程就可以进行操作了。服务进程在服务结束以后也不释放,而是返回到池中等待下一个请求。释放由中间件服务器容器的机制决定。多长时间没有请求释放或者最少维持多少个进程不释放等等。客户端每次请求服务器服务的时候,都尽快释放,下一次再请求就可以了,比如读取数据完了以后关闭中间件连接,更新数据的时候重新打开连接进行操作。
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
to 硕鼠:
谢谢!!请问如何建立无状态连接和有状态连接?!!!元宵节快乐!!!
 
建立没有区别,关键是释放。
有状态对象是在程序开始的时候建立连接,程序结束的时候释放。
无状态对象是在需要进行数据操作的时候建立连接,操作结束后马上释放,每次建立的连接只处理一个或很少的几个连贯的数据操作。每次需要进行数据操作就重新建立连接。
 
比如我想按无状态的模式执行,打个比方,现在想输入一张单据B,而输入这张单据,需要先打开另一张单据A先读取些资料,那在输入单据A之前,一定要先查询一次的,那查询完后,用户开始输入的时候,是不是要先把连接释放,然后在保存的时候,再重新连接?
 
对的,打开读,关闭,修改然后再打开连接更新。
 
这说的关闭,是指把SockedConnection.Connected设为False吗? 如果是的话,那每次重新连接,会不会要额外的连接时间,因为在输入一张单据的过程中,可能会要查询基本资料很多次(10多次都正常),比如要选取客户,明细表中的物料等,这样的操作,也要每次查询完就关闭连接吗?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部