query.first;
while not query.eof do
begin
stringgrid.cell[i,j]:=query.fieldbyname().asstring;
i=i+1;
query.next;
end;

解决方案 »

  1.   

    呵呵,好懒啊,那不如用DBGRID拉
      

  2.   

    如果没什么格式严格的要求,我建议你连接EXCEL,把数据写入EXCEL,然后打印。
      

  3.   

    2、
    procedure PrintGrid(sGrid: TStringGrid; sTitle: String);
    var
     X1, X2 : Integer;
     Y1, Y2 : Integer;
     TmpI   : Integer;
     F      : Integer;
     TR     : TRect;
    begin
     Printer.Title:=sTitle;
     Printer.BeginDoc;
     Printer.Canvas.Pen.Color:=0;
     Printer.Canvas.Font.Name:='Times New Roman';
     Printer.Canvas.Font.Size:=12;
     Printer.Canvas.Font.Style:=[fsBold, fsUnderline];
     Printer.Canvas.TextOut(0, 100, Printer.Title);
     For F:=1 to sGrid.ColCount-1 do begin
       X1:=0;
       For TmpI:=1 to (F-1) do
         X1:=X1+5*(sGrid.ColWidths[TmpI]);
       Y1:=300;
       X2:=0;
       For TmpI:=1 to F do
         X2:=X2+5*(sGrid.ColWidths[TmpI]);
       Y2:=450;
       TR:=Rect(X1, Y1, X2-30, Y2);
       Printer.Canvas.Font.Style:=[fsBold];
       Printer.Canvas.Font.Size:=7;
       Printer.Canvas.TextRect(TR, X1+50, 350, sGrid.Cells[F, 0]);
       Printer.Canvas.Font.Style:=[];
       For TmpI:=1 to sGrid.RowCount-1 do begin
         Y1:=150*TmpI+300;
         Y2:=150*(TmpI+1)+300;
         TR:=Rect(X1, Y1, X2-30, Y2);
         Printer.Canvas.TextRect(TR, X1+50, Y1+50, sGrid.Cells[F, TmpI]);
       end;
     end;
     Printer.EndDoc;
    end;
     
      

  4.   

    使用方法:
    1、使用ado检索数据库,把检索结果通过stringgrid来显示。
    代码如下:
     with stringgrid1 do
      begin
        rowcount := 2;
        rows[1].clear;
        try
          with DataModule1.adoquery1 do
          begin
            close;
            sql.clear;
            sql.add('select * from log_tab where op_time between :date1 and :date2');
    sql.add(' order by op_time');
            parameters.parambyname('date1').value := datetimepicker1.date;
            parameters.parambyname('date2').value := datetimepicker2.date;
            open;
            while not eof do
            begin
              cells[0, rowcount - 1] := fieldbyname('operate').asstring;
              cells[1, rowcount - 1] := fieldbyname('runner').asstring;
              cells[2, rowcount - 1] := fieldbyname('info').asstring;
              cells[3, rowcount - 1] := fieldbyname('op_time').asstring;
              rowcount := rowcount + 1;
              rows[rowcount - 1].clear;
              next;
            end;
            close;
          end;
        except
          application.MessageBox('检索数据库出错,请检查!', '提示', 0 + mb_iconinformation);
          exit;
        end;
        rowcount := rowcount + 1;
        rows[rowcount - 1].clear;
        cells[0, rowcount - 1] := '合计';
        cells[1, rowcount - 1] := inttostr(rowcount - 3);
        rowcount := rowcount + 1;
        rows[rowcount - 1].clear;
      end;2、新建一窗口,使用quickreport来布置打印位置。
      注意:stringgrid的数据要在quickreport的onneeddate事件中读取。
    3、有问题可发短信息给我。
      

  5.   


    其实如果是这样的话,最终还是要建立一个QuickReport来实现打印的
    那如果用DBGrid来显示有什么不同呢?还是说DBGrid与QuickReport的连接不好?
    另:
    (不好意思,问题多了一点)
    在显示的时候,我以查询实现显示如何做呢?
    比如EDit框中输入英语系,点击Button以后显示的是库表中英语系的全部信息