Hblinux,这个临视程序要什么样的能请说明白一点吗?谢谢!

解决方案 »

  1.   

    并发的Client有多少个?可以适当的调整ThreadCacheSize的值
      

  2.   

    您可以读一下李维先生的<<delphi 5.x分布式应用系统篇>>,在系统中加入负载平衡的处理就可以了
      

  3.   

    firing_sky 请问ThreadCaheSize是什么的属性.我不明白.我用的是MIDAS的TDataSetProvider
    来和客户相联的.
      

  4.   

    ThreadCache 属性:Specifies the maximum number of threads that can be reused for new client connections.
    允许同时连接的最大Client连接
      

  5.   

    我遇到过,不是太忙。而是因为client打开数据库时,加了锁,你需要在打开数据库后,立即作一次修改提交的操作,就可以搞定了
      

  6.   

    我是在单机上搞的,我在Server为每一个表都提供了一个IProvider端口,不知是否与这个有关,不知你们在对多表操作是时.Server上是否也是为每个表都提供一个端口还是每个表轮流使用同一个IProvider.
      

  7.   

    速度和多少个IProvider端口无太大关系,慢的主要原因是你的CLIENTDATASET设置的原因,不要
    设置机器名称,你会知道有多快!
      

  8.   

    Wizardxd!你说的机器名称是什么意思,ClientDataSet没有这个属性吧。我用的是Socket和服务器相连的用的是MIDAS中的DCOM技术。在Socket中只有host、和Address两个属性用来指定服务器的你的意思是用Address比较好吗可是我用Address好象没有什么进展。对了我的程序当对一个数据集的多条记录进行修改时用ApplyUpdates(-1)提交时会出现死机现象。这个和ClientDataSet中的
    PackRecords属性有关吗?希望大家给予指点并展开讨论。
      

  9.   

    to yiyu:
      你应该将你的服务器端使用了哪些控件,都是如何设置的写出来,大家才能具体地解决你所遇到的问题.
      

  10.   

    我的数据库层次是这样的。
         Server:  TDataSetProvider-->TQuery-->SqlServer 7
         Client:  TClientDataSet-->TSocketConnection
    ClientDataSet的PackRecords的值是-1.
        因为我是对多表操作,因此在客户端的每一个ClientDataSet 都对应服务器上的TDataSetProvider.我总觉得这样方法很笨。希望有搞过这样类型的高手们给予指点。
      

  11.   

    to YIYU:
      你应该统一建立一个DATABASE 由它来指向SQL SERVER,放置SESSION,并配置它,对于有多用户联接的情况是必须有它的,不然你的SERVER是不能建立多线程数据访问的,势力会建成多人访问时死锁.
      >因此在客户端的每一个ClientDataSet 都对应服务器上的TDataSetProvider.我总觉得这样方法很笨
      对于一些有主从表关系的表,或有联动关系的表可尽量用主从表方式来减少编程方面的烦杂细节.
      GOOD LUCK!
      

  12.   

    to YIYU:
      你应该统一建立一个DATABASE 由它来指向SQL SERVER,放置SESSION,并配置它,对于有多用户联接的情况是必须有它的,不然你的SERVER是不能建立多线程数据访问的,势必会建成多人访问时死锁.
      >因此在客户端的每一个ClientDataSet 都对应服务器上的TDataSetProvider.我总觉得这样方法很笨
      对于一些有主从表关系的表,或有联动关系的表可尽量用主从表方式来减少编程方面的烦杂细节.
      GOOD LUCK!
      

  13.   

    可能你不清楚如何设置主从表方式,我简单卖弄一下,献丑了.
    服务器端:
       放置两个TQUERY,名称分别为QRY1,QRY2;一个TDATASOURCE,名称为DS1
    1.   设置两个QUERY的DATABASE.
    2   QRY1.SQL.TEXT:='SELECT * FROM BMB';  //查询部门表,表中有一个ID字段为'BMID'
        QRY2.SQL.TEXT:='SELECT * FROM YGB WHERE BMID=:BMID'; //员工表,通过'BMID'变量与主表BMID对应上.
    3.  设置DS1的数据源为QRY1;
      DS2的数据源为DS1;
    4.设置TDataSetProvider,将指向主表QRY1;
    客启
      
      

  14.   

    可能你不清楚如何设置主从表方式,我简单卖弄一下,献丑了.
    服务器端:
       放置两个TQUERY,名称分别为QRY1,QRY2;一个TDATASOURCE,名称为DS1
    1.   设置两个QUERY的DATABASE.
    2   QRY1.SQL.TEXT:='SELECT * FROM BMB';  //查询部门表,表中有一个ID字段为'BMID'
        QRY2.SQL.TEXT:='SELECT * FROM YGB WHERE BMID=:BMID'; //员工表,通过'BMID'变量与主表BMID对应上.
    3.  设置DS1的数据源为QRY1;
      DS2的数据源为DS1;
    4.设置TDataSetProvider,将指向主表QRY1;
    客户端:
      设置两个TClientDataSet,cli1指向TSocketConnection
        cc 
      

  15.   

       双击CLI1,添加所有的字段,CLI2的DATASETFIELDS属性列表中就会有员工表的数据集,CLI2只要设置此项就行,不需要设置REMOTESERVER等.如此服务器设置正确,ACTIVE就可能为TRUE了,更新时只需要  CLI1.ApplyUpdates(-1);即可,不需要过问CLI2 的事.
      

  16.   

    Seoul说的对,在这种情况下,应该TSession建立多个会话线程,
    当然,每次的会话名不能一样,怎样写,自己想想.
      

  17.   

    我从一开始就有用了Tsession。这个我是知道的,因为我们要面对多用户就要用多线程来做。听了大家的意见后,我已经给我原来的程序动了一个大手术,就是把原来的Server中的对外5个口(TDatasetProvider)现在被我砍了四个然后在Client中的ClientDataSet通过CommandText动态传送SQL,轮流使用真是麻烦,但计算机不觉得烦,因为它就爱干这个事可是当我一块更新好几条记录时如输入多条记录时,ApplyUpdatas(-1)时,它就发火了,而且火气很大,逼着我使出看家本领--Press The RESET Button. 后来我只好听话每更新一条记录就来一次ApplyUpdatas(-1).这样它就温顺了许多但是我觉得这不是好的办法在此再向各位名医请教良方。TDataSetProvider中的poallowMutilRecord属性好象无剂于事,我已经度过。
      

  18.   

    上文中最后两字是"用过",非度过。笔误,Soory!!
      

  19.   

    1。你有SQL如何用APPLYUPDatas?这点我不懂。
    2。另外,机器名称即HOST。在单机上可以不设。速度会快很多。
    3。在多表中用多个CLIENTDATASET并没什么不好,用一个DATAMODUL我个人觉得不无不妥。
      

  20.   

    >> 1.我的 SQL是用来从中中SERVER 中下载数据到中CLIENTDATASET ,然后用户对 ClientDataSet 中的数据修改时就用 ApplyUpdatas 进行提交修改后的数据难道你们不是这样做的吗?请指 
    教 。  
     >>在多表中用多个CLIENTDATASET并没什么不好,用一个DATAMODUL我个人觉得不无不妥 谢谢你提的好意见。  不知有谁有开发过多层的经验能不能传授一点给小弟,小弟会感激不尽的 。
      

  21.   

    >ClientDataSet通过CommandText动态传送SQL
    对于需要更新的表一般不应做动态SQL的,建议你只将哪些查询过来的表什么的做动态,而需要更新的表做静态,而且需要更新的表的SQL的写法应该是SELECT * FROM ???
    对于其中ID字段做成LOCKUP或在程序中用其它方法处理
    GOOD LUCK
      

  22.   

    用BORLAND数据库BDE连接数据库,BDE的”内存“设置十分重要,
    并且如果是每个客户开一个会话期,只能联接48个。
    具体细节,请查看李维的书籍。