請問 dbExpress + TClientDataSet + MSSQL Identity 欄位 |
缺席
|
jessecht
一般會員 發表:1 回覆:2 積分:0 註冊:2002-11-07 發送簡訊給我 |
現在使用 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 發送簡訊給我 |
再研究李維大師對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 發送簡訊給我 |
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, 程式應該是沒錯啊
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |