|
有多个模块保存速度很慢,
在测试上没有问题,保存速度都是0-1秒,
更新到正式服务器后查询速度没影响,但是保存速度特别慢,一般在15秒左右,
如果说是正式服务器的问题,但是有些模块又没有问题。
请帮我分析下可能的原因。
下面是保存速度慢的某一个模块的保存代码:
procedure TGENERATE_CITIBANK_CHEQUE_TXT.Button_SaveClick(Sender: TObject);
var
i,j:integer;//i:新增记录条数,j:修改记录条数;
lDataSet:TCloneDataSet;
sBatch_no,temp,sFLOW_NO :string;
begin
if PAY_CHEQUE_DT.DataSet.Active and ( not PAY_CHEQUE_DT.DataSet.IsEmpty ) then
begin
i:=0;
j:=0;
PAY_CHEQUE_DT.DataSet.Edit;
PAY_CHEQUE_DT.DataSet.Post;
lDataSet:=TCloneDataSet.Create(nil);
try
lDataSet.CloneCursor(PAY_CHEQUE_DT.DataSet,false,true,false);
lDataSet.First;
while not lDataSet.Eof do
begin
if ( not ((lDataSet.FieldByName('Ref_No').AsString='') and (lDataSet.FieldByName('PAY_DATE').AsString='') and (lDataSet.FieldByName('PAY_AMT').AsString=''))) and
( ( lDataSet.FieldByName('Ref_No').AsString='') or ( lDataSet.FieldByName('PAY_DATE').AsString='' ) or ( lDataSet.FieldByName('PAY_AMT').AsString='')) then
begin
if temp ='' then temp := lDataSet.FieldByName('INV_NO').AsString else temp := temp + ','+ lDataSet.FieldByName('INV_NO').AsString;
end;
lDataSet.Next;
end;
if temp <>'' then
begin
Jsdialogs.ShowMsg('Inv No in '+'【'+ temp + '】'+' was not completed,Please check it before operated!','');
SysUtils.Abort;
end
else
begin
lDataSet.Last;
while not lDataSet.Bof do
begin
if (lDataSet.FieldByName('Ref_No').AsString<>'' ) and ( lDataSet.FieldByName('PAY_DATE').AsString<>'' ) and ( lDataSet.FieldByName('PAY_AMT').AsString<>'') then
begin
if (lDataSet.FieldByName('BATCH_NO').AsString='') then
begin
if ( i=0 ) then
begin
Query.Close;
Query.CommandText:='SELECT BF_PAY_BATCH_SEQ.NEXTVAL AS BATCH_NO FROM DUAL';
Query.Open;
sBATCH_NO:= Query.FieldByName('BATCH_NO').AsString;
end;
Query.Close;
Query.CommandText:='SELECT BF_PAY_CHEQUE_SEQ.NEXTVAL AS FLOW_NO FROM DUAL';
Query.Open;
sFLOW_NO:= Query.FieldByName('FLOW_NO').AsString;
Query.Close;
Query.CommandText := 'insert into BF_PAY_CHEQUE (FLOW_NO,VENDOR_NO,VENDOR_NAME,INV_NO,CUR,INVDATE,DUEDATE,INVAMT,INVOUTAMT,SERIALCOLUMN,REF_NO,PAY_DATE,PAY_AMT,CITI_BANK_NO,DELIVERY_METHOD,PAY_STATUS,TXT_STATUS,STATUS,FILLER,FILL_DATE,MAIL_ADDR1,MAIL_ADDR2,MAIL_ADDR3,MAIL_ADDR4,MAIL_ADDR5,BATCH_NO) values ('''+sFLOW_NO+''','''
+lDataSet.FieldByName('VENDOR').AsString+''','''+lDataSet.FieldByName('VNAME').AsString+''','''+lDataSet.FieldByName('INV_NO').AsString+''','''+lDataSet.FieldByName('CUR').AsString+''','''
+lDataSet.FieldByName('INVDATE').AsString+''','''+lDataSet.FieldByName('DUEDATE').AsString+''','''+lDataSet.FieldByName('INVAMT').AsString+''','''+lDataSet.FieldByName('INVOUTAMT').AsString+''','''
+lDataSet.FieldByName('SERIALCOLUMN').AsString+''','''+SYSutils.StringReplace(lDataSet.FieldByName('Ref_No').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''','''+lDataSet.FieldByName('PAY_DATE').AsString+''','''+lDataSet.FieldByName('PAY_AMT').AsString+''','''
+lDataSet.FieldByName('CITI_BANK_NO').AsString+''','''+lDataSet.FieldByName('DELIVERY_METHOD').AsString+''',0,0,1,'''+Variants.VarToStr(sLOGIN_USER_ID.Value)+''',sysdate,'''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR1').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])
+''','''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR2').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''','''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR3').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])
+''','''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR4').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''','''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR5').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''','''+sBATCH_NO+''')';
Query.Execute;
lDataSet.Edit;
lDataSet.FieldByName('FLOW_NO').AsString:=sFLOW_NO;
lDataSet.FieldByName('BATCH_NO').AsString:=sBATCH_NO;
lDataSet.FieldByName('FILLER').AsString:=Variants.VarToStr(sLOGIN_USER_ID.Value);
lDataSet.FieldByName('FILL_DATE').AsString:= SysUtils.DateToStr(SysUtils.Now);
i:=i+1;
end
else
begin
Query.Close;
Query.CommandText:=' SELECT B.REF_NO,B.PAY_DATE,B.PAY_AMT,B.CITI_BANK_NO,B.DELIVERY_METHOD,B.MAIL_ADDR1,B.MAIL_ADDR2,B.MAIL_ADDR3,B.MAIL_ADDR4,B.MAIL_ADDR5 FROM BF_PAY_CHEQUE B WHERE B.INV_NO= '''+lDataSet.FieldByName('INV_NO').AsString+''' AND STATUS=1 AND PAY_STATUS=''0'' ';
Query.Open;
if (SysUtils.Trim(lDataSet.FieldByName('REF_NO').AsString) <> SysUtils.Trim(Query.FieldByName('REF_NO').AsString)) or (lDataSet.FieldByName('PAY_DATE').AsString <> Query.FieldByName('PAY_DATE').AsString) or (lDataSet.FieldByName('PAY_AMT').AsString <> Query.FieldByName('PAY_AMT').AsString) or
(SysUtils.Trim(lDataSet.FieldByName('CITI_BANK_NO').AsString) <> SysUtils.Trim(Query.FieldByName('CITI_BANK_NO').AsString)) or (SysUtils.Trim(lDataSet.FieldByName('DELIVERY_METHOD').AsString) <> SysUtils.Trim(Query.FieldByName('DELIVERY_METHOD').AsString )) or
(SysUtils.Trim(lDataSet.FieldByName('MAIL_ADDR1').AsString) <> SysUtils.Trim(Query.FieldByName('MAIL_ADDR1').AsString)) or (SysUtils.Trim(lDataSet.FieldByName('MAIL_ADDR2').AsString) <> SysUtils.Trim(Query.FieldByName('MAIL_ADDR2').AsString)) or
(SysUtils.Trim(lDataSet.FieldByName('MAIL_ADDR3').AsString) <> SysUtils.Trim(Query.FieldByName('MAIL_ADDR3').AsString)) or (SysUtils.Trim(lDataSet.FieldByName('MAIL_ADDR4').AsString) <> SysUtils.Trim(Query.FieldByName('MAIL_ADDR4').AsString)) or
(SysUtils.Trim(lDataSet.FieldByName('MAIL_ADDR5').AsString) <> SysUtils.Trim(Query.FieldByName('MAIL_ADDR5').AsString)) then
begin
Query.Close;
Query.CommandText := 'update BF_PAY_CHEQUE set REF_NO ='''+SYSutils.StringReplace(lDataSet.FieldByName('Ref_No').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''',PAY_DATE='''+lDataSet.FieldByName('PAY_DATE').AsString+''',PAY_AMT='''+lDataSet.FieldByName('PAY_AMT').AsString
+''',CITI_BANK_NO='''+lDataSet.FieldByName('CITI_BANK_NO').AsString+''',DELIVERY_METHOD='''+lDataSet.FieldByName('DELIVERY_METHOD').AsString+''',UPD_PERSON='''+Variants.VarToStr(sLOGIN_USER_ID.Value)
+''',MAIL_ADDR1='''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR1').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''',MAIL_ADDR2='''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR2').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''',MAIL_ADDR3='''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR3').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])
+''',MAIL_ADDR4='''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR4').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''',MAIL_ADDR5='''+SYSutils.StringReplace(lDataSet.FieldByName('MAIL_ADDR5').AsString,'''','''''',[TReplaceFlagsEnum.rfReplaceAll])+''',UPD_DATE=sysdate where FLOW_NO='''+lDataSet.FieldByName('FLOW_NO').AsString+''' ';
Query.Execute;
lDataSet.Edit;
lDataSet.FieldByName('UPD_PERSON').AsString:=Variants.VarToStr(sLOGIN_USER_ID.Value);
lDataSet.FieldByName('UPD_DATE').AsString:= SysUtils.DateToStr(SysUtils.Now);
j:=j+1;
end;
end;
end;
lDataSet.Prior;
end;
if (i+j)<>0 then
begin
JsDialogs.ShowMsg('Update success!','');
PAY_QUERY_DT.DataSet.FieldByName('BATCH_NO').AsString:= sBATCH_NO;
end
else JsDialogs.ShowMsg('No data change!','');
end;
finally
lDataSet.Free;
end;
if PageControl.ActivePage = TabSheet_Diary then
PageControl.ActivePage := TabSheet_master;
end
else JsDialogs.ShowMsg('No data!','');
S_STATUS:=1;
end;
只是在数据库做了insert 和 update的操作!
测试上处理几十条数据速度也不会超过2秒,
更新到正式至少要15秒的时间。 |
|