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

使用SimpleDataSet新增(Insert)一筆資料 有primary key的欄位發生錯誤

答題得分者是:P.D.
jasonweb
一般會員


發表:2
回覆:3
積分:1
註冊:2009-01-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-05 13:28:58 IP:59.120.xxx.xxx 訂閱
最近在練習寫存取database的delphi程式
我使用的方式是SQLConnection->SQLQuery->DataSetProvider->ClientDataSet->DataSource->DBgrid
然後套DBNavigator來作資料的處理

使用的DB是MS SQL server 2006
其中一個資料表格式如下

Member 會員類別設定
欄位名稱
欄位長度
會員類型ID
會員類型名稱
15

修改、刪除資料都正常
可是當要新增一筆資料時
如我只新增了 MTypeName欄位的值為 "測試會員"後
點Post 後 MTypeID在dbgrid裡為空值
到這步都不會出問題
然後執行SimpleDataSet->ApplyUpdate(0)後
卻會顯示:
Project Project1.exe raised exception class EDatabaseError with message 'Database Server Error:
由於超過容量而無法建立新異動。


查了很多有關primary key跟database設定上的文章還是無頭緒
希望各位大大能幫忙指點
編輯記錄
jasonweb 重新編輯於 2009-01-06 12:41:42, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-05 13:56:06 IP:61.67.xxx.xxx 未訂閱
1.既為primary key, 代表MyTypeID 不可以重覆
2.有些資料庫primary key 不可為空白
3.如果只是要解決你的問題, 只要MytypeID輸入一個資料庫中沒有的編號就不會發生
4.如果你想徹底解決這個問題, 那你必須在存入(POST)之前就要檢查PrimaryKey是否有重覆
5.如果你能力還不到這裡的話, 那資料庫就不要指定有PrimaryKey, 以免阻礙你的學習
===================引 用 jasonweb 文 章===================

使用的DB是MS SQL server 2006
其中一個資料表格式如下

Member 會員類別設定
欄位名稱
欄位長度
會員類型ID
會員類型名稱
15

修改、刪除資料都正常
可是當要新增一筆資料時
如我只新增了 MTypeName欄位的值為 "測試會員"後
點Post 後 MTypeID在dbgrid裡為空值
到這步都不會出問題
然後執行SimpleDataSet->ApplyUpdate(0)後
卻會顯示:
Project Project1.exe raised exception class EDatabaseError with message 'Database Server Error:
由於超過容量而無法建立新異動。

jasonweb
一般會員


發表:2
回覆:3
積分:1
註冊:2009-01-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-05 14:17:37 IP:59.120.xxx.xxx 訂閱
感謝您的回應

取消primary key是可行的

另外我想問的是
像如上面的表格
我用sql只需要用
[code sql]
INSERT INTO DBTest.Member (MTypeName) VALUES ('測試會員');
[/code]
無需指定MTypeID的值即可新增資料
那像用simpledataset 是否是將所有欄位作更新
所以才會發生此錯誤?

另外我也試過輸入primary key
例如目前資料表裡有4筆資料
我在dbgrid輸入
5 測試會員
一樣ApplyUpdate(0)後 會發生上面的錯誤訊息

所以想知道 是否這樣不可行


===================引 用 P.D. 文 章===================
1.既為primary key, 代表MyTypeID 不可以重覆
2.有些資料庫primary key 不可為空白
3.如果只是要解決你的問題, 只要MytypeID輸入一個資料庫中沒有的編號就不會發生
4.如果你想徹底解決這個問題, 那你必須在存入(POST)之前就要檢查PrimaryKey是否有重覆
5.如果你能力還不到這裡的話, 那資料庫就不要指定有PrimaryKey, 以免阻礙你的學習

編輯記錄
jasonweb 重新編輯於 2009-01-05 14:21:11, 註解 無‧
jasonweb 重新編輯於 2009-01-05 15:08:09, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-01-05 19:06:44 IP:61.67.xxx.xxx 未訂閱
如果你取消Primarykey是沒有錯誤的, 那代表問題可能還是出在Primarykey的回存上, 我沒有使用過MYSQL 與simplydataset, 可能要請其他高手為你解答, SORRY!
jasonweb
一般會員


發表:2
回覆:3
積分:1
註冊:2009-01-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-01-05 20:28:16 IP:59.120.xxx.xxx 訂閱
感謝PD大大的回覆

原來會造成這個錯誤是因為ClientDataSet 的Field有二個地方可以設定
一個是雙擊ClientDataSet元件
一個是在屬性欄有一個 FiledDef
我二Field設定都把Primary Key的欄位設成required = false
然後把ProviderFlags.pfInKey設為 True後 整個就正常運作了
原來是設定不全而不是mssql的問題

再次感謝 PD大大的回應

===================引 用 P.D. 文 章===================
如果你取消Primarykey是沒有錯誤的, 那代表問題可能還是出在Primarykey的回存上, 我沒有使用過MYSQL 與simplydataset, 可能要請其他高手為你解答, SORRY!
系統時間:2024-11-23 6:40:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!