为了方便,所有字段全采用文本字段,
riqi:=formatdatetime('dddddd',now);yuefen:=formatdatetime('mm',now);adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into qq(月份,时间,姓名,服务项目,金额) values (');
ADOQUERY1.SQL.Add(yuefen+',');
ADOQUERY1.SQL.Add(riqi+',');
ADOQUERY1.SQL.Add(combobox2.Text+',');
  ADOQUERY1.SQL.Add(edit2.Text+',');
  ADOQUERY1.SQL.Add(edit3.Text+');');  adoquery1.ExecSQL;这时候出现“语法错误,操作符丢失....”
riqi:=formatdatetime('yyyy/mm/dd',now);yuefen:=formatdatetime('mm',now);adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into qq(月份,时间,姓名,服务项目,金额) values (');
ADOQUERY1.SQL.Add(yuefen+',');
ADOQUERY1.SQL.Add(riqi+',');
ADOQUERY1.SQL.Add(combobox2.Text+',');
  ADOQUERY1.SQL.Add(edit2.Text+',');
  ADOQUERY1.SQL.Add(edit3.Text+');');  adoquery1.ExecSQL;
这时候倒是能插入,但本应是2009-10-26这样的数据,却变成了1973

解决方案 »

  1.   

    即然是NOW,为什么不用数据库的里NOW?
      

  2.   

    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into qq(月份,时间,姓名,服务项目,金额) values (');
    ADOQUERY1.SQL.Add(quotedstr(yuefen)+',');
    ADOQUERY1.SQL.Add(quotedstr(riqi)+',');
    ADOQUERY1.SQL.Add(quotedstr(combobox2.Text)+',');
      ADOQUERY1.SQL.Add(quotedstr(edit2.Text)+',');
      ADOQUERY1.SQL.Add(edit3.Text+')');  adoquery1.ExecSQL; adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into qq(月份,时间,姓名,服务项目,金额) values (');
    ADOQUERY1.SQL.Add(yuefen+',');
    ADOQUERY1.SQL.Add(quotedstr(riqi)+',');
    ADOQUERY1.SQL.Add(quotedstr(combobox2.Tex)t+',');
      ADOQUERY1.SQL.Add(quotedstr(edit2.Text)+',');
      ADOQUERY1.SQL.Add(edit3.Text+')');  adoquery1.ExecSQL; 
      

  3.   


    quotedstr 给字符串两边加单引号
    或 char(39)+yuefen+char(39)
    或 ''+yuefen+''
      

  4.   

    【但本应是2009-10-26这样的数据,却变成了1973】
    2009-10-26=1973
    应该使用quotedstr(日期字符串)
      

  5.   

    用参数绑定的方式,别拼字符串了。
    with adoquery do
    begin
      sql.text := 'insert into t values(:a)';
      parameters.parambyname('a').value := strtodate(formatdatetime('yyyy-mm-dd',now()));
      execsql;
    end;
      

  6.   

    'insert into table (inputdate) values (Getdate())'
      

  7.   

    riqi:=formatdatetime('dddddd',now); 要得到时间不是这样的吧。
    要得到你想要的那种格式该是这样:
    riqi:=formatdatetime('yyyy-mm-dd',now);
    然后插入过程在程序中还是建议你用
    adoquery1.append;
    .......
    adoquery1.post; 
    这样都比较清楚一点。
      

  8.   

    还是写清楚点吧
    adoquery1.Close; 
    adoquery1.SQL.Clear; 
    adoquery1.SQL.Add('select * from qq');
    adoquery1.open;
    adoquery1.append;
    adoquery1.fieldbyname('月份').asstring:=yuefen;
    adoquery1.fieldbyname('时间').asstring:=riqi;
    adoquery1.fieldbyname('姓名').asstring:=combobox2.Text;
    adoquery1.fieldbyname('服务项目').asstring:=edit2.Text;
    adoquery1.fieldbyname('金额').asstring:=edit3.Text;
    adoquery1.post;
      

  9.   

    楼主自己检查一下SQL语句,语句没问题的话试试把AdoQuery的ParamCheck属性设为False!
      

  10.   

    riqi:=Quotedstr(formatdatetime('yyyy-mm-dd',now));
    yuefen:=Quotedstr(formatdatetime('mm',now));with adoquery1 do
    begin
      close;
      sql.text:='insert into qq(月份,时间,姓名,服务项目,金额) values ('
              +yuefen+','+riqi+','+Quotedstr(combobox2.Text)+','
              +Quotedstr(edit2.Text)+','+Quotedstr(edit3.Text)+')';
      ExecSQL;
    end;