应用服务器:BDE,TQuery。
客户端:使用TSocketConnet连接,调用服务器端函数,该函数使用TQuery控件按传第的参数刷新数据。客户端的ClientDataset关闭,打开。如果始终与应用服务器连接,客户端数据会刷新,但为了减轻负担,我每次刷新数据后,我都关闭连接,但这样问题出来了,客户端的数据不能够刷新,即数据库的数据发生改变,客户端刷新时,却没有改变,非要下次登录后才能刷新数据。
请问怎么解决。

解决方案 »

  1.   

    daijingjie2002(艰苦创业):我采用的是TSocketConnect做连接,如果一直保持连接,没有问题,但如果断开,再连接,刷新数据就不起作用了。
    另外问一下:如果始终保持连接,这种方式能支持多少用户?
      

  2.   

    不大可能呀,你刷新代码是重新用SQL语句取数据还是别的?如果是SQL语句的话难道SQL语句不起作用?不会吧?
      

  3.   

    to(zdq801104):
    我是这样做的,先通过gScktConnect.AppServer调用应用服务器上的OpenDataset(参数),更新应用服务器上的对应数据提供者(TQuery),然后打开客户端。保持连接就可以,断开,重新连接就不行了。
      

  4.   

    那你就在AfterConnected中写登录语句,这样,每次连接后都会调登录了。
      

  5.   

    shajp(夏日晴朗的天空):
    不需要重新登录,只需要刷新数据。
      

  6.   

    应用程序服务器端:
    TDatabase控件一个 连接数据库
    TQuery控件一个 查询数据
    TDataSetProvider 一个
    自己添加接口一个:
    procedure TTOAMServer.OpenDataSet(ALogName, AOrderSQL: OleVariant);
    begin
      with Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Append('select * from (');
        SQL.Append('SELECT A.*,B.FILE_SORT as FILE_SORT_NAME,TRUNC(SYSDATE-A.FILE_DATE) AS DATE_LEN');
        SQL.Append('FROM files A,FILES_LB B');
        SQL.Append('WHERE A.FILE_SORT=B.CODE');
        SQL.Append('AND A.file_limit like ''%'+ALogName+'%''');
        SQL.Append('AND A.Check_human not like ''%'+ALogName+'%''');
        SQL.Append(') ');
        SQL.Append(AOrderSQL);
        Open;
      end;
    end;
    客户端:
    TSocketConnect 控件一个gScktConnect
    TClientDataset一个。
    函数refreshview 刷新数据:
    begin
      gScktConnect.Connected = true;
      ClientDataSet1
      gScktConnect.AppServer.OpenDataset1(gPersonCode,CreateSortOrderSQL(DBGrid1));
      ClientDataSet1.Open;
      gScktConnect.Connected = false;
    end;
      

  7.   

    begin
      gScktConnect.Connected = true;
      ClientDataSet1  这一句??
      gScktConnect.AppServer.OpenDataset1(gPersonCode,CreateSortOrderSQL(DBGrid1));
      ClientDataSet1.Open;
      gScktConnect.Connected = false;
    end;你不用你自定义的接口,直接从客户端发出sql语句,应该没有问题,
      

  8.   

    to :daijingjie2002(艰苦创业):
    ClientDataSet1  这一句?? clientDataset.Close;直接发SQL,我也做了,也不行。
      

  9.   

    你这样试试吧,上面哪个clientDataset.Close;就不要了,我一直是这样做的, 不行再看看吧
    gScktConnect.Connected = true;
    gScktConnect.AppServer.OpenDataset1(gPersonCode,CreateSortOrderSQL(DBGrid1));
      ClientDataSet1.close;
      ClientDataSet1.Open;
    //对返回的数据集处理
    gScktConnect.Connected = false;
      

  10.   

    to  daijingjie2002(艰苦创业),如果不在中间层定义接口,你认为三层还有意义吗?跟CS结构有什么区别?还多了一个中间层,岂不是多次一举?个人认为,中间层定义也是三层的重体现之一。
      

  11.   

    建议用LISTVIEW或STRINGGRID来解决数据浏览问题吧,为什么一顶要用DBGRID?多写几句代码又不会死
      

  12.   

    zdq801104(【☆我很笨,但是我不傻!☆】) :
    这个问题与DBGrid显示有关?