数据库里有一张result表,
根据窗体上,用户选择的datetimepicker2里的日期,比如用户选了2005-11-1。
现在要把这个日子的后七天(2005-11-2,2005-11-3....2005-11-8)插入到表格result里。
该表有两个字段d(datetime型),q(float型)
q是edit2.text的内容,也一起插入到表格里,一共7个值对应后7天的日子。
while i<8 do
 begin
   with adoquery1 do
    begin
     close;
     sql.Clear;
     
     sql.add('');//这一段怎么写?
   
     execsql;
    end;
  i:=i+1;
 end; 
我试过parambyname('d'),照着书上写,刚打了“.”,就出现错误了。
不用这上面的方法,还有什么别的办法?

解决方案 »

  1.   

    sql.add('');//这一段怎么写?
    sql.add('insert into tablename values(:#d,:#f)').
    Parameters.ParamByName('#d').Value := FormatDateTime('yyyy-mm-dd',datetimepicker2.Date);
    Parameters.ParamByName('#f').Value := strtofloat(edit2.txt);
    execsql;
      

  2.   

    while i<8 do
     begin
       with adoquery1 do
        begin
         close;
         sql.Clear;
         
         sql.add('insert into tablename values(:#d,:#f)').
          Parameters.ParamByName('#d').Value := FormatDateTime('yyyy-mm-dd',datetimepicker2.Date+i);
          Parameters.ParamByName('#f').Value := strtofloat(edit2.txt);
       
         execsql;
        end;
      i:=i+1;
     end;
      

  3.   

    procedure TForm1.Button3Click(Sender: TObject);
      var
      i:integer;
    begin
     i:=1;
     while i<8 do
     begin
       with adoquery1 do
        begin
         close;
         sql.Clear;
         sql.add('insert into result (d,q)values(:#d,:#q)');
         Parameters.ParamByName('#d').Value := FormatDateTime('yyyy-mm-dd',
         datetimepicker2.Date+i);   
          Parameters.ParamByName('#q').Value := strtofloat(edit2.Text);
         execsql;
        end;
      i:=i+1;
     end;end;执行到execsql这里说:“没有执行可选特性???”然后就中止运行了。
    问题在哪?
      

  4.   

    单步跟踪一下,看看当执行到execsql的时候,adoquery1.sql.text是什么,还要看看你的连接字符串是否正确,是否连接到指定的数据库。
      

  5.   

    这条路看样子是走不通了。连接肯定是没问题的。
    其实我就是想把7个预测结果和实际销量图放在一个坐标图里。比较一下。
    原先有人给了建议说生成个临时表,我不做临时表了。直接在库里建一个预测结果表。字段是日期和预测销量。然后把这个表对应series2。我的问题的根源,前几天写的帖子。
    http://community.csdn.net/Expert/topic/4795/4795530.xml?temp=.7779657
    有办法直接把edit框里的text,对应的日期我可以求出来的,然后以坐标点的形式(datetimepicker2+i,edit框里text值)直接点到dbchart上啊。
      

  6.   

    类似你上面的插入,用table组件比较方便。快捷。。我建议你还是单步跟踪一下。看看sql.text以及connectstring,如果还有问题,看看你的数据表是如何设计的。
      

  7.   


    i :=0 ;
    while i<8 do
     begin
       with adoquery1 do
        begin
         close;
         sql.Clear;
         
         sql.add('insert into table_name(date,float) values(:a,:b)');
         ADOQuery1.Parameters.ParamByName('a').Value :=FormatDateTime('yyyy-mm-dd',
         datetimepicker2.Date+i);
         ADOQuery1.Parameters.ParamByName('b').Value := strtofloat(edit2.Text);   
         execsql;
        end;
      i:=i+1;
     end;
      

  8.   

    with adoquery1 do begin
         sql.add('insert into tablename values(:data,:v)').
         Parameters.ParamByName(':data').Value := FormatDateTime('yyyy-mm-         dd',datetimepicker2.Date);
    Parameters.ParamByName(':v').Value := strtofloat(edit2.txt);
    end;
      

  9.   

    while i<8 do
      begin
       with adoquery1 do
        begin
         close;
         sql.Clear;
         sql.add('insert into result(销售日期,预测销量)');
         sql.add('values(:d,:q)');
         Parameters.ParamByName('d').Value:=datetimepicker2.Date+i;
         //FormatDateTime('yyyy-mm-dd',
        // datetimepicker2.Date+i);
         Parameters.ParamByName('q').Value:= q[i];//就是edit2.text的内容。
         execsql;
        end;
        i:=i+1;
      end;
    由于我是个初学者,知道单步跟踪,但实施的我不知道对不对,具体如下:
    我在靠近execsql窗体的旁边,用鼠标点击了一下,然后这句就被红色的底纹标注了出来,运行到这步是stop了,但是我怎么看adoquery1.sql.text。
      

  10.   

    用CTRL+F5看看adoquery1.sql.text是什么,然后再根据情况用F8(逐过程),F7(逐语句)执行。
      

  11.   

    我看了看,form1.adoquery1.sql窗体下就是select * from result.
    copy watch value
    出来的内容如下
    Undeclared identifier: 'select'
    我快郁闷死了。怎么搞得。
    这是我毕设的最后一块了。弄不出来。
      

  12.   

    看看adoquery1.sql.text以及adoquery1.connectString分别是什么
      

  13.   

    算了,交给你个简单的办法,你这么写代码:,看看程序执行时候弹出的对话框显示的是什么。
    while i<8 do
     begin
       with adoquery1 do
        begin
         close;
         sql.Clear;
         
         sql.add('insert into tablename values(:#d,:#f)').
          Parameters.ParamByName('#d').Value := FormatDateTime('yyyy-mm-dd',datetimepicker2.Date+i);
          Parameters.ParamByName('#f').Value := strtofloat(edit2.txt);
          showmessage(sql.text);//用showmessage调试。
       
         execsql;
        end;
      i:=i+1;
     end;
      

  14.   

    我刚刚选择了,2005-1-1和2005-5-1,预测5-2到5-8日的销售量,第一部循环是可以执行的,用F7看过,好像在执行完i:=i+1后,这时i的值为2,然后判断while i<8时,就出现那个之前的提示,没有执行可选特性。
    我去查询分析器里看了看,result表里有有了5-2日的预测销量了,在看dbchar里,这一点也有了。我再用你的方法在看看sql里到底时什么。
    谢谢你那么耐心的教我。
      

  15.   

    我看过了。
    sql.text的内容是
    insert into result (销售日期,预测销量)
    values (:d,:q)
      

  16.   

    我刚刚有单步执行试过。是用鼠标把这个循环全部点成红色的了。
    应该还是execsql这里停止了,出现那个“没有执行可选特性“。