SocketConnection最大连接数才68台的问题!救命~~

无风飞尘 2008-03-28 01:13:04
我用现在写的一个软件里面要求多个(1-500)客户端连接服务器,
服务端用Remote Data Module+ScktSrvr.exe
客户端用SocketConnection+ClientDataSet

本来一切正常的(在客户端连接数少的时候)
一但客户端增加到68个以上时,就出现错误,在客户端提示:未指定的错误

很问高手们有没有方法解决,是不是用ScktSrvr.exe就只能连接68台
我调试过是ScktSrvr.exe里面抛出来的错误


如果ScktSrvr.exe不能满足我的需求,有什么好的解决方案,前提是客户端尽可能少改动
...全文
1018 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
无风飞尘 2008-04-04
  • 打赏
  • 举报
回复
严重BS楼上的广告,你们这样把人拉走也成就不了你的事业

这样分流只会让每个地方人气越来越少,这类人要坚决打击。

我的问题解决了,改用ASTA了,很方便,达到了我的要求,

据网上的价绍来看,RemObjects比ASTA总体上来说要好,但是比ASTA复杂,

先用着吧,有时间再转成RemObjects,结贴了。
僵哥 2008-04-03
  • 打赏
  • 举报
回复
select 
a0.caption,a1.caption,...a[n-1].caption,a[n].caption
from
mytable as a0 /*顶级*/
left join mytable as a1 /*二级*/
on a0.id=a1.did and a1.id<>a1.did
...
left join mytable as a[n] /*第N级,N是有限制*/
on a[n-1].id=a[n].did and a[n].id<>a[n].did
where a0.id=a0.did


按上面这个查询,一次可以查N阶,由于关联,自动进行了排序,并且join可以很好地利用索引进行快速的检索。

这里的顶级,只要修改一下条件,可以从第N阶开始作为当前查询的顶级节点。
无风飞尘 2008-04-03
  • 打赏
  • 举报
回复
to sunchunqian
谢谢你提供的方法;
你的方法对我上面说的情况来说是可以的,由于我的疏忽,我以为上面的那表达我的意了,结果还是忽略了一样东西
那就是排序

ID  DID  Sort Caption  
1   1   1   开发部
2   2   2   营销部
3   3   10   服务部
4   1   4   网络开发
5   1   5   数据库开发
6   4   6   张三
7   5   7   李四
8   2   8   王五
9   3   9   何某
10  10   3   业务部
11  10   11   彭某

Sort 在新建时=ID值,在用户自定义排序时(提供上移和下移功能,移动其实就是让两条数据的Sort值交换达到目的)

因此排序只能用Sort排,但又有个问题,只按Sort排还不够,就像上面的,

ID=3的Sort是10,而其下级人员何某ID=9,Sort=9(这各情况只需用户将业务部上移,则Sort与服务部交换)

那就变成下级排在上一级前面,用你的建树方法时也就让何某变成了根结点了。

我现在就是用你的方法,但是加上了递归,就是在第一次查到的结果中操作,速度是快了,但总感觉我的递归写的不够好

你有什么高招能解决一下吗?

这贴我马上就要结了,提问题的主要内容不需要解决了,因为我决定用ASTA或RemObjects用实现,现只想解决这个树的问题。
注:unsigned兄,你的分不会忘记给的 :) 谢谢你的热情。
sunchunqian 2008-04-03
  • 打赏
  • 举报
回复
我感觉楼主的数据库字段定义含义不是很清晰,不知道楼主DID字段的含义是什么?
我认为DID字段应该是本记录的父节点的ID,如果没有父节点DID=0
“Sort 在新建时=ID值”我认为应该改成:Sort 在新建时=(select isnull(max(sort),0)+1 from 表名 where did = 本记录.did )

因此根据我的定义方法:

ID  DID  Sort Caption  
1   0   1   开发部
2   0   2   营销部
3   0   3    服务部
4   1   1   网络开发
5   1   2   数据库开发
6   4   1   张三
7   5   1   李四
8   2   1   王五
9   3   1   何某
10  0    4   业务部
11  10   1    彭某



关注楼主的帖子是因为我也在用SocketConnection开发应用,目前还没有68个客户端,所以还没有发现楼主的那样的问题,但以后可能会面临类似的问题,所以非常关注楼主这个问题的解决方案,如楼主最终用了什么好方案还希望能够告诉我。呵呵。关于三层我还有些问题没有想到好的解决方案,希望能够向楼主请教。

我qq:12470312 一般在线隐身
email: yt58@sina.com;yt8899@sohu.com

无风飞尘 2008-04-03
  • 打赏
  • 举报
回复
我的Sort与DID无关的
sunchunqian 2008-04-03
  • 打赏
  • 举报
回复
在我的做法里多部门同时显示也是排序的,而且整个部门包括它的子节点也可以上移下移,部门移动时也是一样按照你的方法交换两者的sort值就可以了。


最上一行sql语句:
select * from 表名 order by did,sort
lqwxfdwj 2008-04-03
  • 打赏
  • 举报
回复
将Adoconnection的KeepConnection设为False;只有在需要的时候才去联连.
无风飞尘 2008-04-03
  • 打赏
  • 举报
回复
在我的应用中 Sort 必须唯一的那样我可以在多部门同时显示时排序也准确
无风飞尘 2008-04-02
  • 打赏
  • 举报
回复
上面写错了,特此更正:

我的表结构是这样的:

ID DID Caption
1 1 开发部
2 2 营销部
3 3 服务部
4 1 网络开发
5 1 数据库开发
6 4 张三
7 5 李四
8 2 王五
9 3 何某

在我的软件里的TreeView里显示成:

开发部
 +-网络开发
  +-张三
 +-数据库开发
  +-李四
营销部
 +-王五
服务部
 +-何某

用这一张表就可以建出无限制层数的树,只是我建的方法比较笨,我是从树顶开始递归查询去建的,
不知道哪个大侠有没有更好更快查询更少的办法吗,请不吝赐教
无风飞尘 2008-04-02
  • 打赏
  • 举报
回复
我的表结构是这样的:

ID DID Caption
1 1 开发部
2 2 营销部
3 3 服务部
4 1 网络开发
5 1 数据库开发
6 4 张三
7 5 李四
8 2 王五
9 3 何某

在我的软件里的TreeView里显示成:

开发部
+-网络开发
+-张三
+-李四
+-数据库开发
营销部
+-王五
服务部
+-何某

用这一张表就可以建出无限制层数的树,只是我建的方法比较笨,我是从树顶开始递归查询去建的,
不知道哪个大侠有没有更好更快查询更少的办法吗,请不吝赐教
僵哥 2008-04-02
  • 打赏
  • 举报
回复
开发部
 +-网络开发
  +-张三
 +-数据库开发
  +-李四
这个可以看成是(假设三阶):
开发部  #NULL   #NULL   
开发部  #网络开发 #NULL
开发部  #网络开发#张三   
开发部  #数据库开发#NULL
开发部  #数据库开发#李四   
sunchunqian 2008-04-02
  • 打赏
  • 举报
回复
zl这种无限制层数的树应该只需要查询一次就可以解决问题:

select * from 表名 order by did,id
cds.frist
Isfound:=false
while not cds.eof do
begin
Isfound:=false
for i:= 0 to TreeView.Items.count-1 do
begin
if TreeView.Items[i].Text = cds.fieldvalues['did'] then //这个地方可能每个节点需要一个结构体存储id,did,caption信息
begin
TreeView.Items[i].addchild()
Isfound:=true;
break;
end
end
if not isfound then
treeveiew.add() //根节点增加
cds.next
end

//cdsn 论坛的文本编辑器真是太差了
oushengfen 2008-04-01
  • 打赏
  • 举报
回复
呵呵,我知道ScktSrvr连接有限制,倒没有听过68台的限制,应该是楼主的方案设计有问题而引起的.
ideation_shang 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xb_luotuo 的回复:]
数据库链接可以共享,但是一定要动态建立TAdoQuery查询控件,用完后立即释放。
我自己做了一个SOCKET server,在服务器端对查询结果动态打包然后传递给客户端,客户端解包后传递给clientdataset,效果不错。
另外,DELPHI写完成端口,稳定性是一个问题,网上能够找到的,或者我自己写的,都可以用工具压垮。但是我用VC写的模型,可以固若金汤,服务器每天200人左右,几个月都没有问题。
[/Quote]
对语言还存在偏见哦,呵呵,底层是一样的。稳定不稳定那是代码写的有问题。
-------------------
改了连接后发现查询速度慢了很多,我的程序启动到显示界面有80多个查询(递归的数量大概就查询80多次)
有没有办法提高点?
lz不会是在递归里面查询吧?数据库应用,尤其是大量客户端的数据库应用,应该尽量减少与数据库的交互次数。
僵哥 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 GenieWin 的回复:]
引用 18 楼 unsigned 的回复:
引用 16 楼 GenieWin 的回复:
改了连接后发现查询速度慢了很多,我的程序启动到显示界面有80多个查询(递归的数量大概就查询80多次)
有没有办法提高点?

这是数据库操作的逻辑问题,多学习点数据库知识,好好调整一下。


其实我就是将一张表生成一个树形,而且树的层任意个,我能想到的只有这种循环去查表建树,
unsigned 老哥有生成树的代码分享下吗
[/Quote]
生成一个树形?展BOM?

使用多个逻辑表的Left Join一次性就可以展出多阶,如果不是太过于复杂的话,完全可以一次性展出,对于多余的部分再继续按同样的方式展开。以前涉及的比较多就是五阶到七阶,所以我就采用一次性展七阶,而这样的话,对于十四阶以内的最多也只有两次,而单阶展开的话,需要十四次。
laowang2 2008-04-01
  • 打赏
  • 举报
回复
up
僵哥 2008-03-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xb_luotuo 的回复:]
数据库链接可以共享,但是一定要动态建立TAdoQuery查询控件,用完后立即释放。
我自己做了一个SOCKET server,在服务器端对查询结果动态打包然后传递给客户端,客户端解包后传递给clientdataset,效果不错。
另外,DELPHI写完成端口,稳定性是一个问题,网上能够找到的,或者我自己写的,都可以用工具压垮。但是我用VC写的模型,可以固若金汤,服务器每天200人左右,几个月都没有问题。
[/Quote]
我Delphi写的完成端口的服务器,在线用户一万多,一切正常。不过我不清楚所谓的用工具压垮是怎么个压法,怎么垮的?
fox1999 2008-03-31
  • 打赏
  • 举报
回复
我自己做了一个SOCKET server,在服务器端对查询结果动态打包然后传递给客户端,客户端解包后传递给clientdataset,效果不错。

-------------------
可以兼容 SocketConnection 嗎?
fox1999 2008-03-31
  • 打赏
  • 举报
回复
使用ScktSrvr,要注意一个问题,就是有多少个连接就有多少个连接数据库,数据库用户登陆数是有限的,你可以去网上找找相关的数据库用户登陆最大数。

----------------
用數據庫連接池
ydlchina 2008-03-31
  • 打赏
  • 举报
回复
kark
加载更多回复(20)

1,593

社区成员

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

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