先上代码
    a:=DateToStr(now);    t := 'select 强度 from AWS_ELEC_DATA where 时间 LIKE'''+a+'%''';
    with adoquery1 do
    begin
    Close;
    SQL.Clear;
    SQL.add(t);
    Open;    while not ADOQuery1.Eof do
    begin
    p:=FieldByname('强度').AsString;
    q:=strtofloat(p);
    if a>q then
    begin
    a:=a
    else a:=q;
    end;
    adoquery1.next;
    end;
    a:=FieldByName('电场强度').AsString;
    Form2.edit1.text:=a;
    end;代码问题很大,我想实现的功能是在ADOQUERY中读取了数据库一个特点时间的 所有强度的数据 然后求这些数据的最大最小和平均。
由于所给的数据库是VARCHAR。
所以无法使用MAX MIN AVG,必须强制转化。
那位大牛可以帮助将红色字体的代码修改一下,使其可以显示强度的最大值?
非常感谢。

解决方案 »

  1.   

    select max(avg或是min)(cast 强度 as float(或是double看你的情况)) from AWS_ELEC_DATA where 时间 LIKE'''+a+'%'''
      

  2.   

    //取最大值
    MaxValue = 0;
    while not ADOQuery1.Eof do
    begin
      p:=FieldByname('强度').AsString;
      q:=strtofloat(p);
      if q > MaxValue then
      begin
         MaxValue = q;
      end;
      next;
    end;
      

  3.   

    谢谢  我试试看 但是貌似我一有STRTOFLOAT就会出错
      

  4.   

    千万别叫大牛,大牛界别的那是相当牛B,我就是最近比较活跃点。
    修改下少个括号:
    select max(cast(强度 as float)) from AWS_ELEC_DATA where 时间 LIKE'''+a+'%'''
      

  5.   


    那也很热心的啊 真感谢你了呢
    这下确实没有语法错误了
    运行时候会显示 field'强度' not found
    是不是要将这句a:=FieldByName('电场强度').AsString;
    修改下?
      

  6.   

    FieldByName取字段的值要用字段的名称
    例如
    select a from A 
    FieldByName('a').asstring;//这样是没错的
    如果
    select a as 强度 from A
    FieldByName('a').asstring;//这样错误
    FieldByName('强度').asstring;//这样是没错的
      

  7.   


    是的呀 那我这句没有问题啊 我上面是
    select max(avg或是min)(cast 强度 as float(或是double看你的情况)) from AWS_ELEC_DATA where 时间 LIKE'''+a+'%'''
    下面是
     a:=FieldByName('电场强度').AsString;
      Form2.edit1.text:=a;
      end;可是怎么会显示not found呢?
      

  8.   

        a:=DateToStr(now);    t := 'select max(cast(强度 as float)) from AWS_ELEC_DATA where 电场时间 LIKE'''+a+'%''';
        with adoquery1 do
        begin
        Close;
        SQL.Clear;
        SQL.add(t);
        Open;    b:=FieldByName('强度').AsString;
        Form2.edit1.text:=b;
        end;
    麻烦看一下,之前b定义为string
    代码目的为了在EDIT1上显示 最大的强度。
    可是运行起来是field'强度'not found
      

  9.   

    因为用了max函数在强度这个字段上,所以是不能在用强度来获取值了
    你可以这样:
      t := 'select max(cast(强度 as float)) as maxpower from AWS_ELEC_DATA where 电场时间 LIKE''' a '%''';
      with adoquery1 do
      begin
      Close;
      SQL.Clear;
      SQL.add(t);
      Open;
      b:=FieldByName('maxpower').AsString;