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

明细表索引重复导致key violation的问题(初学,请多包涵)

答題得分者是:bestlong
samuel818
一般會員


發表:4
回覆:6
積分:2
註冊:2006-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-06 12:06:32 IP:219.132.xxx.xxx 訂閱
用Database Desktop:设置主表GPP-明细表GPPindex(paradox),主表字段“编号”设为key;明细表设置字段“序号”为Key,另一字段“编号”为secondary index并与主表字段“编号”建立table lookup。

在程序中:
1,用dbgrid1,table1和datasource1连接到主表GPP;
2,用dbgrid2,table2和datasource2连接到主表GPPindex。table2设置如下:
MasterSource: DataSource1; IndexFieldName: '编号'; MasterFields: '编号'; Active: true
3,运行基本正常,但在添加明细表的内容并保存时,一定要给“序号”一栏输入数字,且输入的序号一旦出现重复,系统就出错提示key violations!【如果明细表不设key只设secondary Indexs,又会提示index is read only! :((】
我想这是因为明细表的Key出现重复吧?有什么办法使明细表可以避免出现重复索引?比如自动为field“序号”赋值?(教材上没有讲:()
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-06 13:29:21 IP:60.248.xxx.xxx 未訂閱
這樣的資訊不夠完整
請詳述所使用的資料表規格,以及使用的元件與屬性設定的過程
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
samuel818
一般會員


發表:4
回覆:6
積分:2
註冊:2006-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-06 13:33:49 IP:219.132.xxx.xxx 訂閱
更正:“明细表设置一个index”和“如果明细表不设index”的“index”应为“key”。
修改后如下

用Database Desktop:设置主表GPP-明细表GPPindex(paradox),主表字段“编号”设为key;明细表设置字段“序号”为Key,另一字段“编号”为secondary index并与主表字段“编号”建立table lookup。

在程序中:
1,用dbgrid1,table1和datasource1连接到主表GPP;
2,用dbgrid2,table2和datasource2连接到主表GPPindex。table2设置如下:
MasterSource: DataSource1; IndexFieldName: '编号'; MasterFields: '编号'; Active: true
3,运行基本正常,但在添加明细表的内容并保存时,一定要给“序号”一栏输入数字,且输入的序号一旦出现重复,系统就出错提示key violations!【如果明细表不设key只设secondary Indexs,又会提示index is read only! :((】
我想这是因为明细表的Key出现重复吧?有什么办法使明细表可以避免出现重复索引?比如自动为field“序号”赋值?(教材上没有讲:()

bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-07 08:20:29 IP:60.248.xxx.xxx 未訂閱
若是單機程式的話,可以在 Detail TTable.OnNewRecord 事件中寫程式用另一個 TTable 元件去讀取目前最大序號

若是網路版多用戶的程式的話,就要考量到多人存取同時異動的管制問題。
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
samuel818
一般會員


發表:4
回覆:6
積分:2
註冊:2006-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-07 10:24:17 IP:219.132.xxx.xxx 訂閱
你真是我的明灯^_^...另一个table

===================引 用 文 章===================
若是單機程式的話,可以在 Detail TTable.OnNewRecord 事件中寫程式用另一個 TTable 元件去讀取目前最大序號

若是網路版多用戶的程式的話,就要考量到多人存取同時異動的管制問題。
P.D.
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-17 01:51:21 IP:61.67.xxx.xxx 未訂閱
不好意思, 兩岸用語大不同, 有誤解請見諒!
1.使用paradox資料庫, 設定 primary key 想要key值不重覆, 只能自己寫程式來判斷已存在的值則用程式將其排除, 別無他法
2.如果希望欄位能自動給予一連續值, 請利用desktop 系統進入資料表修正, 將要自動給值的欄位型態設置為 A 即可, 至於這個欄位是否做為primary key , 請考量需求性
samuel818
一般會員


發表:4
回覆:6
積分:2
註冊:2006-09-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-03-19 14:55:47 IP:219.132.xxx.xxx 訂閱
已经加入语句自动赋值,谢谢解答!
系統時間:2024-05-19 17:46:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!