使用SimpleDataSet新增(Insert)一筆資料 有primary key的欄位發生錯誤 |
答題得分者是:P.D.
|
jasonweb
一般會員 發表:2 回覆:3 積分:1 註冊:2009-01-05 發送簡訊給我 |
最近在練習寫存取database的delphi程式
我使用的方式是SQLConnection->SQLQuery->DataSetProvider->ClientDataSet->DataSource->DBgrid 然後套DBNavigator來作資料的處理 使用的DB是MS SQL server 2006 其中一個資料表格式如下
修改、刪除資料都正常 可是當要新增一筆資料時 如我只新增了 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 發送簡訊給我 |
1.既為primary key, 代表MyTypeID 不可以重覆
2.有些資料庫primary key 不可為空白 3.如果只是要解決你的問題, 只要MytypeID輸入一個資料庫中沒有的編號就不會發生 4.如果你想徹底解決這個問題, 那你必須在存入(POST)之前就要檢查PrimaryKey是否有重覆 5.如果你能力還不到這裡的話, 那資料庫就不要指定有PrimaryKey, 以免阻礙你的學習 ===================引 用 jasonweb 文 章=================== 使用的DB是MS SQL server 2006 其中一個資料表格式如下
修改、刪除資料都正常 可是當要新增一筆資料時 如我只新增了 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 發送簡訊給我 |
感謝您的回應
取消primary key是可行的 另外我想問的是 像如上面的表格 我用sql只需要用 [code sql] INSERT INTO DBTest.Member (MTypeName) VALUES ('測試會員'); [/code] 無需指定MTypeID的值即可新增資料 那像用simpledataset 是否是將所有欄位作更新 所以才會發生此錯誤? 另外我也試過輸入primary key 例如目前資料表裡有4筆資料 我在dbgrid輸入
所以想知道 是否這樣不可行 ===================引 用 P.D. 文 章=================== 1.既為primary key, 代表MyTypeID 不可以重覆 2.有些資料庫primary key 不可為空白 3.如果只是要解決你的問題, 只要MytypeID輸入一個資料庫中沒有的編號就不會發生 4.如果你想徹底解決這個問題, 那你必須在存入(POST)之前就要檢查PrimaryKey是否有重覆 5.如果你能力還不到這裡的話, 那資料庫就不要指定有PrimaryKey, 以免阻礙你的學習 |
||||||
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|||||||
jasonweb
一般會員 發表:2 回覆:3 積分:1 註冊:2009-01-05 發送簡訊給我 |
感謝PD大大的回覆
原來會造成這個錯誤是因為ClientDataSet 的Field有二個地方可以設定 一個是雙擊ClientDataSet元件 一個是在屬性欄有一個 FiledDef 我二Field設定都把Primary Key的欄位設成required = false 然後把ProviderFlags.pfInKey設為 True後 整個就正常運作了 原來是設定不全而不是mssql的問題 再次感謝 PD大大的回應 ===================引 用 P.D. 文 章=================== 如果你取消Primarykey是沒有錯誤的, 那代表問題可能還是出在Primarykey的回存上, 我沒有使用過MYSQL 與simplydataset, 可能要請其他高手為你解答, SORRY! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |