往一个自动编号的表中插入数据 如 :Table1;
ID bigint(8)(自动编号,主键)
birthday datetime(8)
Name  nvarchar(20)
.........
with database.adoquery1 do
begin
     SQL.Clear;
     SQL.Add('insert table1 values(:a,:b)' );
     Parameters.ParamByName('a').Value:=datetimepicker1.date;
     Parameters.ParamByName('b').Value:=Trim(edit1.text);
     ExecSQL;
end;如果edit1.text=‘001’datetimepicker1.date=2007-07-13报错:应用程序中使用了错误的数据类型
但是如果把数据表中的name和birthday字段的顺序换一下,即 birtday为最后一个字段,则可以运行;
数据表中的数据为
ID   name birthday
1     1    2007-07-13 name不是‘001’
如果把id字段删除,则正常
哪位高手指点一下

解决方案 »

  1.   

    SQL.Clear是有close的,刚才忘写了
      

  2.   

    错误原因:sql语法错误。如果要省略字段名插入数据,则应该按照设计表时的字段顺序依次指定所有的值。自动编号的和有默认值的可以以“ 字段值1,,字段值3,,字段值5”来表示。用都好隔开数据库指导你没有提供该字段的值,它会使用默认规则去判断。另外一种方式可以的原因:
    按照你的写法,虽然没有提供与字段数目一样的值,首先的处理情况是数据库会认为第一个对应字段1,依次类推,没有给出的字段数据库会如下处理:
    1、首先看是否是默认值或者自动编号字段,如果是数据库提供一个
    2、如果不满足1,数据库会查看该字段是否允许为空,允许则提供null代替,如果不允许就报错。
    正好你第二种提供的满足数据库要求,所以被正确执行。