环境:
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; // 出错 出错 出错 出错 出错 出错 ...... 出错使人烦燥 ....
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; // 出错 出错 出错 出错 出错 出错 ...... 出错使人烦燥 ....
其它操作系统正常 ...
总不能叫它支持所有的操作系统吧。
那JAVA不就那个了
Adoquery.Edit; //加上这个
Adoquery.fields[0].value:=123;
...
两颗星哦,难道CSDN真的就这样沦落了?
不要出了什么问题就BUG,自己先仔细检查一下再说
宽度不可能不够的 XP和2003下正常
只有win2000 不正常
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先看看是什么错误啊...
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
因为fieldbyname('id').value默认的是Variant类型
这样改fieldbyname('id').AsString:='123123123';
TLargeintField(Adoquery.fields[0]).value:=123;
TLargeintField(Adoquery.fields[1]).value:=456;
我知道是MADC的问题 如何解决 ...
换成高版本的看看
MDAC2.7 以上的,我以前装2.8的版本有点问题
所以推荐2.7吧,2.7就OK了
TLargeintField(Adoquery.fields[0]).value:=123;
TLargeintField(Adoquery.fields[1]).value:=456;
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就会出错
WINDOWS 2000 ADV SERVER
MSSQL 2000 SP4
DELPHI 7
所有补丁都打了
库结构 表T1
id bigint <主键非空>
classid bigint
name nvarchar(20) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
只有在WINDOW2000 且数据表为上述结构时 才会出错的
begin
Adoquery1.Append;
Adoquery1.fields[0].AsInteger:=2;
Adoquery1.fields[1].AsInteger:=2;
Adoquery1.fields[2].asstring:='abc';
Adoquery1.Post;
end;
再烂也写了好几年D了
是操作系统问题
解决方法 不用BIGINT 换成VARCHAR