procedure Tputout.Readputout;
var
 I:integer;
begin
 if ptcode='' then
    begin
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Text:='select 编号,日期,单位,类别,经手,做单,备注,金额 from putout ';
    ADOQuery2.Open;
    ADOQuery2.Last;
    Datetimepicker1.DateTime:=ADOQuery2.FieldByName('日期').asdatetime;
    Combobox1.Style:=csDropDown;
    Combobox1.Text:=ADOQuery2.fieldbyname('单位').asstring;
    Combobox2.Style:=csDropDown;
    Combobox2.Text:=ADOQuery2.fieldbyname('类别').asstring;
    Combobox3.Style:=csDropDown;
    Combobox3.Text:=ADOQuery2.fieldbyname('经手').asstring;
    Edit1.Text:=ADOQuery2.fieldbyname('备注').asstring;
    Label11.Caption:=ADOQuery2.fieldbyname('编号').asstring;
    Label12.Caption:=ADOQuery2.fieldbyname('金额').asstring;
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Text:='select 编码,名称,规格,单位,单价,数量,金额,备注 from putoutdl where 编号='''+Label11.Caption+'''';
    ADOQuery1.Open;
    with ADoQuery1  do
     begin
      StringGrid1.RowCount:=ADoQuery1.RecordCount+1;
      //StringGrid1.ColCount:=ADOQuery1.Fields.Count+1;
      while not Eof do
       begin
        for i:=1 to StringGrid1.RowCount do
         begin
          stringgrid1.Cells[0,i]:=inttostr(i);
          stringgrid1.cells[1,i]:=ADOQuery1.Fields[0].AsString ;
          stringgrid1.cells[2,i]:=ADOQuery1.Fields[1].AsString ;
          stringgrid1.cells[3,i]:=ADOQuery1.Fields[2].AsString ;
          stringgrid1.cells[4,i]:=ADOQuery1.Fields[3].AsString ;
          stringgrid1.cells[5,i]:=formatfloat('0.00',strtofloat(ADOQuery1.Fields[4].AsString));
          stringgrid1.cells[6,i]:=ADOQuery1.Fields[5].AsString;
          stringgrid1.cells[7,i]:=formatfloat('0.00',strtofloat(ADOQuery1.Fields[6].AsString));
          stringgrid1.cells[8,i]:=ADOQuery1.Fields[7].AsString ;
          ADOQuery1.Next;
         end;
       end;
      end;
   end
这一段代码是为了,在窗口打开时读入一张入库单数据,现在问题是可以读入表头部份,明细数据读不出来(红色部分),但是如果把红色部份做一个按钮click事件来执行,就可以读出明细数据到表格中,我找了一个上午硬是没有找出问题在哪里?

解决方案 »

  1.   

    ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Text:='select 编码,名称,规格,单位,单价,数量,金额,备注 from putoutdl where 编号='''+Label11.Caption+'''';
        ADOQuery1.Open;
        with ADoQuery1  do
         begin
          StringGrid1.RowCount:=ADoQuery1.RecordCount+1;
          //StringGrid1.ColCount:=ADOQuery1.Fields.Count+1;
          while not Eof do
           begin
            for i:=1 to StringGrid1.RowCount do
             begin
              stringgrid1.Cells[0,i]:=inttostr(i);
              stringgrid1.cells[1,i]:=ADOQuery1.Fields[0].AsString ;
              stringgrid1.cells[2,i]:=ADOQuery1.Fields[1].AsString ;
              stringgrid1.cells[3,i]:=ADOQuery1.Fields[2].AsString ;
              stringgrid1.cells[4,i]:=ADOQuery1.Fields[3].AsString ;
              stringgrid1.cells[5,i]:=formatfloat('0.00',strtofloat(ADOQuery1.Fields[4].AsString));
              stringgrid1.cells[6,i]:=ADOQuery1.Fields[5].AsString;
              stringgrid1.cells[7,i]:=formatfloat('0.00',strtofloat(ADOQuery1.Fields[6].AsString));
              stringgrid1.cells[8,i]:=ADOQuery1.Fields[7].AsString ;
              ADOQuery1.Next;
             end;
           end;
    这部份可以用一个按钮CLICK事件实现 ....
      

  2.   


    ADOQuery1.Next;{问题出在这里,应该放在FOR 以外的}{
    while not Eof do
           begin
            for i:=1 to StringGrid1.RowCount do
             begin
                //.............
             end;
           ADOQuery1.Next;       end;}
      

  3.   

    ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Text:='select 编码,名称,规格,单位,单价,数量,金额,备注 from putoutdl where 编号='''+Label11.Caption+'''';
        ADOQuery1.Open;
        with ADoQuery1  do
         begin
          StringGrid1.RowCount:=ADoQuery1.RecordCount+1;
          //StringGrid1.ColCount:=ADOQuery1.Fields.Count+1;
          while not Eof do
           begin
            for i:=1 to StringGrid1.RowCount do
             begin
              stringgrid1.Cells[0,i]:=inttostr(i);
              stringgrid1.cells[1,i]:=ADOQuery1.Fields[0].AsString ;
              stringgrid1.cells[2,i]:=ADOQuery1.Fields[1].AsString ;
              stringgrid1.cells[3,i]:=ADOQuery1.Fields[2].AsString ;
              stringgrid1.cells[4,i]:=ADOQuery1.Fields[3].AsString ;
              stringgrid1.cells[5,i]:=formatfloat('0.00',strtofloat(ADOQuery1.Fields[4].AsString));
              stringgrid1.cells[6,i]:=ADOQuery1.Fields[5].AsString;
              stringgrid1.cells[7,i]:=formatfloat('0.00',strtofloat(ADOQuery1.Fields[6].AsString));
              stringgrid1.cells[8,i]:=ADOQuery1.Fields[7].AsString ;
             end;
              ADOQuery1.Next;
           end;