在DBGRID中有QRY1查出来的数据。
我想在底下加一个EDIT1显示总行数。
procedure TForm3.btn3Click(Sender: TObject);
 var
   s,b:string;
begin
 s:='SELECT CMSMC.MC002,INVMC.MC002,INVMB.MB001,INVMB.MB002,INVMB.MB003,INVMC.MC007,INVMB.MB004,INVMB.MB109 FROM INVMB,INVMC,CMSMC WHERE '+
      'INVMC.MC002=CMSMC.MC001 AND INVMB.MB001=INVMC.MC001 AND '+
      'INVMC.MC007>0 AND INVMC.MC002='+''''+Trim(edt1.text)+''''+'ORDER BY INVMB.MB001 ASC';
  b:='SELECT COUNT(MB001)FROM INVMB,INVMC WHERE INVMB.MB001=INVMC.MC001 AND '+
      'INVMC.MC007>0 AND INVMC.MC002='+''''+Trim(edt1.text)+'''';
  with qry1 do
  begin
    Close;
    sql.Clear;
    SQL.Add(s);
    Open;
  end;
with qry2 do
  begin
    Close;
    sql.Clear;
    SQL.Add(b);
    Open;
edt2.Text:=qry2.fieldbyname('COUNT(MB001)').asstring;//运行时候提示这句有问题。如果在DBGRID中每行前面加序号每增一行就自动增一个序号如001 002 又应该怎么样做呢?

解决方案 »

  1.   

    edt2.Text:=inttostr(qry2.recordcount);adoquery1.RecNo
      

  2.   

    b,qry2是多余的,直接使用qry1即可
    edt2.Text:=IntToStr(qry1.Recordcount);增加序号,在增加过程中,如NewRecord事件写代码,
    这是从1开始,前面要加几个0,变成001,002,003...自己处理一下吧
    With qry1 do
    FieldByName('ID').AsInteger:=Recordcount+1;
      

  3.   

    不用循环的,这样就可以:
    qry2.first;
    edt2.Text:=inttostr(qry2.recordcount);
    qry2.last;
      

  4.   

    好像写反了,似乎是:
    qry2.last;
    edt2.Text:=inttostr(qry2.recordcount);
    qry2.first;
      

  5.   

    qry1的CalcFields事件中加上,编写简单代码就可以完成
      

  6.   

    'SELECT '+StrtoInt(Edt2.Text)+' as CountCMSMC.MC002,....'这样行不行?