说说我的环境
xp+mysql。数据库连接用的delphi+Dbexpress。现在有如下问题
大循环满足条件的记录有1500多条。现在向数据库中插入了800多条记录后报错。是不是deexpress下关于Mysql的动态连接库有问题?我把我的程序放在2000Server上执行不会有问题。
我已经查了很长时间了。还是没有解决。
不知道那位高手可以救我?程序如下。数据连接在启动的时候就已经连接上了。初步断定是在执行中数据库连接中断了。
procedure StartControl_zzfd; //增长幅度
var
  sSql, sSqlTmp, sSourceName: string;
  qryTmp, qryTmpInsert, qryTmpLastYear: TSqlQuery;
  iMax, iTddrbal, iLastTddrbal, iTdcrbal, iLastTdcrbal: int64;
  iFd, iFd1: real;
begin
  try
    qryTmp := TSqlQuery.create(application);
    qryTmp.SQLConnection := _RuleSqlConn;    qryTmpLastYear := TSqlQuery.create(application);
    qryTmpLastYear.SQLConnection := _RuleSqlConn;    qryTmpInsert := TSqlQuery.create(application);
    qryTmpInsert.SQLConnection := _RuleSqlConn;    qryTmp.Close;
    qryTmp.SQL.Clear;
    sSql := '';
    sSql := 'select a.dataid,a.subcode,a.zoneno,a.brno,a.currtype,a.repdate,a.tddrbal,' +
      ' a.tdcrbal,b.zzfd,b.zzfd1 from nfgnled a,subregulation b' +
      ' where a.subcode=b.kmdm and a.repdate=' + QuotedStr(sRqConst) +
      ' and (b.zzfd<>0 or  b.zzfd1<>0) and a.currtype=' + QuotedStr('001');
    QryTmp.SQL.Text := sSql;
    with QryTmp do
    try
      QryTmp.open;
    except
      Dolog('查询数据库错误,<QryTmp.open增长幅度>错误...........');
    end;    while not QryTmp.Eof do
    begin
      qryTmpLastYear.Close;
      qryTmpLastYear.SQL.Clear;
      sSqlTmp := '';
      sSqlTmp := 'select TDDRBAL,TDCRBAL' +
        ' from  nfgnled ' +
        ' where subcode=:subcode' +
        ' and  zoneno=:zoneno' +
        ' and brno=:brno' +
        ' and currtype=:currtype' +
        ' and repdate=:repdate';
      {sSqlTmp := 'select TDDRBAL,TDCRBAL' +
        ' from  nfgnled ' +
        ' where subcode=' + QuotedStr(qryTmp.fieldbyname('zoneno').asstring) +
        ' and  zoneno=' + qryTmp.fieldbyname('zoneno').asstring +
        ' and brno=' + qryTmp.fieldbyname('brno').asstring +
        ' and currtype=' + qryTmp.fieldbyname('currtype').asstring +
        ' and repdate=' + QuotedStr('2006-02-10'); //Get_lastEqualRq(qryTmp.fieldbyname('zzfd').asinteger);}
      qryTmpLastYear.SQL.Text := sSqlTmp;
      with QryTmpLastYear do
      begin
        ParamByName('Subcode').AsString := qryTmp.fieldbyname('subcode').asstring;
        ParamByName('zoneno').Asinteger := qryTmp.fieldbyname('zoneno').asinteger;
        ParamByName('brno').Asinteger := qryTmp.fieldbyname('brno').asinteger;
        ParamByName('currtype').AsString := qryTmp.fieldbyname('currtype').asstring;
        ParamByName('repdate').AsString := QuotedStr('2006-02-10'); //Get_lastEqualRq(qryTmp.fieldbyname('zzfd').asinteger);
        try
          QryTmpLastYear.open;
        except
          Dolog('查询数据库错误,<QryTmpLastYear.open增长幅度>错误...........');
        end;
        iTddrbal := 0;
        iLastTddrbal := 0;
        iTdcrbal := 0;
        iLastTdcrbal := 0;        iTddrbal := qryTmp.fieldbyname('tddrbal').asinteger;
        iLastTddrbal := qryTmpLastYear.fieldbyname('tddrbal').asinteger;
        iTdcrbal := qryTmp.fieldbyname('tdcrbal').asinteger;
        iLastTdcrbal := qryTmpLastYear.fieldbyname('tdcrbal').asinteger;
        if (iLastTddrbal <> 0) or (iLastTdcrbal <> 0) then
        begin
          iFd := 0;
          iFd1 := 0;
          if iLastTddrbal <> 0 then
            ifd := ((iTddrbal - iLastTddrbal) / iLastTddrbal) * 100
          else
            iFd1 := ((iTdcrbal - iLastTdcrbal) / iLastTdcrbal) * 100;
          if (iFd > qryTmp.fieldbyname('zzfd1').asinteger) or (iFd1 > qryTmp.fieldbyname('zzfd1').asinteger) then
          begin
            qryTmpInsert.Close;
            qryTmpInsert.SQL.Clear;
            sSql := '';
            sSql := 'insert into alarmrecord(AlarmTime,source,level,Description,rangeId,positionId,TypeID,NodeID,instanceName)' +
              'values(:AlarmTime,:Source,:level,:Description,:rangeId,:positonId,:TypeId,:NodeId,:instanceName)';            qryTmpInsert.SQL.Text := sSql;            //插入alarmrecord库表
            with QryTmpInsert do
            begin
              ParamByName('AlarmTime').AsString := sRqConst;
              ParamByName('Source').AsString := sSourceName;
              ParamByName('level').AsString := '1';
              ParamByName('Description').AsString := '增长幅度监控报警!';
              ParamByName('rangeId').Asinteger := qryTmp.fieldbyname('zoneno').asinteger;
              ParamByName('positonId').Asinteger := qryTmp.fieldbyname('brno').asinteger;
              ParamByName('TypeId').Asinteger := 31;
              ParamByName('NodeID').Asinteger := 0;
              ParamByName('instanceName').AsString := 'zzfd';
              try
                QryTmpInsert.ExecSQL;
                iMax := 0;
                iMax := getmax_dataid('alarmrecord'); //得到max(dataid)
                Insert_qryRelalarm(iMax, qryTmp.fieldbyname('dataId').asinteger, 'nfgnled'); //插入Relalarm库表
              except //获取信息失败,出现异常。。
                on E: Exception do
                begin
                  Dolog('数据库操作错误,<增长幅度监控报警!>错误!!!!');
                  if not _RuleSqlConn.Connected then
                  begin
                    _RuleSqlConn.Open;
                  end;
                  continue;
                end;
              end; //end try
            end;
          end;
        end;
      end;
      qryTmp.Next;
    end;
  finally
    qryTmpinsert.Free;
    qryTmpLastYear.Free;
    qryTmp.free;
  end;
end;