我的DBGrid 连着一个表
表里面有TotalName,F01,..F31,Total 这些字段 ,这个表是用来统计一个月每天中一些事件出现的次数
我现在要根据不同的月份来显示表里的数据
例如:3月有31天  那我就需要所有的数据 
      但是2月就28 天  那么F29,F30,F31的字段我就不需要显示出来了
我试过用Query 组件,通过SQL语句里面加SELECT TOTALNAME,F01 ....F31 FROM table 但是觉得这样要把需要的字段一一列出, 太麻烦了,
有没更好的方法
请高手指点

解决方案 »

  1.   

    不麻烦啊,用Add加上去
    比如说先写一个28天的,SQL.Add ('select .....F27,F28');
    case day-28 of
    1:
      SQL.Add(',F29')
    2:
      SQL.Add(',F29,F30')
    3:
      SQL.Add(',F29,F31')
    end;
    最后把剩下的补齐 SQL.Add(' from ......');
      

  2.   

    不麻烦啊,用Add加上去
    比如说先写一个28天的,SQL.Add ('select .....F27,F28');
    case day-28 of
    1:
      SQL.Add(',F29')
    2:
      SQL.Add(',F29,F30')
    3:
      SQL.Add(',F29,F30,F31')
    end;
    最后把剩下的补齐 SQL.Add(' from ......');
      

  3.   

    取数据时全部字段提取:(select * from 表)procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      Case Monthof(Now) of
        2:
          for i:=Dayof(IncDay(StrtoDatetime(FormatDatetime('yyyy-03-01',Now)),-1))+1 to 31 do
            Dbgrid1.Columns[i].Visible:=false;
        4,6,9,11:
          Dbgrid1.Columns[31].Visible:=false;
      end;
    end;
      

  4.   

    这样还是要在Select 语句中把F01到F28一个个列出来啊
    能不能把DBGrid和一个Table关联起来,但是显示的时候根据天数来显示,
    例如2月就显示前面的28列,再加上后面的TOTAL列
        4月就显示前面的30列,再加上后面的TOTAL列
      

  5.   

    或者用chenylin(陈SIR)提供的方法,将Visible属性改为false要么你把F1~F28用一个循环来输入
    for i:=1 to 27 do
      SQL.Add('F'+IntToStr(i)+',');
    SQL.Add('F28');