你是想写while not (dataModule1.ym.dataset.Eof) do
还是要把dataModule1.ym.dataset转化为了什么类型阿?
是第一种吧?

解决方案 »

  1.   

    while not (dataModule1.ym.dataset.Eof)
    //                     ~~是不是my
      

  2.   

    程序里有好几处这样的错误提示只要关连到"DataModule1.ym.DataSet"的如:(DataModule1.ym.DataSet).First;这一句错误提示还是:')' expected but identifier 'ym' found请问这是为什么?
      

  3.   

    while not TDataSet(dataModule1.ym).Eof do...
    //                    
      

  4.   

    你说说你的 (datamodule1.ym.dataset)都是些什么东西阿,什么意思阿?
      

  5.   

    //.eof必须在DataSet后面
    while not (DataModule1.ym.DataSet.Eof) do
      

  6.   

    原程序如下:
    const
      LeftBlank=1; //定义页边距,单位厘米
      RightBlank=1;
      TopBlank=1;
      BottomBlank=1;
    var
      PointX,PointY:integer;
      PointScale,PrintStep:integer;
      s:string;
      i,x,y:integer;
    begin
    //获取当前打印机的分辨率
    with Application do
    begin
    NormalizeTopMosts;
    if MessageBox('确实要打印吗?', '儿童免疫接种管理系统',MB_OKCANCEL+MB_ICONINFORMATION)=mrok then
      begin
      RestoreTopMosts;  PointX:=Trunc(GetDeviceCaps(printer.Handle,LOGPIXELSX)/2.54);
      PointY:=Trunc(GetDeviceCaps(printer.Handle,LOGPIXELSY)/2.54);
    //根据打印机和屏幕的分辨率计算出从屏幕转换到打印机的比例 
      PointScale:=Trunc(GetDeviceCaps(printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5); //横向打印
      printer.Orientation:=poLandscape;//打印的字体和大小
      printer.Canvas.Font.Name:='宋体';
      printer.canvas.Font.Size:=10;
      //根据字体的大小确定每行的高度
      s:='统计结果';
      PrintStep:=printer.canvas.TextHeight(s)+16;//打印的起点位置
      x:=PointX*LeftBlank;
      y:=PointY*TopBlank;//DataSource1是DBGrid1所连接的数据源if (((DataModule1.ym.DataSet).Active=true) and ((DataModule1.ym.DataSet).RecordCount>0)) then
      begin
        printer.BeginDoc;
    (DataModule1.ym.DataSet).First;    while not (DataModule1.ym.DataSet.Eof) do
        begin //打印DBGrid中的所有列
        for i:=0 to DBGrid1.FieldCount-1 do
          begin
            //假如所要打印的列超出了打印范围,则忽略该列
              if (x+DBGrid1.Columns.Items[i].Width*PointScale)<=(printer.PageWidth-PointX*RightBlank) then
              begin //画表格线
                      //每页的第一行打印表头
                  printer.Canvas.Rectangle(x,y,(x+DBGrid1.Columns.Items[i].Width*PointScale),(y+PrintStep));
                  if y=PointY*TopBlank then
                    printer.Canvas.TextOut((x+8),(y+8),DBGrid1.Columns[i].Title.Caption)
                  else
                    printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields[i].asString);
              end;//计算下一列的横坐标                x:=x+DBGrid1.Columns.Items[i].Width*PointScale;
           end;
            
            if not (y=PointY*TopBlank) then
            (DataModule1.ym.DataSet).next;        x:=PointX*LeftBlank;
            y:=y+PrintStep; //换页
            if (y+PrintStep)>((printer.PageHeight)-(PointY*BottomBlank)) then
              begin            printer.NewPage;
                y:=PointY*TopBlank;
              end;
          end;
            printer.EndDoc;
            (datamodule1.ym.DataSet).First;
            Application.MessageBox('打印完成','打印',32);
    end;