access数据库,字段riqi为日期型(短格式)
procedure TF_in.Button1Click(Sender: TObject);
var
  kk1:double;
  kk2:double;
  k1:double;
  k2:double;
  k3:double;
  k4:double;
  
beginkk1:=0;
kk2:=0;    adoquery1.Active:=true;    if not adoquery1.Active then    ADOQuery1.sql.clear;
    ADOQuery1.sql.add('select riqi from sale_in where riqi <=:t2 ');
    adoquery1.Parameters.ParamByName('t2').Value:=formatdatetime('yyyy-mm-dd',DateTimePicker1.Date);
    showmessage(formatdatetime('yyyy-mm-dd',DateTimePicker1.Date));
    adoquery1.Open;
    
   while not ADOQuery1.Eof do    begin       Application.ProcessMessages;
       k1:=adoquery1.Fields[9].Asfloat;
       k2:=adoquery1.fields[5].asfloat;
       k3:=adoquery1.Fields[6].AsFloat;
       k4:=adoquery1.Fields[8].AsFloat;
       kk1:=k1/(k2/20*k3)/k4;
       kk2:=kk2+kk1;
      
       Application.ProcessMessages;
       adoquery1.Next;
      
       label1.Caption:=floattostr(kk2);    end;     end;报from语法错……哪儿错了啊?

解决方案 »

  1.   

    adoquery1.Active:=true;if not adoquery1.Active then  ADOQuery1.sql.clear;这里好像有点问题
      

  2.   

    adoquery1.Active:=false;//这个改称falseif not adoquery1.Active then  ADOQuery1.sql.clear;
      

  3.   

    不行啊,我已经在数据库里把riqi改成长整型了,还是不行,报from语法错误,如下:
    t2:=20051212
        adoquery1.Active:=true;
        ADOQuery1.sql.clear;
        ADOQuery1.sql.add('select riqi from sale_in where riqi <=t2 ');
        adoquery1.Open;
        
       while not ADOQuery1.Eof do    begin
    …………
    难道这也会出错??????????
      

  4.   

    查询语句这样写试试
    'select [riqi] from [sale_in] where [riqi] <=:t2 '
      

  5.   

    adoquery1.Parameters.ParamByName('t2').Value:=formatdatetime('yyyy-mm-dd',DateTimePicker1.Date);你说riqi为日期型,那怎么给了它个字符型的参数?
    直接 
    adoquery1.Parameters.ParamByName('t2').Value:=DateTimePicker1.Date;
      

  6.   

    "参数t2没有默认值"
    你在adoquery里面有没有定义这个参数,如果有就在设计模式下先赋一个值。
      

  7.   

    adoquery1.Active:= false;//这一句比较关键  ADOQuery1.sql.Text = 'select * from sale_in where riqi <=''' + formatdatetime('yyyy-mm-dd', DateTimePicker1.Date) +  '''';  // 看你后面使用了很多字段,但这里的select怎么只查一个呢  adoquery1.Open;
      while not ADOQuery1.Eof do
      begin
           Application.ProcessMessages;
           k1:=adoquery1.Fields[9].Asfloat;
           k2:=adoquery1.fields[5].asfloat;
           k3:=adoquery1.Fields[6].AsFloat;
           k4:=adoquery1.Fields[8].AsFloat;
           kk1:=k1/(k2/20*k3)/k4;
           kk2:=kk2+kk1;
           Application.ProcessMessages;
           adoquery1.Next;
           label1.Caption:=floattostr(kk2);
        end;     
       adoQuery1.Close;
      

  8.   

    建议将riqi字段格式改为字符,
    是SQL语句出错。
    Access中日期型表示不是直接用'2005-01-25'表示的
      

  9.   

    改过来了,但是报数据类型不匹配,我数据库里的riqi是日期型的(短格式)……