query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select D.sdfg ');
query1.SQL.Add('a.sdfg ');
query1.SQL.Add('to_char(fl_Date,''yyyymmddhh24miss'') ');
query1.SQL.Add('to_char(e.dfff_date,''yyyymmddhh24miss'') 生成时间,');
query1.SQL.Add('to_char(e.gggg_date,''yyyymmddhh24miss'') 完成时间,');
query1.SQL.add('name');
query1.SQL.Add('from qqq a,www b,ddd c,eee d,hhh e');
...
..
...query1.Open;
if (strtoint(datetostr(now))-strtoint(datetostr(query1.FieldByName('生成时间').Asdatetime)))>120 then
begin
showmessage('成功');
end;
end;

解决方案 »

  1.   

    是"20040119110945"is not valid integer'
      

  2.   

    没看你的SQL怎样,不过兴许错在
    if (strtoint(datetostr(now))-strtoint(datetostr(query1.FieldByName('生成时间').Asdatetime)))>120 then因为日期字符串转换成int是会发生错误的不必转换这么多,直接
    if (Now - query1.FieldByName('生成时间').AsDateTime) > 120 then
    就可以了如果上面的语句不合你原来语义,也可以写成
    if (Trunc(Now) - Trunc(query1.FieldByName('生成时间').AsDateTime)) > 120 then
      

  3.   

    不行啊!还是出错。是"20040119110945"is not valid date and time
      

  4.   

    你数据库里‘生成时间’这个字段是字符型的吧,你这样的格式是无法转成DateTime的。
      

  5.   

    这样说来楼上说的应该不错你自己做一个函数把字符串转换成TDateTime类型吧
      

  6.   

    不!!是日期型的!!!
    是在query1.SQL.Add('to_char(e.dfff_date,''yyyymmddhh24miss'') 生成时间,');
    这改成字符串型了。
    你能教我怎么做吗?
      

  7.   

    function MyConvertS2D(const aTimestampStr: string): TDateTime;
    type
      TTimestampStrRec = packed record
        Year: array[1..4] of Char;
        Month: array[1..2] of Char;
        Day: array[1..2] of Char;
        Hour: array[1..2] of Char;
        Min: array[1..2] of Char;
        Sec: array[1..2] of Char;
      end;
    const
      SizeOfStrRec = SizeOf(TTimestampStrRec);
    var
      R: TTimestampStrRec;
      Y, M, D, H, M_, S: Word;
    begin
      Assert(Length(aTimestampStr) = SizeOfStrRec);  Move(aTimestampStr[1], R, SizeOfStrRec);  with R do
      begin
        Y := StrToInt(Year);
        M := StrToInt(Month);
        D := StrToInt(Day);
        H := StrToInt(Hour);
        M_ := StrToInt(Min);
        S := StrToInt(Sec);
      end;  Result := EncodeDateTime(Y, M, D, H, M_, S, 0);
    end;以上是我刚才为你写的一个小函数,用来把你的字符串转换成日期
    用时if (Now - MyConvertS2D(query1.FieldByName('生成时间').AsString)) > 120 then
    但是你为什么一定要在sql中用to_char把它转换成字符串呢?保留原来的类型岂不更简单?
      

  8.   

    晕,你的sql语句有问题啊,少了几个逗号吧!
    query1.Close;
    query1.SQL.Clear;            //此处少了逗号
    query1.SQL.Add('select D.sdfg,');
                          //此处少了逗号
    query1.SQL.Add('a.sdfg,');                           //此处少了逗号
    query1.SQL.Add('to_char(fl_Date,''yyyymmddhh24miss''),');
    query1.SQL.Add('to_char(e.dfff_date,''yyyymmddhh24miss'') 生成时间,');
    query1.SQL.Add('to_char(e.gggg_date,''yyyymmddhh24miss'') 完成时间,');
    query1.SQL.add('name');
    query1.SQL.Add('from qqq a,www b,ddd c,eee d,hhh e');
    ...
    ..
    ...query1.Open;
    if (strtoint(datetostr(now))-strtoint(datetostr(query1.FieldByName('生成时间').Asdatetime)))>120 then
    begin
    showmessage('成功');
    end;
    end;
      

  9.   

    alphax(多喝了三五杯) 大哥你的函数怎么用啊。
    我把它加到新建的UNIT里。然后USE它。然后用这个函数不对啊?谢谢!大哥指教?
      

  10.   

    怎么不行啊?我不是告诉了你怎么用了吗?
    如果很多地方都用到它,就放在公用单元里面,然后uses它,
    只那一个地方,就不必了,直接写在你的过程里面就行了procedure YourOrgProc;
    var
      ... //you variable declaration here  function MyConvertS2D(const aTimestampStr: string): TDateTime;
      type
        TTimestampStrRec = packed record
          Year: array[1..4] of Char;
          Month: array[1..2] of Char;
          Day: array[1..2] of Char;
          Hour: array[1..2] of Char;
          Min: array[1..2] of Char;
          Sec: array[1..2] of Char;
        end;
      const
        SizeOfStrRec = SizeOf(TTimestampStrRec);
      var
        R: TTimestampStrRec;
        Y, M, D, H, M_, S: Word;
      begin
        Assert(Length(aTimestampStr) = SizeOfStrRec);    Move(aTimestampStr[1], R, SizeOfStrRec);    with R do
        begin
          Y := StrToInt(Year);
          M := StrToInt(Month);
          D := StrToInt(Day);
          H := StrToInt(Hour);
          M_ := StrToInt(Min);
          S := StrToInt(Sec);
        end;    Result := EncodeDateTime(Y, M, D, H, M_, S, 0);
      end;begin
      query1.Close;
      query1.SQL.Clear;
      query1.SQL.Add('select D.sdfg ');
      query1.SQL.Add('a.sdfg ');
      query1.SQL.Add('to_char(fl_Date,''yyyymmddhh24miss'') ');
      query1.SQL.Add('to_char(e.dfff_date,''yyyymmddhh24miss'') 生成时间,');
      query1.SQL.Add('to_char(e.gggg_date,''yyyymmddhh24miss'') 完成时间,');
      query1.SQL.add('name');
      query1.SQL.Add('from qqq a,www b,ddd c,eee d,hhh e');
      ...
      ..
      ...  query1.Open;
      if (Now - MyConvertS2D(query1.FieldByName('生成时间').AsString)) > 120 then
        showmessage('成功');
    end;适才楼上的兄弟说你的SQL少了一些逗号,你的程序能够运行完query1.open这一句?
      

  11.   

    我想可能是超过了整形的表示范围,引起了数据溢出呢?关注中,不过说实话,楼主的ADD实在是太多了阿。。