如何設計資料庫 |
尚未結案
|
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 無論使用何種形態的資料庫﹐在設計資料表的時候﹐都要注意設定其鍵值欄位(Unique)﹐所謂鍵值欄位就是所對應的欄位值是唯一的﹐獨一無二的﹐這樣的話﹐當程式碼對資料表進行資料異動(比如說Post, Delete等等)﹐或者是對資料表進行查詢(比如說Locate)這些工作時﹐皆可使用到這個鍵值欄位作為資料表異動或者查詢的條件值﹐正因為其值是獨一無二的﹐所以就不會出現同時影響多筆相同的資料錄﹒ 就您的例子來講﹐如果鍵值欄位比較難取的話﹐也可以利用一個類似自動編號的欄位來作為鍵值欄位﹐每新增一筆資料錄都會賦于其一個編號﹐這樣的話﹐就可利用此欄位配合再做資料表的異動作業﹒ 參考看看﹗ =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 可以這樣試試看(請先將您的資料庫作備份)﹕
1. 在資料表中新建一個欄位﹐并設定為鍵值索引欄位﹒
2. 利用程式碼給這個欄位加上欄位值.
以下是相關程式碼部分﹐用ADOQuery資料集元件舉例﹕
Var I : Integer; begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From 訂單'); ADOQuery1.Open; ADOQuery1.First; I := 0; While not ADOQuery1.Eof do begin I := I 1; ADOQuery1.Edit; ADOQuery1.FieldByName('編號').AsInteger := I; ADOQuery1.Post; ADOQuery1.Next; end; ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From 訂單'); ADOQuery1.Open; end;執行至此就已經給所有資料的編號欄位都賦于一個新的并不重复的值﹒ 其它相關文章參考連結﹕ http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37962 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38265 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 這樣做的目的是為了給您目前資料表中已有的資料加上編號欄位值﹐至少不會讓您一筆一筆的做修改吧﹗
至于以后的工作﹐我想應該不必這樣做了﹐但可以利用一些程式碼來控制其在新增資料的時候﹐自動賦于其編號值(目前最大的編號值再加 1 就可以了)﹐您可將如下程式碼寫在ADOQuery1或者其它您使用的對應資料表的元件的OnNewRecord事件中﹐請先另加一個ADOQuery2元件﹐以用作查詢最大編號欄位值﹕
Var I : Integer; begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select Max(編號) 最大編號 From 資料表名稱'); ADOQuery2.Open; I := ADOQuery1.FieldByName('最大編號').AsInteger 1; ADOQuery1.FieldByName('編號').AsInteger := I; ... end;參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
guohua_fu
一般會員 發表:44 回覆:50 積分:18 註冊:2003-06-19 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
其實說的簡單一點,Table 中的 PK 有如人們的身分證號碼,不能重複。也因為這個規則,我們才能
精準的操作資料庫內的資料。 假設 AAA 表新增一個名為 OID 的 PK 欄位,欄位屬性是 AutoInc 的。 1.未跟其他表格作關聯。
由於未跟其他表格作關聯,所以問題不大。往後處理該表格時記得使用 OID 當作辨識的 Key。
Select * From AAA Where (OID Between 50 and 100) 2.跟其他表格有關聯。
要跟其他表格關聯只要將同屬性的欄位加入要關聯的 Table 既可。至於正確性則可能需要人工比對囉。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |