我的程序在运行的过程中时而出现一个错误提示:   "list index out of bounds(1)"    有时不出现,,,,这是什么原因呀?
procedure Tgocomegl_w.Button2Click(Sender: TObject);
var
 qs,zz,qishi,qc,qichu,nianchu,w1,w2,total_fangxiangY,total_fangxiang1,total_fangxiang2,dm1,dm2,dm3,dm4:string;
 total_jiefang,total_daifang,total_jiefangtotal,total_daifangtotal,total_nianchu,total_qichu,total_qimo,total_nianchu1,total_qichu1,total_qimo1,total_nianchu2,total_qichu2,total_qimo2:Real;
begin
//先求出"期初日期"及"起始终止日期";
share_w.sql('select * from zhangtaoku where bianma='+hsdwbianma);
qc:=''''+datetimetostr(share_w.Adoquery1.fieldbyname('start_date').asdatetime)+'''';
nc:=''''+inttostr(SpinEdit1.value)+'-01-01'+'''';
qs:=''''+copy(datetimetostr(DateTimePicker1.date),1,10)+'''';
zz:=''''+copy(datetimetostr(DateTimePicker2.date),1,10)+'''';
qichu:=datetimetostr(share_w.Adoquery1.fieldbyname('start_date').asdatetime);
nianchu:=inttostr(SpinEdit1.value)+'-01-01';
qishi:=copy(datetimetostr(DateTimePicker1.date),1,10);
//判断qs是否大于qc;
if qishi<=qichu then exit;
//动态生成临时汇总库(gocomezhangTotalku_ls);
ADOStoredProc2.Active :=false;
ADOStoredProc2.ProcedureName:='gocometotalku_ls_p;1';
ADOStoredProc2.ExecProc;  
if qichu>nianchu then  //会计起始日期>年初日期;
  begin
    //插入置换年初数据;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,fangxiang_nc,yue_nc,jiefang_nc,daifang_nc) select kemudm,''平'',0,0,0 from '+gocomeqichuku+' where kemudm like '''+fatherkemudm+'%''');
    //插入置换期初数据.1;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_qc,daifang_qc) select kemudm,jiefang,daifang from '+gocomeqichuku+' where kemudm like '''+fatherkemudm+'%''');
    //插入置换期初数据.2;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_qc,daifang_qc) select kemudm,jiefang,daifang from '+pingzhenku+' where pzdate>='+qc+' and pzdate<'+qs+' and kemudm like '''+fatherkemudm+'%''');
     //插入置换本期数据;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_bq,daifang_bq) select kemudm,jiefang,daifang from '+pingzhenku+' where pzdate>='+qs+' and pzdate<'+zz+' and kemudm like '''+fatherkemudm+'%''');
     //插入置换本期汇总数据;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefangtotal_bq,daifangtotal_bq) select kemudm,jiefang,daifang from '+pingzhenku+' where pzdate>='+nc+' and pzdate<'+zz+' and kemudm like '''+fatherkemudm+'%''');
  end;
if qichu<=nianchu then  //会计起始日期<年初日期;
  begin
    //插入置换年初数据.1;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_nc,daifang_nc) select kemudm,jiefang,daifang from '+gocomeqichuku+' where kemudm like '''+fatherkemudm+'%''');
    //插入置换年初数据.2;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_nc,daifang_nc) select kemudm,jiefang,daifang from '+pingzhenku+' where pzdate>='+qc+' and pzdate<'+nc+' and kemudm like '''+fatherkemudm+'%''');
    //插入置换期初数据.1;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_qc,daifang_qc) select kemudm,jiefang,daifang from '+gocomeqichuku+' where kemudm like '''+fatherkemudm+'%''');
    //插入置换期初数据.2;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_qc,daifang_qc) select kemudm,jiefang,daifang from '+pingzhenku+' where pzdate>='+qc+' and pzdate<'+qs+' and kemudm like '''+fatherkemudm+'%''');
     //插入置换本期数据;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefang_bq,daifang_bq) select kemudm,jiefang,daifang from '+pingzhenku+' where pzdate>='+qs+' and pzdate<'+zz+' and kemudm like '''+fatherkemudm+'%''');
     //插入置换本期汇总数据;
    share_w.SQL('insert into gocomezhangTotalku_ls'+'(kemudm,jiefangtotal_bq,daifangtotal_bq) select kemudm,jiefang,daifang from '+pingzhenku+' where pzdate>='+nc+' and pzdate<'+zz+' and kemudm like '''+fatherkemudm+'%''');
  end;//将gocomezhangTotalku_ls的null变0;
share_w.SQL('update gocomezhangTotalku_ls set jiefang_nc=0 where jiefang_nc is null');
share_w.SQL('update gocomezhangTotalku_ls set daifang_nc=0 where daifang_nc is null');
share_w.SQL('update gocomezhangTotalku_ls set yue_nc=0 where yue_nc is null');
share_w.SQL('update gocomezhangTotalku_ls set jiefang_qc=0 where jiefang_qc is null');
share_w.SQL('update gocomezhangTotalku_ls set daifang_qc=0 where daifang_qc is null');
share_w.SQL('update gocomezhangTotalku_ls set yue_qc=0 where yue_qc is null');
share_w.SQL('update gocomezhangTotalku_ls set jiefang_bq=0 where jiefang_bq is null');
share_w.SQL('update gocomezhangTotalku_ls set daifang_bq=0 where daifang_bq is null');
share_w.SQL('update gocomezhangTotalku_ls set jiefangtotal_bq=0 where jiefangtotal_bq is null');
share_w.SQL('update gocomezhangTotalku_ls set daifangtotal_bq=0 where daifangtotal_bq is null');
share_w.SQL('update gocomezhangTotalku_ls set yue_qm=0 where yue_qm is null');//汇总生成gocomezhangTotalku+bianma;
ADOStoredProc1.Active :=false;
ADOStoredProc1.ProcedureName:='gocometotalku_p;1';
ADOStoredProc1.Parameters[1].Value:=bl_gonghao;
ADOStoredProc1.ExecProc;
dm1:='select max(kemudm) as kemudm,max(name) as name,max(fangxiang_nc) as fangxiang_nc,sum(jiefang_nc) as jiefang_nc,sum(daifang_nc) as daifang_nc,sum(yue_nc) as yue_nc,max(fangxiang_qc) as fangxiang_qc,sum(jiefang_qc) as jiefang_qc,';
dm2:='sum(daifang_qc) as daifang_qc,sum(yue_qc) as yue_qc,sum(jiefang_bq) as jiefang_bq,sum(jiefangtotal_bq) as jiefangtotal_bq,sum(daifang_bq) as daifang_bq,';
dm3:='sum(daifangtotal_bq) as daifangtotal_bq,max(fangxiang_qm) as fangxiang_qm,sum(yue_qm) as yue_qm into gocometotalku_'+bl_gonghao+' from gocomezhangtotalku_ls group by kemudm';
share_w.ADOQuery1.Close;
share_w.ADOQuery1.SQL.Clear ;
share_w.ADOQuery1.sql.Add(dm1+dm2+dm3);
share_w.ADOQuery1.ExecSQL;
//加一字段;
share_w.sql('alter table gocometotalku_'+bl_gonghao+' add ID int IDENTITY (1, 1) NOT NULL');
//置换yue_nc及fangxiang_nc;
dm1:='update gocometotalku_'+bl_gonghao+' set fangxiang_nc=(case when daifang_nc>jiefang_nc then ''贷'' when daifang_nc<jiefang_nc then ''借'' else ''平'' end)';
dm2:=',yue_nc=(case when daifang_nc>jiefang_nc then daifang_nc-jiefang_nc when daifang_nc<jiefang_nc then jiefang_nc-daifang_nc else 0 end)';
share_w.SQL(dm1+dm2);
//置换yue_qc及fangxiang_qc;
dm1:='update gocometotalku_'+bl_gonghao+' set fangxiang_qc=(case when daifang_qc>jiefang_qc then ''贷'' when daifang_qc<jiefang_qc then ''借'' else ''平'' end)';
dm2:=',yue_qc=(case when daifang_qc>jiefang_qc then daifang_qc-jiefang_qc when daifang_qc<jiefang_qc then jiefang_qc-daifang_qc else 0 end)';
share_w.SQL(dm1+dm2);
//置换yue_qm及fangxiang_qm;
dm1:='update gocometotalku_'+bl_gonghao+' set fangxiang_qm=(case when (daifang_bq+daifang_qc)>(jiefang_bq+jiefang_qc) then ''贷'' when (daifang_bq+daifang_qc)<(jiefang_bq+jiefang_qc) then ''借'' else ''平'' end)';
dm2:=',yue_qm=(case when (daifang_bq+daifang_qc)>(jiefang_bq+jiefang_qc) then daifang_bq+daifang_qc-(jiefang_bq+jiefang_qc) when (daifang_bq+daifang_qc)<(jiefang_bq+jiefang_qc) then jiefang_bq+jiefang_qc-(daifang_bq+daifang_qc) else 0 end)';
share_w.SQL(dm1+dm2);//置换gocometotalku_bl_gonghao中的name;
share_w.SQL('update gocometotalku_'+bl_gonghao+' set name='+kemuku+'.name from gocometotalku_'+bl_gonghao+','+kemuku+' where gocometotalku_'+bl_gonghao+'.kemudm='+kemuku+'.ID_T');end;