線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1063
推到 Plurk!
推到 Facebook!

請問 dbExpress + TClientDataSet + MSSQL Identity 欄位

缺席
jessecht
一般會員


發表:1
回覆:2
積分:0
註冊:2002-11-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-15 21:26:38 IP:203.204.xxx.xxx 未訂閱
現在使用 dbExpress TClientDataSet 配合 MSSQL 的 Identity 欄位更新資料時,似乎有蠻大的問題。之前在BDE下使用 TUpdateSQL 可以指定在 Insert 時不更新該值,一切運作都沒問題。 但現在使用 dbExpress 開發,因已經不能自己指定SQL Command, 若是把 Identity 欄位加入, 不管如何設定該欄 TClientDataSet之BeforePost均會出現 "Field Value Required"之錯誤,而若 TSQLQuery 不選該欄位, 且TDataSetProvider設定 UpdateMode=usWhereAll,除非二筆資料完全一樣,否則倒是可以勉強作業, 但...沒有更好的解決方式嗎?
jessecht
一般會員


發表:1
回覆:2
積分:0
註冊:2002-11-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-15 23:51:39 IP:203.204.xxx.xxx 未訂閱
再研究李維大師對TDataSetProvider之說明修正測試後,只有Identity欄位之ProviderFlags設成 pfInUpdate=False, pfInWhere=True, pfInKey=True, pfHidden=True( TClientDataSet 不出現此欄 ), 結果產生之 SQL Command 大致上正確( Update / Delete ), 但 Insert 時卻仍會出現 "Field Value Required" 之錯誤(基本上雖在 TClientDataSet看不到該欄-Add All Field沒看到), 但Post時仍會造成影響, 根本無法送出要 Insert 記錄之資料, 不知是否有人可切磋一下解法呢。
jessecht
一般會員


發表:1
回覆:2
積分:0
註冊:2002-11-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-16 00:21:18 IP:203.204.xxx.xxx 未訂閱
DBClient.PAS procedure TCustomClientDataSet.InternalPost; begin inherited; if State = dsEdit then Check(FDSCursor.ModifyRecord(ActiveBuffer)) else Check(FDSCursor.InsertRecord(ActiveBuffer)); if AggregatesActive then DoAggUpdates(State = dsEdit); end; Check(FDSCursor.InsertRecord(ActiveBuffer)); 到了這一行就出現錯誤了,不知是否是 TClientDataSet 的 Bug, 程式應該是沒錯啊
系統時間:2024-11-23 12:30:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!