procedure TForm1.Button1Click(Sender: TObject);
begin
  with ADOQuery1 do
  begin
    Close;
    sql.Clear;
    sql.Add('Insert into Vote values(:can,:vote)');
    Parameters.ParamByName('can').Value := Trim(Edit1.Text);
    Parameters.ParamByName('vote').Value := StrToInt(Edit2.Text);//出错
    ExecSQL;
  end;
  ADOTable1.Close;
  ADOTable1.Open;
end;运行后提示 应用程序在当前操作中使用了错误的数据类型..
vote对应的字段 是int类型的.
不过就是还有一个自增的字段.  delphi里头自增的字段应该也不用在插入的时候再写吧??
为什么会出错,,??? 大侠指点

解决方案 »

  1.   


    'IDENTITY注意问题'
    1. 会话中某个表已将此属性设置为ON,当为另一个表发出了SET IDENTITY_INSERT ON 句时将出错
    --测试的表
    CREATE TABLE ta(id int IDENTITY(1,1),col int)
    CREATE TABLE tb(id int IDENTITY(1,1),col int)
    GO--设置 IDENTITY_INSERT 属性
    SET IDENTITY_INSERT ta ON
    SET IDENTITY_INSERT tb ON
    GO
    /*======================================================*/
    --2. 如果插入记录的标识值大于表的当前标识值,则SQL Server自动将新插入值作为当前标识值使用
    --测试的表
    CREATE TABLE tb(id int IDENTITY(1,1),col int)--强制在表中插入标识值
    SET IDENTITY_INSERT tb ON
    INSERT tb(id,col) VALUES(10,1)
    SET IDENTITY_INSERT tb OFFINSERT tb(col) VALUES(2)
    SELECT * FROM tb
    /*--结果
    id           col 
    ----------------- ----------- 
    10          1
    11          2
    --*/
    GO
    /*======================================================*/
    --3. 如果插入记录的标识值小于表的当前标识值,则表的当前标识值不受新插入值的影响
    --测试的表
    CREATE TABLE tb(id int IDENTITY(1,1),col int)
    INSERT tb VALUES(1)
    INSERT tb VALUES(2)--强制在表中插入标识值
    SET IDENTITY_INSERT tb ON
    INSERT tb(id,col) VALUES(1,11)
    SET IDENTITY_INSERT tb OFFINSERT tb(col) VALUES(3)
    SELECT * FROM tb
    /*--结果
    id           col 
    ----------------- ----------- 
    1           1
    2           2
    1           11
    3           3
    --*/
      

  2.   

        sql.Add('Insert into Vote values(:can,:vote)');
        Parameters.ParamByName('can').Value := Trim(Edit1.Text);
        Parameters.ParamByName('vote').Value := StrToIntDef(Edit2.Text,0);//出错 Edit2.Text中不是一个INT型数据
      

  3.   

    Parameters.ParamByName('vote').Value := StrToInt(Edit2.Text); 
    楼主可以在delphi中看下这两边的类型啊 
    这类型肯定是不一致啊
    两边都应该是string类型 
      

  4.   

    我晓得啊,, 但是 vote对应的数据库里的字段是int类型 所以要把字符型转换成整形啊.还有3楼的也不行哦
      

  5.   

    Create table a(a varchar(20),b int )
    procedure TForm1.Button1Click(Sender: TObject);
      begin
      edit1.Text :='1';
      AdoQuery1.Close;
      Adoquery1.SQL.Clear ;
      AdoQuery1.SQL.Add('insert into a values(''1'','''+edit1.Text+''')');
      Adoquery1.ExecSQL ;
    end;select * from a
    1 1
    (所影响的行数为 1 行)
    '你在说不行就算了'
      

  6.   

    sql.Add('Insert into Vote(字段1,字段2) values(:can,:vote)');字段1对应“can”参数
    字段2对应“vote”参数
    还有一个自增字段就让数据库自己处理吧,这样就可以了