我用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

解决方案 »

  1.   

    没碰到过。但我建议一下,用ADO+SQL SERVER就没必要再用ODBC,直接用OLE DB,效率更好,更稳定。
      

  2.   

    我也很少用ODBC只是前几天,偶尔用了发现的问题。
      

  3.   

    而且我发现,只要将TADOTable实例的字段对象实例化成静态对象这个问题也可以解决。
    这,我也不能解释是什么原因了。
      

  4.   

    我建议你到www.microsoft.com/download去下载一个sqlsp3,给sql server打个补丁,你的系统有没有装mdac?
      

  5.   

    既然用Ado连接,何必再用ODBC哪,那不多此一举么
      

  6.   

    1 试试安装delphi的补丁包
    2 你的表里面的数据类型有哪些?
      

  7.   

    用了ADO还用ODBC,为什么要让数据走弯路呢?
      

  8.   

    我也知道用了ADO就没有必要用ODBC,我只希望从纯技术的角度问一下这个问题。
    很希望那位老兄能讲一讲ODBC和ADO的存取结构方面的问题。
      

  9.   

    我倒认为是Adotable的问题,可以考虑用Adoquery用ODBC连接.你分析的原因也很由道理,Adotable毕竟在Ado的体系中不存在,注意它不是来自recordset,而是为了和BDE中的table一样而封装的组件
      

  10.   

    ODBC和ADO的存取结构方面的问题
    微软的网站上有这方面的很多文章,你可以看看从DAO-RDO-ADO以及ODBC/DBLiabary的历史就明白了.(不好意思,欧是拨号,太慢了)
      

  11.   

    是你的软件问题,我虽然没看你的代码,但大致是这个原因:
    你写了一个类似于下面一行的代码:
    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;……
      

  12.   

    这个破论坛,对于信誉分的执行:
    曾通知自己删除帖子,可是有好多帖子点击时是找不到的(大家应当有此方面的经验),
    前几天我对信誉分提出质疑,现在看到信誉分又降了,我发誓从未做过什么不道德的事。相反我解决过别人几个两三百分的帖子,对于这种相对较难的回应难道信誉分就没丁点增加吗?说不定哪天会像这个论坛中曾经的的高手Focus老鱼(名列前矛茅的兄弟)一样(虽然水平与他相差甚远),一走了之。
    失望,没有选择时可以选择离开。
      

  13.   

    leeky(雅痞。千年虫)
    您好:
    我考虑过这个问题,也作过相关实践,不是您说的哪个问题。
      

  14.   

    也没用,就是用 TAdoTable控件通过ODBC直接连了一个库,在TableName属性中选了一张表,激活了它,就运行,就出错了。
      

  15.   

    ADOtable 连接时可以用相对路径吗?
      

  16.   

    我也碰到过,不过它只是报错,你 ‘确定’ 后再运行,就可以通过了;并且编译后就没有报错了,一切运行正常。具体原因 我也在查,我还在win98+delphi6下试了也不行。
      

  17.   

    另外我的系统也没有装sql sever,显然这与它也没有什么关系
      

  18.   

    另外我还在win2000+delphi7下试了情况依旧
      

  19.   

    1、先打delphi的补丁看看行不行,我碰过类似的问题,后来打补丁解决问题。
    2、查ODBC,我想问题出在这的可能性较大,因为您是装了SQL后才出现问题的。
      

  20.   

    我的系统也没有装sql sever,显然这与它也没有什么关系
      

  21.   

    只在编程环境报错你可以不管了,
    我用ADO在调试时也会有错,但如果直接运行.exe就没问题,而在相关地方也没进行容错处理。
      

  22.   

    不用odbc方式改用oledb,其他没动,运行正常