我有两个表,结构如下
A表
ryID 案件编号 姓名 工具 开始时间 结束时间
B表
yqID 有效开始时间 有效结束时间 ryid
查询条件:有效开始时间<=开始时间<=结束时间<=有效结束时间,也就是说“开始时间到结束时间”必须在“有效开始时间到有效结束时间”这个时间段内,请问这样的结果我怎么查询?
另外B表我用dbgrid显示的时候如果不符合上面查询条件的行,颜色有变化,这个怎么做到?

解决方案 »

  1.   

    1、先由表B读取 有效开始时间 有效结束时间 值
    2、SQL:= select * A where (开始时间>=有效开始时间 ) and (结束时间<=有效结束时间) and (开始时间<=结束时间) 
    3、执行SQL,关联DBGrid。
      

  2.   

    DBGrid颜色有变化问题,就在DBGrid1DrawColumnCell事件中写代码。
      

  3.   

    我现在就是想把不符合这个查询条件:有效开始时间<=开始时间<=结束时间<=有效结束时间,也就是说“开始时间到结束时间”必须在“有效开始时间到有效结束时间”这个时间段内的结果,用dbgrid行颜色有变化
      

  4.   

    我是这么做的,看一下对吗
    procedure Tsjyqf.RzBitBtn2Click(Sender: TObject);
    var
      sqltxt,skssj,sjssj,syxks,syxjs:string;
      i,j:integer;
    begin
      //判断案件结束时间是否大于有效结束时间
      sqltxt := 'select * from a where ajbh like ''%'+rzedit1.Text+'%'' order by ryid desc' ;
      openadoquery(dmf.ADOQuery5, sqltxt);
      for i:=0 to dmf.ADOQuery5.recordCount-1 do
      begin
          skssj:=dmf.ADOQuery5.FieldByName('kssj').AsString;
          sjssj:=dmf.ADOQuery5.FieldByName('jssj').AsString;
          sqltxt := 'select * from yqb';
          sqltxt :=sqltxt+' where ryid='+dmf.ADOQuery5.FieldByName('ryid').AsString+' ';
          sqltxt :=sqltxt+' order by yqid' ;
          openadoquery(dmf.ADOQuery6, sqltxt);
         for j:=0 to dmf.ADOQuery6.recordCount-1 do
        begin
          syxks:=dmf.ADOQuery6.FieldByName('yxks').AsString;
          syxjs:=dmf.ADOQuery6.FieldByName('yxjs').AsString;
          if (skssj<syxks) or (skssj>syxjs) or (sjssj<syxks) or (sjssj>syxjs) then
           begin
               showmessage('时间有问题!');
           end;
           dmf.ADOQuery6.next;
        end;
        dmf.ADOQuery5.next;
      end;
    end;
    怎么触发DBGrid1DrawColumnCell事件
      

  5.   

    DBGrid1DrawColumnCell事件
    DBGrid自动击发。只要在DBGrid1DrawColumnCell事件中。写入代码即可。