我用ADOTable控件通过ODBC连接数据库,运行时提示以下错误:
错误类型:EVariant
错误说明:'Invalid variant type conversion'我不知道是什么原因引起的。
我开始怀疑是Delphi的问题,我从装了,不行,我又怀疑是ODBC的问题,升级了,还不行。
后来我发现,Windows2000刚刚装好的时候没有这个问题,一安装了SQL Server2000就这样了,我以为是SQL Server2000的问题,换了个版本还是一样。
不知道你是否也遇到了这样的问题。
我后来象我使不是在走弯路,我查阅了大量资料,都没有提到这样连接会有问题,而且,同样的情况Delphi5就没有问题。
我搞不懂了。
于是,我静下心来想,它提示问题出在变量类型转换上,是不是,数据集在内存分配的空间出了问题,有可能 TADOTable在内存中是按数据集的二维链表结构存储,同时值域都为变体型,数据的存取结构需要根据元素的具体类型转换,这样将导致数据处理的时间变长,将数据表中元素的值而不是链表指针直接存取到内存中可以加快数据处理时间,但是,SQL Server2000的ODBC又并不完全兼容Delphi 6的这个过程,而导致错误的发生。但是,我没有找到任何能够支持我上述说法的观点。
望,仁者见仁,智者见智。
我的环境是:Windows 2000 Advanced Server;SQL Server2000;Delphi 6
错误类型:EVariant
错误说明:'Invalid variant type conversion'我不知道是什么原因引起的。
我开始怀疑是Delphi的问题,我从装了,不行,我又怀疑是ODBC的问题,升级了,还不行。
后来我发现,Windows2000刚刚装好的时候没有这个问题,一安装了SQL Server2000就这样了,我以为是SQL Server2000的问题,换了个版本还是一样。
不知道你是否也遇到了这样的问题。
我后来象我使不是在走弯路,我查阅了大量资料,都没有提到这样连接会有问题,而且,同样的情况Delphi5就没有问题。
我搞不懂了。
于是,我静下心来想,它提示问题出在变量类型转换上,是不是,数据集在内存分配的空间出了问题,有可能 TADOTable在内存中是按数据集的二维链表结构存储,同时值域都为变体型,数据的存取结构需要根据元素的具体类型转换,这样将导致数据处理的时间变长,将数据表中元素的值而不是链表指针直接存取到内存中可以加快数据处理时间,但是,SQL Server2000的ODBC又并不完全兼容Delphi 6的这个过程,而导致错误的发生。但是,我没有找到任何能够支持我上述说法的观点。
望,仁者见仁,智者见智。
我的环境是:Windows 2000 Advanced Server;SQL Server2000;Delphi 6
解决方案 »
- adoquery.append;
- Dock的送分题~~
- 超长打印问题?
- ADOConnection1+ADOTable1+DataSource+ACCESS数据库链接时候出错问题!!!!
- 简单小问题!为什么我的服务器用了几天就要重新启动,否则客户端是无法连接的阿
- 怎样在Delphi程序中调用*.chm帮助文档,急急急!!!!!!!!
- 使用Adoquery对数据修改应该用哪些语句?
- 急救
- 偶尔出现这种错误 Connection is in use by another statement
- 在SQLSERVER的分组中Group By能否用常量--'1'、‘Name‘ 及Case When ... ?
- 请问那位大虾有delphi5.x分布式多层应用系统篇(李维)一书中第11章的实例文件?
- word已经打开文件,我在我的软件里还想打开它,查看东西,用reset()不行,怎么办?(急)
这,我也不能解释是什么原因了。
2 你的表里面的数据类型有哪些?
很希望那位老兄能讲一讲ODBC和ADO的存取结构方面的问题。
微软的网站上有这方面的很多文章,你可以看看从DAO-RDO-ADO以及ODBC/DBLiabary的历史就明白了.(不好意思,欧是拨号,太慢了)
你写了一个类似于下面一行的代码:
myValue:=ADODateSetXXX.FieldValue['testField'];
而问题的出现便是你给这个字段没有设置值,也就是它是一个Null(空),当然不可以转换为整数了。
避免的办法:
var
tmpStr:string;……
tmpStr:=ADODateSetXXX.FieldByName('testField').AsString;
if tmpStr=''
then begin
ShowMessage('testField 没有设置值!');
exit;
end;
myValue:=ADODateSetXXX.FieldByName('testField').AsInteger;……
曾通知自己删除帖子,可是有好多帖子点击时是找不到的(大家应当有此方面的经验),
前几天我对信誉分提出质疑,现在看到信誉分又降了,我发誓从未做过什么不道德的事。相反我解决过别人几个两三百分的帖子,对于这种相对较难的回应难道信誉分就没丁点增加吗?说不定哪天会像这个论坛中曾经的的高手Focus老鱼(名列前矛茅的兄弟)一样(虽然水平与他相差甚远),一走了之。
失望,没有选择时可以选择离开。
您好:
我考虑过这个问题,也作过相关实践,不是您说的哪个问题。
2、查ODBC,我想问题出在这的可能性较大,因为您是装了SQL后才出现问题的。
我用ADO在调试时也会有错,但如果直接运行.exe就没问题,而在相关地方也没进行容错处理。