dbgrideh显示adoquery的结果ADOQuery.SQL.Text:=''a2:a5,是在sql里case when行转列as来的,沒有具体列名
max(case t.cbustype when '领料' then t.dveridate else null end) a2,
max(case t.cbustype when '发料' then t.dveridate else null end) a3,
max(case t.cbustype when '成品' then t.dveridate else null end) a4,
max(case t.cbustype when '销售' then t.dveridate else null end) a5这是查出来的结果         准备加的列
    a1    a2   a3   a4   a5 //状态
T090611-436 2009-09-26  2009-06-26  2009-09-24  2009-10-01  //否
T090716-723 2009-08-03  2009-09-21  2009-09-24  2009-09-25  //是 我想在dbgrideh结果后面加一列状态,进行判断 if a2 or a4 or a5 is null 和 (a5>=a4>=a2不成立) 状态为否  else是请问该如何实现

解决方案 »

  1.   

    双击adoquery加个计算字段(如名字为FC, 类型为boolean的字段). 然后在oncalcfield事件中FC.AsBoolean := if a2 or a4 or a5 is null 和 (a5>=a4>=a2不成立
      

  2.   

    楼上的方法是可以的,大致方法是这样的:1、先在数据集里增加一个计算字段(假设State),在数据集(adoquery)的OnCalcfield事件中加入代码:
       adoqueryState.AsBoolean :=((a2='') or (a4='') or (a5='')) and (not ((a5>a4) and (a4>a2)));2、DbGridEh控件增加一个字段,连接到数据集里的State字段;
      

  3.   

    这是个很好的思路,可是我的grid是直接显示sql的as列名,怎样进行判断呢。还有FC该怎样书写ADOQuery.Fields[0].? 我是初学delphi还望能写详细点的代码。谢谢了
      

  4.   

    我增加了,可执行时,说Undeclared identifier: 'adoqueryState'
      

  5.   

    还有就是,我只要在dbgrideh里增加字段,不论是dbgrdh1.Columns[0].Title.Caption:=还是双击dbgrideh增加字段,都会提示list out of bounds(1),不知道怎么解决。
      

  6.   

    数据集的字段顺序和grid里的顺序要一致,grid里增加字段:DBGrid1.Columns.Add;
    DBGrid1.Columns.Items[DBGrid1.Columns.Count].FieldName := '';
    DBGrid1.Columns.Items[DBGrid1.Columns.Count].Title.Caption := '';
    DBGrid1.Columns.Items[DBGrid1.Columns.Count].Title.Alignment := taCenter ;