2010-07-28 153 views
2

我用火鳥2.1,從DevArt和德爾福2010年我的一些報道dbExpress驅動程序是使用Delphi 2006的工作停止工作,並製作表示「算術異常,數值溢出錯誤消息,或字符串截斷「已發生。在我的代碼這一點上發生錯誤:字符串截斷的ClientDataSet

cds.Data := dsProvider.Data; 

我發現在我的SQL語句引起錯誤的地方:

iif(ytd.hPayType <> -1,t.sCode, 'NET') sPayType 

T.sCode是一個varchar(10)字段。我的結論是該查詢返回數據到dsProvider並且當dsProvider.Data傳遞給cds.Data,在CDS部件都將根據其接收到的第一個值的字段寬度。如果我將「iif」更改爲CASE語句,我會得到相同的錯誤消息。我設法這樣做是爲了解決此問題:

CAST(iif(ytd.hPayType <> -1,t.sCode, 'NET') AS varchar(10)) sPayType 

由於這個曾經在2006年德爾福工作沒有CAST,我認爲新的行爲是由於一個更新的TClientdataSet。擁有舊的,更寬容的行爲將是很好的。是否有配置的ClientDataSet接受這種沒有抱怨或者我只是需要告訴我的用戶CAST基於IIF和CASE語句字符串結果的方式嗎?

回答

0

好了,有了一點經驗,它看起來像我看到這個截斷誤差一致顯示了德爾福2010版ClientDatasets的。如果我找到一個不涉及在查詢中使用CAST的解決方案,我會在這裏發佈它。但現在,我要關閉這個帖子。

0

我曾經在firebird上工作過很多,當你已經在db中存儲了一個很大的(長度)varchar字段值時,這個錯誤會發生,你試圖在delphi中「獲取」字符串,試試將數據庫中的值更新爲較小的(長度)varchar。我不確定是否會爲你工作,但嘗試一下。

+0

它實際上好像火鳥正確地做它的工作這一點。數據從Firebird數據庫中的varchar(10)字段轉換爲TSQLQuery。在將數據通過數據集提供者傳輸到客戶端數據集的步驟中出現問題。我猜測,當客戶端數據集獲得基於函數或CASE語句的字段,它不知道的領域可能要持續獲得可惜設置接收字段的長度在任何長度數據的第一個實例。這可能是唯一的解決辦法就是我所做的CAST。 – jrodenhi 2010-07-29 20:09:02