程序运行一两天就会关掉.
我写的这个程序不断访问数据库(读数据).
用到了三个 TIMER 控件.
每天的数据有几千个.光是我的TIMER 控件就要处理 2000个数据.
我用的DBGrid 控件显示数据库表里面的数据.我还用设置了DBGrid 每次只显示10个记录.
10个记录处理完 NEXT 下一条记录...现在我的最大的难题是 ? 我的程序为什么会关掉.??是我的TIMER 有问题?   还是 DBGrid 里面积累了太多的数据(一天就有 8000条)每次我只显示了10条朋友们帮帮我了,十万火急  !!!!!!   小弟跪求有经验的朋友赐教.也谢谢帮我UP 的朋友!

解决方案 »

  1.   

    有一点,就是它的CPU 时间比较大 00:00:46 应该是比较大了!
      

  2.   

    有没有可能第一次触发的timer事件还没有执行完,又触发下一个,最后成死循环
      

  3.   

    那是不是要把TIMER 的 INTVAL  设置为 2000 或者 5000 ???
    三个TIMER 是各干各的事.
      

  4.   

    Timer1Timer;
    Timer1.Enabled:=false;
    processData;
    Timer1.Enabled:=true;你的信息太少,无法确定问题在啊.
      

  5.   

    我把我的代码给帖出来了:(关键代码)
    procedure TForm1.Timer2Timer(Sender: TObject);
    var
            MNumber , RNumber ,R1 ,M1: string;        // Place , Num , Car , Speed , FX1 , FX2 ,
            MyJpeg , MyJpeg1 : TJPEGImage;
            MyBmp ,Bmp0 , Bmp1 : TBitMap;
            J , Speeds , NewSuport : integer;
            NewSpeed  , Middle  : String;
    begin
          CreateDirTime;
          With ADOQuery1 do
          begin
          JJNum    := FieldByName('TXTPWZ').AsString;  // 近景
          YJNum    := FieldByName('QJTPWZ').AsString;  // 远景
          CarNum   := FieldByName('HPHM').AsString;    //车牌号码
          FXNum    := FieldByName('FXBH').AsString;    //方向编号
          Speed    := FieldByName('CLSD').AsString;    //速度
          CarColor := FieldByName('HPYS').AsString;    //车的颜色
          CarTime  := FieldByName('jGSJ').AsDateTime;  //Time
          Randomize();
          J := Random(8);
          Speeds := StrToInt(Speed);
          NewSuport := Speeds - J;
          NewSpeed := IntToStr(NewSuport);
          if FXNum = '2' then
                FXNum := '1'
          else
                FXNum := '2';
          M1 := Copy(YJNum , 30 , 6);
          R1 := Copy(JJNum , 30 , 6);
          DateSeparator := '-';
          ShortDateFormat := 'yyyymmdd';
          MNumber := XHRoadNo +'_'+ FXNum +'_'+ FXNumNB +'_'+ 'A' +'_'+DateToStr(CarTime)+'_'+ M1 +'_'+ NewSpeed +'_'+ CarNum +'.jpg';
          RNumber := XHRoadNo +'_'+ FXNum +'_'+ FXNumNB +'_'+ 'B' +'_'+DateToStr(CarTime)+'_'+ R1 +'_'+ NewSpeed +'_'+ CarNum +'.jpg';      //Number := Str + '\' + Number;
          MNumber := Str1 + '\' + MNumber;
          RNumber := Str1 + '\' + RNumber;
          ReNameFile(JJNum , RNumber);
          ReNameFile(YJNum , MNumber);
          Try
            Try
                    MyJpeg := TJPEGImage.Create;
                    MyJpeg1 := TJPEGImage.Create;
                    MyBmp  := TBitmap.Create;
                    Bmp0 := TBitmap.Create;
                    Bmp1 := TBitmap.Create;                MyJpeg.LoadFromFile(MNumber);
                    MyJpeg1.LoadFromFile(RNumber);
                    MyBmp.Assign(MyJpeg);
                    Bmp0.Assign(MyJpeg1);                Bmp1.PixelFormat := Bmp0.PixelFormat;
                    Bmp1.Width := Widths;
                    Bmp1.Height := Heights;
                    Bmp1.Canvas.StretchDraw(Bounds(0,0,Bmp1.Width,Bmp1.Height),Bmp0);
                    MyBmp.Canvas.Brush.Color := clyellow;
                    MyBmp.Canvas.Font.Name := '宋体';
                    MyBmp.Canvas.Font.Size := 12;
                    MyBmp.Canvas.Font.Color := clred;
                    MyBmp.Canvas.TextOut(1 , 220 , '西环高架干将路' + '' + DateTimeToStr(CarTime)+'' + '超速' + ''+ Speed + 'Km/h');
                    MyJpeg1.Assign(Bmp1);
                    MyJpeg.Assign(MyBmp);
                    MyJpeg.SaveToFile(MNumber);
                    MyJpeg1.SaveToFile(RNumber);
            Except
            end;
            Finally
                    MyBmp.Free;
                    MyJpeg.Free;
                    Bmp0.Free;
                    Bmp1.Free;
                    MyJpeg1.Free;
            end;
            Next;
            RrushBase;
          end;
    end;
      

  6.   

    这个是指定日期及设置DBGrid的数目 及设置禁止关闭程序(不清楚是否有用?)
    procedure TForm1.Button1Click(Sender: TObject);
    begin
          ADOQuery1.Close;
          ADOQuery1.SQL.Text := 'Select * from PASSED_CAR where JGSJ >= :sd and HPHM<>''*'' and CLSD >= ''85'' and CLSD <=''160''';
          ADOQuery1.Parameters.ParamValues['sd'] := datetostr(DateTimePicker1.Date);
          ADOQuery1.Open;
          Timer2.Enabled := True;
    end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
            TStringgrid(DBGrid1).RowCount := 11;
    end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
            CanClose := False;
    end;
      

  7.   

    我也有一个程序用了2个Timer,运行超不过三天,就会出好多错误提示(同样的),因为不在电脑前看着它所以出了满屏这个对话框,估计后来耗尽了资源,最后白屏了。只好重启机。
    还有就是瑞星升级完时,我的这个程序就会被杀死掉了。
      

  8.   

    TO:moonspot(月亮黑子) 
    和你那个差不多,我估计是DBGrid  表数据太大造成的.
    SQL语句如下:ADOQuery1.SQL.Text := 'Select * from PASSED_CAR where JGSJ >= :sd and HPHM<>''*'' and CLSD >= ''85'' and CLSD <=''160'''; JGSJ >= :sd  我在想问题会不会是出在这里.
    我打算换一种方式去每天刷新数据...