procedure TForm1.Button2Click(Sender: TObject);
var
pwh,k:String;
begin
adoquery1.Active :=true;
adoquery2.Active :=true;
adoquery3_pwb.Active :=true;
  k:='2006-1';
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select * from pw where 状态=:t_jt');
  adoquery1.Parameters.ParamValues['t_jt']:='出租中';
  adoquery1.Open ;
  adoquery1.First;  ShowMessage(inttostr(ADOQuery1.RecordCount));
  while  not adoquery1.Eof do
     begin
       //  if (adoquery1.FieldByName('出租日期').AsDateTime <date) and (adoquery1.FieldByName('状态').AsString ='出租中') then
        //   if (adoquery1.FieldByName('状态').AsString ='出租中') then
            //  begin                  pwh:=adoquery1.FieldValues['铺位号'];
                  adoquery2.Close;
                  adoquery2.SQL.Clear;
                  adoquery2.SQL.Add('select 铺位号,交费月份2,客户号 from dh2 where 铺位号='''+pwh+''' and 交费月份2=:dat and 客户号=:t_kh');
                  adoquery2.Parameters.ParamValues['t_kh']:=adoquery1.FieldValues['客户号'];
                  adoquery2.Parameters.ParamValues['dat']:=k;
                  adoquery2.Open;
                  if adoquery2.RecordCount=0 then
                      begin
                        //把它放到临界BWB表中.
                         
                         adoquery3_pwb.Edit;
                         adoquery3_pwb.Append;
                         adoquery3_pwb.FieldByName('铺位号').AsString :=pwh;
                         adoquery3_pwb.FieldByName('客户名称').AsString :=adoquery1.FieldValues['客户名称'];
                         adoquery3_pwb.FieldByName('客户号').AsString :=adoquery1.FieldValues['客户号'];
                         adoquery3_pwb.FieldByName('费用收取总数').AsString :=adoquery1.FieldValues['费用收取总数'];
                         if  not adoquery1.FieldByName('状态').IsNull then
                         adoquery3_pwb.FieldByName('状态').AsString :=adoquery1.FieldValues['状态'];
                         if   not adoquery1.FieldByName('面积').IsNull then
                         adoquery3_pwb.FieldByName('面积').AsString :=adoquery1.FieldValues['面积'];
                         if   not adoquery1.FieldByName('位置').IsNull then
                         adoquery3_pwb.FieldByName('位置').AsString :=adoquery1.FieldValues['位置'];
                         if   not adoquery1.FieldByName('用途').IsNull then
                         adoquery3_pwb.FieldByName('用途').AsString :=adoquery1.FieldValues['用途'];
                         if  not  adoquery1.FieldByName('出租日期').IsNull then
                         adoquery3_pwb.FieldByName('出租日期').AsString :=adoquery1.FieldValues['出租日期'];
                         if   not adoquery1.FieldByName('到期日期').IsNull then
                         adoquery3_pwb.FieldByName('到期日期').AsString :=adoquery1.FieldValues['到期日期'];
                         if  not  adoquery1.FieldByName('备注').IsNull then
                         adoquery3_pwb.FieldByName('备注').AsString :=adoquery1.FieldValues['备注'];
                      end;
             //  end ;
       adoquery1.Next;
     end;
adoquery3_pwb.Post;
ShowMessage('ok');
 //如果查不到铺位出租.就提示
 if ADOQuery3_pwb.RecordCount=0 then
  ShowMessage('没有铺位在出租状态或该月份所有铺位已交租');end;***********从ADO1中查ADO2中没有的,如果ADO2中没有的,就把ADO1付给ADO3,但这循环速度好慢,有什么办法解实?

解决方案 »

  1.   

    看了楼主的代码,我试图用向条SQL语句,但不能完成,建议你再优化一下代码
     adoquery1.SQL.Add('select * from pw where 状态=:t_jt');
      adoquery1.Parameters.ParamValues['t_jt']:='出租中';
         //  if (adoquery1.FieldByName('出租日期').AsDateTime <date) and (adoquery1.FieldByName('状态').AsString ='出租中') then
            //   if (adoquery1.FieldByName('状态').AsString ='出租中') then
    这些代码用一条select 语句即可完成,没有判断,执行速度会快很多
    adoquery1.SQL.Add('select * from pw where 状态=''出租中'' and 出租日期=getdate()');所有的
    if  not adoquery1.FieldByName('状态').IsNull then
       adoquery3_pwb.FieldByName('状态').AsString :=adoquery1.FieldValues['状态'];
    都可以用
       adoquery3_pwb.FieldByName('状态').AsString :=adoquery1.Fieldbyname('状态').asstring;//无需判断这两句是有区别的,只需一句即可
    adoquery3_pwb.Edit;   //修改当前记录    
    adoquery3_pwb.Append; //新增记录if adoquery2.RecordCount=0 then
       begin
         中的主体部分可以用insert pw (字段名) values (值)来执行,效率更高