-1

有谁知道这是怎么回事?

我已将所有数据库对象声明为整数,并将我的数据集对象声明为整数

当我运行我的 ado 查询时,我从这里获取值,我试图将它分配给一个数据集,该数据集也被声明为整数。但它一直给我

不兼容的类型:widestring 和 tintegerfield

这是确切的代码:

dxMemData1.FieldByName(dxMemData1RetailCalendarPeriodID) := 
  adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r;
4

1 回答 1

7

dxMemData1.FieldByName(dxMemData1RetailCalendarPeriodID) := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r

不应该编译。

它看起来像是dxMemData1RetailCalendarPeriodID您在 dxMemData1 数据集上创建的持久字段对象。该FieldByName方法用于通过名称查找字段,但您不需要这样做,因为您已经拥有该字段,dxMemData1RetailCalendarPeriodID

所以,你需要的只是

dxMemData1RetailCalendarPeriodID.AsInteger := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r

编译器错误的原因是FieldByName期望传递一个给出字段名称的字符串,而您试图传递字段本身,它是 TObject 后代而不是字符串。以下内容会起作用,但由于我已经展示了代码,因此没有必要:

dxMemData1.FieldByName(dxMemData1RetailCalendarPeriodID.FieldName) := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r;

更新 您说您收到“无效的变体操作”错误。如果您使用此代码,您是否仍然得到它:

if not adoTreeWindow.FieldByName('RetailCalendarPeriodID').IsNull then    
  dxMemData1RetailCalendarPeriodID.AsInteger := adoTreeWindow.FieldByName('RetailCalendarPeriodID').AsIntege‌​r

?

于 2016-12-15T12:52:08.830 回答