说说我的环境
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;
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;
可能是驱动有问题
Dbexpress对mysql的支持不是很好
你试一试最新版本的驱动看看