全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1323
推到 Plurk!
推到 Facebook!

如何設計資料庫

尚未結案
guohua_fu
一般會員


發表:44
回覆:50
積分:18
註冊:2003-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-27 14:37:06 IP:211.96.xxx.xxx 未訂閱
各位大俠: 我現在有一個問題請教大家,我有一個Table,表內的數據有些是一樣的, 所以當我要刪除一筆的時候它會把其它筆一樣的數據也刪除。 如何設計此表才可避免此問題呢? 我用的是SQL Server2000 jacky
------
jacky
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-27 14:54:01 IP:63.84.xxx.xxx 未訂閱
您好﹗    請充分利用鍵值欄位的作用﹗配合鍵值欄位的值即可刪除單筆資料錄﹒    參考看看﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
guohua_fu
一般會員


發表:44
回覆:50
積分:18
註冊:2003-06-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-27 15:50:00 IP:211.96.xxx.xxx 未訂閱
能說清楚一點嗎? 小弟我實在是菜鳥! jacky
------
jacky
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-27 16:18:49 IP:63.84.xxx.xxx 未訂閱
您好﹗    無論使用何種形態的資料庫﹐在設計資料表的時候﹐都要注意設定其鍵值欄位(Unique)﹐所謂鍵值欄位就是所對應的欄位值是唯一的﹐獨一無二的﹐這樣的話﹐當程式碼對資料表進行資料異動(比如說Post, Delete等等)﹐或者是對資料表進行查詢(比如說Locate)這些工作時﹐皆可使用到這個鍵值欄位作為資料表異動或者查詢的條件值﹐正因為其值是獨一無二的﹐所以就不會出現同時影響多筆相同的資料錄﹒    就您的例子來講﹐如果鍵值欄位比較難取的話﹐也可以利用一個類似自動編號的欄位來作為鍵值欄位﹐每新增一筆資料錄都會賦于其一個編號﹐這樣的話﹐就可利用此欄位配合再做資料表的異動作業﹒    參考看看﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
guohua_fu
一般會員


發表:44
回覆:50
積分:18
註冊:2003-06-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-27 16:22:40 IP:211.96.xxx.xxx 未訂閱
謝謝您的解答! 由於之前的資料沒有出現過類同這個問題,所以我也就沒設定, 如果我現在增加一個的話,應該如何處理呢? 因為這個表有1萬多筆資料,我怕出問題! < >< >
------
jacky
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-27 17:13:42 IP:63.84.xxx.xxx 未訂閱
您好﹗    可以這樣試試看(請先將您的資料庫作備份)﹕ 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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-27 17:35:51 IP:211.96.xxx.xxx 未訂閱
噢,這樣應該是可以。 但以後每新增一筆就得判斷這個值再加1進行存檔是吧? 相信自己,你是最棒的!
------
jacky
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-27 18:10:19 IP:63.84.xxx.xxx 未訂閱
您好﹗    這樣做的目的是為了給您目前資料表中已有的資料加上編號欄位值﹐至少不會讓您一筆一筆的做修改吧﹗ 至于以后的工作﹐我想應該不必這樣做了﹐但可以利用一些程式碼來控制其在新增資料的時候﹐自動賦于其編號值(目前最大的編號值再加 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-27 18:29:11 IP:61.30.xxx.xxx 未訂閱
你好: 如果是 SQL Server2000 其實不需要如此麻煩,只要數值欄位的識別屬性 中選擇 [是(不可重複)] SQL 便會在新增紀錄時自行產生紀錄的編號。且已存 在的資料會自行產生編號,不需要另寫程式。 < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
guohua_fu
一般會員


發表:44
回覆:50
積分:18
註冊:2003-06-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-10-29 09:45:40 IP:211.96.xxx.xxx 未訂閱
ha009兄: 已解決,謝謝! ====================== ^_^ 相信自己,你是最棒的! jacky ====================== 發表人 - guohua_fu 於 2003/10/29 10:05:56
------
jacky
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-10-29 10:17:06 IP:61.30.xxx.xxx 未訂閱
你好: 其實說的簡單一點,Table 中的 PK 有如人們的身分證號碼,不能重複。也因為這個規則,我們才能 精準的操作資料庫內的資料。    假設 AAA 表新增一個名為 OID 的 PK 欄位,欄位屬性是 AutoInc 的。    1.未跟其他表格作關聯。 由於未跟其他表格作關聯,所以問題不大。往後處理該表格時記得使用 OID 當作辨識的 Key。   Select * From AAA Where (OID Between 50 and 100)    2.跟其他表格有關聯。 要跟其他表格關聯只要將同屬性的欄位加入要關聯的 Table 既可。至於正確性則可能需要人工比對囉。    
系統時間:2024-11-25 8:29:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!