环境:
WINDOWS 2000 ADV SERVER
MSSQL 2000 SP4
DELPHI 7
所有补丁都打了 
库结构 表T1
  id bigint <主键非空>
  classid bigint
  name nvarchar(20)简单的代码
  Adoquery.Append;
  Adoquery.fields[0].value:=123;
  Adoquery.fields[1].value:=456;
  Adoquery.fields[2].value:='abc';
  Adoquery.Post; //  出错 出错 出错 出错 出错 出错 ...... 出错使人烦燥 .... 

解决方案 »

  1.   

    注意是这个 win2000server  
    其它操作系统正常 ...
      

  2.   

    用ADOQuery.FieldByName('字段名').as字段类型 := 试试
      

  3.   

    你都说的这么清楚了,那肯定是win2000server的问题,而不是ADOQuery的问题.
    总不能叫它支持所有的操作系统吧。
    那JAVA不就那个了
      

  4.   

     Adoquery.Append; 
     Adoquery.Edit;     //加上这个
     Adoquery.fields[0].value:=123; 
     ...
     
      

  5.   

    你试试换个数据库结构试试看,不知道是不是bigint的问题。
      

  6.   

     Adoquery.fields[2].asstring:='abc'; 
      

  7.   


    两颗星哦,难道CSDN真的就这样沦落了?
      

  8.   

    Adoquery.fields[0].value:=123; //很可能是主键重复了
    不要出了什么问题就BUG,自己先仔细检查一下再说
      

  9.   

    楼主好像没说是啥错。先找找自己的原因,不要动不动就说是什么“重大bug”还有,5楼的那句edit不用加的。
      

  10.   

    也有可能是Adoquery.fields[2]这一列的宽度不够,你试试手动设置下他的宽度。
      

  11.   

    没有这样的标题 不知道这个问题的严重性
    宽度不可能不够的 XP和2003下正常
    只有win2000 不正常
      

  12.   

      Adoquery.Append; 
      Adoquery.fields[0].value:=123; 
      Adoquery.fields[1].value:=456; 
      Adoquery.fields[2].value:='abc'; 
    try
      Adoquery.Post; //  出错 出错 出错 出错 出错 出错 
    except
      on E: Exception do
        ShowMessage(E.Message);
    end;//try先看看是什么错误啊...
      

  13.   

    出错信息 invalid variant type 
      

  14.   

    表结构 
    id ---> bigint 主键
    classid ---> bigint 
    name ----> varchar 或者 nvarchar代码就上面这些,
    发现 出错的都是字符型的name 字段如果给 name这个 字符型数据 赋值 会错 ...
    name 不论是varchar 或者 nvarchar 都会错程序非常简单的 就一个
    with tadoquery1 do begin
         append
        fieldbyname('id').value=1234; //如果主键用 int 也不会出错
        fieldbyname('classid').value=1234;
        fieldbyname('name').value='1234'; // 没有这一句不会出错
        post; ////出错的是这一句
    end; 结论 : 如果主键是 id 是bigint 其它键里面有 varchar或nvarchar 的时候
    出错 ....invalid variant type 
      

  15.   

    是bigint 的问题
    因为fieldbyname('id').value默认的是Variant类型
    这样改fieldbyname('id').AsString:='123123123';
      

  16.   

    装上MDAC2.7 或以上版本
    TLargeintField(Adoquery.fields[0]).value:=123; 
    TLargeintField(Adoquery.fields[1]).value:=456; 
      

  17.   

    同意楼上,遇到过类似问题,是ADO引擎的问题。
      

  18.   

    ADO引擎的问题  如何解决 
    我知道是MADC的问题 如何解决 ...
      

  19.   

    2000中应该就是引擎版本低
    换成高版本的看看
    MDAC2.7 以上的,我以前装2.8的版本有点问题
    所以推荐2.7吧,2.7就OK了
      

  20.   


    TLargeintField(Adoquery.fields[0]).value:=123; 
    TLargeintField(Adoquery.fields[1]).value:=456; 
      

  21.   

    MDAC版本你現在用的哪一個??
      

  22.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Adoquery1.Append;
      Adoquery1.fields[0].AsInteger:=2;
      Adoquery1.fields[1].AsInteger:=2;
      Adoquery1.fields[2].value:='abc';
      Adoquery1.Post; 
    end;
    在bigint时,用Adoquery1.fields[0].value就会出错
      

  23.   

    环境: 
    WINDOWS 2000 ADV SERVER 
    MSSQL 2000 SP4 
    DELPHI 7 
    所有补丁都打了 
    库结构 表T1 
      id bigint <主键非空> 
      classid bigint 
      name nvarchar(20) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
    只有在WINDOW2000 且数据表为上述结构时 才会出错的
      

  24.   

    我还是用 char吧 不用bigint 了
      

  25.   

    32楼是正解procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      Adoquery1.Append; 
      Adoquery1.fields[0].AsInteger:=2; 
      Adoquery1.fields[1].AsInteger:=2; 
      Adoquery1.fields[2].asstring:='abc'; 
      Adoquery1.Post; 
    end; 
      

  26.   

    这么短的代码 不可能是代码问题
    再烂也写了好几年D了
    是操作系统问题
    解决方法 不用BIGINT 换成VARCHAR
      

  27.   

    搞个AdoTable 试一下,代替那个 AdoQuery 看看效果
      

  28.   

    我最不喜欢用Append!直写sql语句不就行了! 到四十多楼还没解决,晕去!还有!! 看看你的ADOQuery的Lock Type是不是ltReadOnly!!!
      

  29.   

    已经说了用 varchar 了 一切正常 ...