fire dac 執行錯誤 |
答題得分者是:GrandRURU
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位:
我換了 berlin 10.1 u1 的系統後, 原來在10.1 的版本編譯出來的 win32 fmx project 都很ok, 但在這版本, 其中我有創建一個 FireDac Table 的資料庫, 其中有一個欄位是 ftblob(或 ftGraphic), 只要我open 這個Table 就引發 [FireDAC][Stan][Eval]-104 Type mismatch in expression 的錯誤, 但只要移除這個欄位就沒事, 重點是在 berlin 10.1 之前的版本不會這樣, 是不是 embd 又改了什麼, 不知各位有沒有這方面的遭遇? 編輯記錄
P.D. 重新編輯於 2016-10-01 22:17:25, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
今天特別再浪費一天的時間測試, 我已得到證實, 以下均同一個專案
xe8, xe10 seattle, xe10 seattle update1 , FireDAC 都正常的運作 xe10.1 Berlin, xe10.1 Berlin Update 1 圴告失敗, 有 Filtered=True 一定出問題, 有一些沒有 Filtered 的, 會出現 DataLink... Error 的問題, 所以狀況不只是 Filtered 而己, 但問題不在 FireDAC, 使用 TkbmMemTable 元件一樣發生, 所以是 XE 本身的狀況, 至於什麼問題, 不知道... 如果解不開, 基本上 XE 是沒辦法再用下去了! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
再補充一個
實測不管在 FMX 或 VCL 專案下都會 而且不用寫 CODE, 拉一個 FDCONNECTION, FDTABLE, FDWAITCURSTOR, 把一個 SQLITE 資料庫指向 CONNECTION 上, 並啟動它, 然後 FDTABLE 指向 SQLITE TABLE NAME, 設定 FILTER='XXXXX', FILTERED=TRUE, 最後啟動 FDTABLE 就引發錯誤, 不知是我的 BERLIN 有問題, 還是本身 BERLIN 的問題 以上問題在 10.1, 10.1U1 都會, 但在 SEATTLE 10, SEATTLE 10 U1 不會 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
我這邊測試使用上一切正常
不知您手邊有沒有測試用的資料庫可以放上來讓我試試? ===================引 用 P.D. 文 章=================== 再補充一個 實測不管在 FMX 或 VCL 專案下都會 而且不用寫 CODE, 拉一個 FDCONNECTION, FDTABLE, FDWAITCURSTOR, 把一個 SQLITE 資料庫指向 CONNECTION 上, 並啟動它, 然後 FDTABLE 指向 SQLITE TABLE NAME, 設定 FILTER='XXXXX', FILTERED=TRUE, 最後啟動 FDTABLE 就引發錯誤, 不知是我的 BERLIN 有問題, 還是本身 BERLIN 的問題 以上問題在 10.1, 10.1U1 都會, 但在 SEATTLE 10, SEATTLE 10 U1 不會 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
您的問題分成兩個部份
1.拉一個 FDCONNECTION, FDTABLE, FDWAITCURSTOR, 把一個 SQLITE 資料庫指向 CONNECTION 上, 並啟動它, 然後 FDTABLE 指向 SQLITE TABLE NAME, 設定 FILTER='XXXXX', FILTERED=TRUE, 最後啟動 FDTABLE 就引發錯誤 2.創建一個 FireDac Table 的資料庫, 其中有一個欄位是 ftblob(或 ftGraphic), 只要我open 這個Table 就引發 [FireDAC][Stan][Eval]-104 Type mismatch in expression 的錯誤 問題1我實測是沒有問題,使用的是Delphi隨附的範例資料庫 問題2因我不會SQLite的資料庫建立,所以才需要您提供手邊的資料庫進行測試 以上 ===================引 用 P.D. 文 章=================== RuRu兄, 讓您跳出來測, 真不好意思, 先前我也有給 Q-COM 測試專案, 剛剛收到他的回覆也和你的答案一樣, 因為專案都一樣, 我猜是不是安裝上的環境不同而影響的 因為我這邊確實引發, 而且很簡單測, 就我上回所說的三個元件, 只要啟動了FILTERED=TRUE 就當了, 所以專案或不專案都沒差 而且在 SEATTLE 真的也沒問題, 如果您有時間, 不妨我帶筆電過去找你, 實際RUN就知道了 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
RuRu兄
範例花了幾個小時寫好了, 同時我還錄下了在我的 Berlin 10.1 U1 的系統操作的過程影片檔也在裡面, 有點大 範例使用 FireDac FDTable 及 FDQuery 分別做案例, 另外也用了 KbmMmemTable 另做一個案例, 所以如果你沒有安裝 Kbm , 開啟專案可能會引發錯誤, 不管它就好了 想要看結果, 直接run project.exe 即可, 要看影片, runsample.mp4 大概看了影片就知道我在說什麼了, 不管寫法是否合理或 "不建議用filter 這樣做法"的考量,, 我實測在 seattle 是沒有問題, , 然而Q-COM回覆測試沒有問題, 我實在不知該如何除錯了, 要如何修正! 如果您有時間可以測測看, 或許你的也不會有問題, 但在我這, 同樣的環境(seattle, berlin), 安裝的東西都一樣, 一個行, 一個不行, 我只想原因出在那裡? 感恩~~~ ps. 如果要開專案或測試, 解壓後請放在\test\ 目錄下, 因為我路徑寫死了 Berlin 10.1 U1 版本的程式 http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=109569 Seattle 10 U1 編譯的程式 http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=109570 ===================引 用 GrandRURU 文 章=================== 您的問題分成兩個部份 1.拉一個 FDCONNECTION, FDTABLE, FDWAITCURSTOR, 把一個 SQLITE 資料庫指向 CONNECTION 上, 並啟動它, 然後 FDTABLE 指向 SQLITE TABLE NAME, 設定 FILTER='XXXXX', FILTERED=TRUE, 最後啟動 FDTABLE 就引發錯誤 2.創建一個 FireDac Table 的資料庫, 其中有一個欄位是 ftblob(或 ftGraphic), 只要我open 這個Table 就引發 [FireDAC][Stan][Eval]-104 Type mismatch in expression 的錯誤 問題1我實測是沒有問題,使用的是Delphi隨附的範例資料庫 問題2因我不會SQLite的資料庫建立,所以才需要您提供手邊的資料庫進行測試 以上 ===================引 用 P.D. 文 章=================== RuRu兄, 讓您跳出來測, 真不好意思, 先前我也有給 Q-COM 測試專案, 剛剛收到他的回覆也和你的答案一樣, 因為專案都一樣, 我猜是不是安裝上的環境不同而影響的 因為我這邊確實引發, 而且很簡單測, 就我上回所說的三個元件, 只要啟動了FILTERED=TRUE 就當了, 所以專案或不專案都沒差 而且在 SEATTLE 真的也沒問題, 如果您有時間, 不妨我帶筆電過去找你, 實際RUN就知道了 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
onfilterrecord 我自己的實際經驗, 其效能比用 filter 更慢, 所以我幾乎都不用這樣的寫法(自dephi5以來)
目前我只好改寫用法, 全部捨棄 filter 用法, 改用 FDQuery 或 kbm 模組 但使用 kbm 也有問題 例如, KbmMemTable1 中有4個欄位(在 Field Editor 新增 dtype, dno, phrase, pict) 通常我們在程式中就會這樣寫 kbmMemTable1DTYPE.AsString (或 .Value) , 但在 berlin 10 後的版本, 實際run時會引發 Accerr Reading Errr $00000000... 的錯誤, 我也是查了很久, 發現如果改用 kbmMemTable1.FieldByName('DTYPE').AsString 就可以過了, 令人百思不得其解? 這用了好幾百年的寫法竟然過不去... 另外, 我發現自 idera接手後, 我個人實測的結果(以下純屬個人看法), idera 是資料庫為主的公司, 應該是有動了 xe 的內部設計, 因為不只這個問題, 事實上已有好幾個案例, 這些問題在 xe8 都不曾出現的 1. 在 debug mode 我的專案(不是本帖這個, 是我實際開發的), 在main form 開完後會引發 dbxerror (remote ....) 2. 用 listview Livebinging firedac table, 開啟 onitemdelete (即設定右滑可顯示 [Delete]按鈕), 當 record 在最後一筆時, 在 onitemdeleteEvent 上會造成 Argument out of range 問題(只要不是最後一筆就沒有問題), 如果是另外寫一個 button 來執行也不會引發錯誤 Event 的程式很簡單, 只有 FDTable1.Delete 而已 如果 Livebinging 不指定 * -> synch (同步), 也不會有問題, 但只要串起來, 就會錯誤 這些都是我們現有客戶反應過來的, 害得用戶覺得我們 app 換了新版很不穩定, 閃退機率很高, 諸如此類, 還有其他問題都是相關資料庫中莫名其妙的引發, 真不知道該如何繼續下去????? ===================引 用 GrandRURU 文 章=================== 您的專案的確有測出您說的問題 一勞永逸的作法可使用:TDataSet.OnFilterRecord 事件,把您要篩選的方式寫在這個事件裡 這個方法從 Delphi 5 - 10.1都適用,也不用等 EMBT 去修正 Filter 的 BUG 僅供您參考 以上
編輯記錄
P.D. 重新編輯於 2016-10-11 12:22:27, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
獲李維老師的說明
建議 FireDac 的資料庫建立 不要用 [TEXT] 而必須使用 VARCHAR() 來定義, 我改了程式後, 的確問題就不存在了, 但這仍難以解釋在 Seattle 10 之前不管用 [TEXT] 或 [VARCHAR] 都不會有這個問題(我指的是在我的電腦環境) 而 Berline 10.1 (include Update 1) 卻會的問題, 但不管如何, 這個困擾一個月的事件, 總算可以告一段落 也提供各位之前 embd 教我們建立的做法 CREATE TABLE IF NOT EXISTS [PHRASE] ( [DTYPE] TEXT, [DNO] TEXT, [PHRASE] TEXT, [NUM] FLOAT, [PICT1] BLOB ) 最好改成這樣 CREATE TABLE IF NOT EXISTS [PHRASE] ( [DTYPE] VARCHAR(1), [DNO] VARCHAR(6), [PHRASE] VARCHAR(50), [NUM] FLOAT, [PICT1] BLOB ) |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
李維老師再回覆, 或許在 Berlin 10.1 之後, 原廠對資料庫的定義更嚴謹了,
"這可能是因為以前版本的驅動程式和compiler比較寬鬆, 所以不會出錯, 但愈新的驅動程式和compiler愈來愈嚴格, 10.1 Berlin版的驅動程式和compiler已經不允許這樣混用所以出錯了" 所以, 之前版本所釋出的 [text] 用法就不要再用了唄! 也感謝 RuRu兄的協助測試, 本案就先告一段落實! 這個問題讓我足足用了十四天的時間反覆在捉及改寫, 唉~~~該怎麼說呢? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |