我用delphi6.0开发一个前台售票系统,后台是用sqlserver2000.前台售票系统很繁忙,24小时运转,但现在存在几个问题。前台运行一段时间后,整个售票系统会变慢小来,有时候输入一个金额的数字,都好象很慢,还有上面显示的时间也会慢慢和当前时间对不上,有时慢十分钟左右.请问这是什么问题。(我时间显示是用定时器Timer1来刷新的,我每次保存数据前都有ping 一下服务器看其是否网络通的,然后也反映在当前画面是否是联机)分不够可以再加

解决方案 »

  1.   

    内存泄露在那里呢,我是这样,我没每次创建了数据库连接了,我是在开机就创建连接了
    我里面的步骤是这样的,想用api的那个ping主机的函数去ping一下,看网络是否和服务器是通的
    否则数据就存到本地,如果网络是通的,就开启数据的事物(ADOConnection1.BeginTrans)--》数据库操作-->提交事物(ADOConnection1.CommitTrans),出错就回滚事物。其他也没什么
    很奇怪,我怀疑是不是事物占用资源了
      

  2.   

    “api的那个ping主机的函数”叫什么?学习一下
      

  3.   

    function PingIP:Boolean;
    var
       IPOpt:TIPOptionInformation;// IP Options for packet to send
       FIPAddress:DWORD;
       pReqData,pRevData:PChar;
       pIPE:PIcmpEchoReply;       // ICMP Echo reply buffer
       FSize: DWORD;
       MyString:string;
       FTimeOut:DWORD;
       BufferSize:DWORD;begin
         result:=false;
         if ServerIP='' then exit;     FIPAddress := inet_addr(PChar(ServerIp));
         FSize := 40;
         BufferSize := SizeOf(TICMPEchoReply) + FSize;
         GetMem(pRevData,FSize);
         GetMem(pIPE,BufferSize);
         FillChar(pIPE^, SizeOf(pIPE^), 0);
         pIPE^.Data := pRevData;
         MyString := 'Hello';
         pReqData := PChar(MyString);
         FillChar(IPOpt, Sizeof(IPOpt), 0);
         IPOpt.TTL :=64;
         FTimeOut := 300;   //1000
         IcmpSendEcho(hICMP, FIPAddress, pReqData,
              Length(MyString), @IPOpt, pIPE, BufferSize, FTimeOut);
         try
           if pReqData^ = pIPE^.Options.OptionsData^ then
           begin
                 if not Conn then
                 begin
                   DM1.ADOConnection2.CLose;
                   DM1.ADOConnection2.ConnectionString:=
                          Format(sSQLConnectionString,[readReg('SQLPassword'),
                          readReg('SQLUserName'),readReg('SQLDB'),readReg('SQLServerName')]);               DM1.ADOConnection2.LoginPrompt:=false;
                   DM1.ADOConnection2.ConnectionTimeout:=15;
                   DM1.ADOConnection2.Connected:=True;
                   Conn:=true;
                   Pos_main2Frm.sCurOperator:='请按F4及时提交离线数据';             end;
                 result:=true;
           end;     except
              Conn:=false;
         end;
         FreeMem(pRevData);
         FreeMem(pIPE);
    end;
      

  4.   

    看看内存和CPU的使用率
    是不是占用的内存没有及时释放。
      

  5.   

    这种情况一个月出现几次?
    我也出现过,以前这种情况一天出现一次,先在好了,一月一次。可能是from太多了,后来改了,改成只有一个MAIN FROM,其他FROM出现的时候临时CREATE,用完后马上释放。但一月一次频率也挺高的,还在查找原因中
      

  6.   

    这种情况,有的点好一些,使用比较长,我用的是win98的系统,但有的点不行,两三天,我也没什么form啊,只有一个form显示了,以前有一些query执行后没close;
    现在都close了,看看了。