procedure TForm10.Button4Click(Sender: TObject);
VAR D1,D2:TDATETIME;
I:INTEGER;
begin
query3.Close;
query3.SQL.clear;
query3.SQL.add('drop table s1');
query3.ExecSQL;
   with query3 do
     begin
     close;
     sql.clear;
     sql.add('select RS.员工编号,RS.员工姓名,RS.任职部门,RS.现任职务,RS.登记日期,'+
             'GZ.基本工资,GZ.职务奖金,GZ.技术奖金,GZ.其它补贴,GZ.小计,RS.备注 INTO S1'+
             ' FROM RS,GZ WHERE RS.员工编号=GZ.员工编号 AND GZ.月份=:A AND GZ.现任职务=:B AND GZ.薪资种类=''月薪工种''');
     PARAMS[0].AsString:=COMBOBOX9.Text;
     PARAMS[1].AsString:=COMBOBOX10.TEXT;
     EXECSQL;
     end; QUERY3.CLOSE;
 QUERY3.SQL.Clear;
 QUERY3.SQL.ADD('SELECT * FROM S1');
 QUERY3.OPEN;
 QUERY3.First;
 // WHILE NOT QUERY3.EOF DO
  // BEGIN
   D1:=QUERY3.FIELDBYNAME('登记日期').ASDATETIME;
   D2:=NOW;
   I:=MONTHSBETWEEN(D2,D1);
   WITH QUERY3 DO
   BEGIN
   CLOSE;
   SQL.CLEAR;
   SQL.ADD('UPDATE S1  SET 备注=I');
   EXECSQL; //运行到这里提示什么ACCESS DRIVER 参数不足,期待是:1,
   END;
   //QUERY3.CLOSE;
   //QUERY3.Next;
  // END;QUERY3.Close;
QUERY3.SQL.Clear;
QUERY3.SQL.Add('SELECT * FROM S1');
QUERY3.OPEN;
form16.ShowModal;
end;
end.
请高手帮助呀.
还有一个问题,像上面的提示,有时是:期待是:1,有时是:期待是:2,有时期待是:3请问这是什么意思.

解决方案 »

  1.   

    如果你的备注字段是integer改
      SQL.ADD('UPDATE S1  SET 备注=I');

    SQL.ADD('UPDATE S1  SET 备注='+IntToStr(I));
    如果你的备注字段是char则改为
    SQL.ADD('UPDATE S1  SET 备注='''+IntToStr(I)+'''');
      

  2.   

    WITH QUERY3 DO
       BEGIN
       CLOSE;
       SQL.CLEAR;
       SQL.ADD('UPDATE S1  SET 备注=I');  //这儿不对吧?
    是不是应该是 
        sq;/Add('update s1 set beizhu=:i');
    parameters[0].value:=i;
       EXECSQL; //运行到这里提示什么ACCESS DRIVER 参数不足,期待是:1,
       END;
      

  3.   

    运行到这里提示什么ACCESS DRIVER 参数不足,期待是:1,
    你是不是连接的access 数据库?看看连接字符串又没有问题
      

  4.   

    我的数据库中现有10条记录在案,我发现I的值是第一条记录:系统-登记日期得到的值,但它把后面六条记录的备注字段也填上这个值了呀,用到WHILE NOT QUERY3.EOF DO.
      

  5.   

    现在我用上面 keiy() 回复的方法做,用上: WHILE NOT QUERY3.EOF DO.提示:QUERY3:CANNOT PERFORM THIS OPERATION ON A CLOSED DATASET.