类型转换的问题--Invalid class typecast,深入讨论!(100分)

  • 主题发起人 主题发起人 almeidar
  • 开始时间 开始时间
A

almeidar

Unregistered / Unconfirmed
GUEST, unregistred user!
我不知道原因,还望各位解答:
Table1 : TTable;
ADODataSet1 : TADODataSet;

TBlobStream(Talbe1.FieldByName('xxx') as TBlobField,bmWrite) 没有错误

TBlobStream(ADODataSet1.FieldByName('xxx') as TBlobField,bmWrite) 则出现
Invalid class typecast 错误。

TTable和TADODataSet都由TDataSet而来,
Table1.FieldByName和ADODataSet1.FIeldByName类型都是TField,为什么还会出现这种
问题呢?
 
?
TBlobStream(Talbe1.FieldByName('xxx') as TBlobField,bmWrite) 这是什么用法?我怎么没见过?
类名里面有两个参数??!!难到是创建函数?这又不是vc,
 
agree with zj1978,
 
是TAdoBlobField,试试看。
 
是CreateBlobStream吧
 
有TADOBlobField这个类吗?好象没有吧。
zj1978,怎么会没有呢,看看帮助!
 
zj1978的意思是说
如果 TBlobStream(Talbe1.FieldByName('xxx') as TBlobField,bmWrite)这句话是强制转换
就应该只有一个参数,bmWrite参数就不需要了;
如果是创建TBlobStream的实例,
就应该这样 BlobStream1:=ADODataSet1.CreateBlobStream(ADODataSet1.FieldByName('xxx') as TBlobField,bmWrite);
或BlobStream1:= TBlobStream.Create(ADODataSet1.FieldByName('xxx') as TBlobField,bmWrite);
不同于VC的构造方法。
 
小人物:
是我写得太省略了,本来只是想把这个方法的调用情况写出来就行了,正确的写法应该
是你的那种。

BlobStream1:= TBlobStream.Create(ADODataSet1.FieldByName('xxx') as TBlobField,bmWrite);
这种方法是不行的,运行时会出现 invalid class typecast,

我试试另一种。
 
我也遇到过这个问题,把动态转换改成静态转换试试!
BlobStream1:= TBlobStream.Create([red]TBlobField(ADODataSet1.FieldByName('xxx')),[/red]bmWrite);
 
SuperJS,我两种方法都试过了,你遇到的是同样的问题吗?后来是怎么解决的?
 
我有类似的问题,最后是改成静态转换教好了,奇怪中......
 
你太幸福了。呵呵。
 
能不能告诉我为什么?我想知道原因:
TTable和TADODataSet都由TDataSet而来,
Table1.FieldByName和ADODataSet1.FIeldByName类型都是TField,为什么还会出现这种
问题呢?
 
后退
顶部