2016-12-15 87 views
-1

有誰知道這是怎麼回事?不兼容的類型:寬字符串和tintegerfield

我宣佈我的所有數據庫對象爲整數,以及我的數據集對象作爲整數

,當我跑我的ADO查詢,我得到的值,從這裏,我嘗試將其指定爲一個數據集,也被聲明爲整數。但它一直給我

不兼容的類型:WideString的和tintegerfield

這裏是確切的代碼:

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

您需要添加您正在使用的**確切**代碼,它會將此錯誤提供給您的q。 – MartynA

+0

下面是確切代碼dxMemData1.FieldByName(dxMemData1RetailCalendarPeriodID):= adoTreeWindow.FieldByName('RetailCalendarPeriodID')。AsInteger; – Fly

+0

我給了我資料,希望這個更清楚 – Fly

回答

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 

+0

非常感謝,這工作! :) – Fly

+0

好,但理解*爲什麼它工作更重要。 – MartynA

+1

downvoter是否會謹慎解釋事實/技術上有關此答案的錯誤? – MartynA

相關問題