问题:我打算两台机器分别放一个Scktsrvr,其中一台机器IP1装数据库1,另外一台机器IP2装数据库2,用DELPHI6做一个程序Test,把数据库1的某些数据导入数据库2。实践:我把一个Scktsrvr、数据库1、数据库2装在同一台机器IP,程序Test也写数据库1、数据库2均在其上,没有问题;但程序Test若写数据库1、数据库2分别机器IP1,机器IP2,则弹出对象不合法(E文)声明:1:与网络、路由无关;
      2:开发环境:WINDOWS 2000 SERVER+SQL SERVER2000+DELPHI6.0

解决方案 »

  1.   

    我把一个Scktsrvr、数据库1、数据库2装在同一台机器IP,程序Test也写数据库1、数据库2均在其上,没有问题;
    这时候的test在那里(同一台机器上)?
    我建议首先检查配置的问题。我曾经也是使用scktsrvr。但是因为杀毒软件等问题,没有搞定(如果没有杀毒软件则没有问题。)
    在看看你作为服务器的软件有没有问题。我觉得可能服务器端或客户端少了那个dll文件。
      

  2.   

    cougar87(不死的海):
    问:test在那里?
    答:同一台机器上
      

  3.   

    那你就先检测服务器端和客户端的dll分发情况看看。是不是使用的那台机器环境没配置好
      

  4.   

    cougar87(不死的海):
    不可能。
    在一个Scktsrvr、数据库1、数据库2装在同一台机器IP上,配置数据库1、数据库2使用同一个IP,没有任何问题。
    我再重申一下,我在两台机器都启动Scktsrvr,并且其中一台装数据库1,另一台装数据库2,程序Test若写APP_IP:192.168.0.5,
    MANAGE_IP:192.168.0.13则弹出对象不合法(E文)
      

  5.   


    ----------------------------------------------------------------
    原贴内容:
    scktsrvr设置问题请赐教:客户端5至7个,我应如何设置thread cache size和timeout值,
    附应用环境
    windows2000+sqlserver2000+应用服务器程序+客户端应用程序以前应用程序在
    thread cache size:10
    timeout:0
    当记录数达到300条时各客户端应用程序运行相当缓慢,为了提高速度参考网上相关贴子设置如下:
    thread cache size:20
    timeout:30
    不料,运行效果反而大不如前.如莫名出现ERROR:read socket error之类的错误,这些好在没有影响正常使用,但要命的是速度不仅没有提升,而且出现有些客户端根本启动不起来!!!!
      

  6.   

    你的问题与Thread Cache Size、Timeout无关。这两个设置基本与运行效果不相挂勾Thread Cache Size
      ScktSrvr程序的线程池的数量。
    Timeout
      ScktSrvr中一个客户端如果Timeout分钟没有响应的话,则关闭这个连接。Default: 0,是说没有限制时间
    你的客户端的运行效果和你的程序有关,我不清楚你的程序是怎么运行的,所以也没法说的清楚。因为我看N多人也是用MIDAS技术,客户端的数量比你的要多,但好像也没这个运行效果缓慢的原因。
      前段,有一个数据库的库,有6W条数据,也不算多,因为没有加索引,所以N慢无比,后来加了索引后,N快无比,看看是不是数据库的问题。"read socket error",是TSocketConnection在ScktSrvr中断开你的连接所触发时发生的错误。它是消息异步,所以try不了,可以通过继承TSocketConnection.DoError(protected)方法也取得。
    TSocketConnectionEx = class(TSocketConnection)
    protected
      procedure DoError(E: Exception); override;
    end;procedure TSOcketConnectionEx.DoError(E: Exception);
    begin
      if E is ESocketError then
        E.Message := 'Socket出现错误,请尝试重新启动程序。';
      inherited DoError(E);
    end;