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

與數據庫有關的問題,如何提示數據重復?

答題得分者是:cashxin2002
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-11 04:20:55 IP:148.244.xxx.xxx 未訂閱
與數據庫有關的問題,如何提示數據重復?    各高手們好!      現在輸入窗體中對某資料表輸入資料時,如果出現資料表與現輸入的資料相同時,請問提示資料表已經含有本資料?     能否給出程式碼范例?謝謝!    寫程序——新問題會接踵而來!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-11 08:53:21 IP:202.39.xxx.xxx 未訂閱
試試在 BeforePost 事件中用另一個 Query 來檢查有無重覆資料 例(假設用 Table1 來儲存/編輯資料):
procedure TForm1.Table1BeforePost(Dataset: TDataset);
begin
  Query1.Close;
  Query1.SQL.Text := 'Select * From Table1 Where id = '   Table1.FieldByName('id').AsInteger; // 檢查 Table1 內有無 id 欄位值有無重覆
  Query1.Open;
  if not Query1.IsEmpty then // Table1 內有重覆的 id 欄位資料了
  begin
    ShowMessage('Table1 內已有 id 欄位值為 '   IntToStr(Table1.FieldByName('id').AsInteger)   ' 的資料');
    Abort; // 中止接下來的動作
  end;
end;
-- hagar.
cashxin2002
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-11 09:12:29 IP:202.62.xxx.xxx 未訂閱
您好﹗    插個花﹕ 當我們在處理檢查是否有資料重复的時候﹐有一個特殊現象的出現﹐即在修改狀態下﹐用普通的判斷方法檢查資料是否重复是有Bug的﹐因為修改狀態中﹐此筆資料本來就是存在于資料庫內﹐如果沒有修改其鍵值欄位的內容﹐然后在做儲存的時候﹐檢驗程式碼就會發現資料表中已經有這筆資料的存在﹐所以將不允許儲存﹐所以我們需要在資料表的新增狀態和修改狀態中﹐寫入各自的判斷控制﹒
以下程式碼于ADOTable1元件的BeforePost事件中﹕
procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
Var
  IDRemark : String; //宣告一個變數, 用于記錄輸入資料的索引欄位值
begin
  IDRemark := IDRemark := Trim(ADOTable1.FieldByName('Idno').AsString);
  //利用IDRemark變數來記錄當前輸入的資料索引欄位值
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select Idno From Employee ');
  ADOQuery1.SQL.Add('Where Idno='''+IDRemark+''' ');
  ADOQuery1.Open;
  //使用一個ADOQuery元件來查詢資料表中是否有相同索引欄位值的記錄
  if not ADOQuery1.IsEmpty then
    begin
      if ADOTable1.State <> dsEdit then
        begin
          ShowMessage('ID NO is repeat!');
          Abort();
        //這里有兩個現象, 當您對某筆資料進行修改并存檔的時候, 也會出現BeforePost的事件, 所以先以ADOTable1的State狀態不為dsEdit(修改狀態)來做判斷
        end
      else
        begin
          if ADOQuery1.RecordCount > 1 then
            begin
              ShowMessage('ID NO is repeat!');
              Abort();
              //另一個現象就是修改狀態的Post, 因為修改之前的記錄中已經有這樣一筆資料記錄, 所以BeforePost事件中的判斷應以超過2筆資料為依据進行判斷
            end;
        end;
    end;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
BIG-ROM
初階會員


發表:94
回覆:91
積分:37
註冊:2005-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-11 10:14:14 IP:207.248.xxx.xxx 未訂閱
寫程序——新問題會接踵而來!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-11 10:46:51 IP:211.22.xxx.xxx 未訂閱
也來插花! > 請參考! -----------------------------------------------
系統時間:2024-06-27 22:36:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!