adoquery的post出错 Invalid variant type(100)

  • 主题发起人 主题发起人 bamfk1023
  • 开始时间 开始时间
B

bamfk1023

Unregistered / Unconfirmed
GUEST, unregistred user!
---库结构如下 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t1]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[t1] GO CREATE TABLE [dbo].[t1] ( [id] [bigint] NOT NULL , [rname] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [small] [int] NULL , [zdke] [bigint] NULL , [def] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [t1] [datetime] NULL , [t2] [datetime] NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[t1] ADD CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] GO D代码如下: procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin with ADOQuery1 do begin close; SQL.Text := 'select * from t1'; open; append; for i:=0 to Fields.count-1 do begin case Fields.DataType of ftString:Fields.AsString := '111'; ftWideString:Fields.AsString := '111'; ftDate:Fields.AsDateTime := date; ftDateTime:Fields.AsDateTime := Date; ftInteger:Fields.AsInteger := 123; ftLargeint:TLargeintField(Fields).AsLargeInt := 123; else Fields.AsInteger := 123; end ; end ; end ; end; procedure TForm1.Button2Click(Sender: TObject); begin ADOQuery1.Post; // ~~~~~~~~~~~出现 EvariantBadVarTypeError: Invalid variant type end; 多简单的代码呀 不知道错在哪 ...
 
是很简单,ADOConnection通过ODBC连接数据库,测试正常,无任何异常提示。请检查adoquery1的其它属性,我只设置了connection属性。或者,是否是因为delphi的ado没有升级导致?
 
代码是对的吧 DELPHI7 Adojet在装了 明天如果可以来结贴!
 
用你的sql建表的,拷贝你代码测试的。正常,无异常。因此,建议你重做一个测试程序,进行测试。测试前,将数据表中数据清空,保证一个完全初始化的测试环境。
 
Invalid variant type 为什么我还是错的 搞不必呀我的表是空的 没内容的 ...刚升级了 ADO也是不行 ...唉 头疼 ...select @@versionMicrosoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4) 测试 如果修改数据库中的 bigint 字段为 int 字段 就正常了但是我想用 bigint ...win2000 advanced server
 
环境: 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; // 出错 出错 出错 出错 出错 出错 ...... 出错使人烦燥 ....
 
Adoquery.fields[0].value:=123; //一般不要这么写Adoquery.Fields[0].AsInteger := 123; //一般这么写还有你NVARCHAR建议改为VARCAHR, 除非你用UNICODE,否则不必用NVARCHAR阿。
 
测试 如果修改数据库中的 bigint 字段为 int 字段 就正常了但是我想用 bigint ... //为什么要用BITINT,你有数据中有达到几十亿这么大的数字?一般不可能吧?所以改为INT吧
 
主键 习惯就BIGINT 时间到秒+三位随机数
 
老大啊。这个是Delphi7的BUG啦。只是对Bigint才存在这问题,你有没神奇地发现你的程序在XP下根本没问题。而且这个Bug是打了补丁才出现的。解决方法:1、win2k下,D7不用打补丁,保存不会出错,但更神奇的是所有的BigInt的负数全部显示成正数2、Xp下,D7打补丁。程序没问题。Delphi还有这种Bug,Borland不死才怪呢。
 
没有答案,那么只能绕行, 以后关键词都用varchar这样就安全了 ....
 

Similar threads

I
回复
0
查看
966
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部