如何於存檔前判斷資料是否重複?? |
尚未結案
|
jch
中階會員 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
您好:
ADOConnection1.BeginTrans; try ADOQuery1.Post; ADOConnection1.CommitTrans; except on E:Exception do begin ADOConnection1.RollbackTrans; if Pos('Attempt to insert duplicate key row',E.Message)>0 then //假設當資料重複時資料庫回傳的錯誤訊有以上字串.... raise Exception.Create('新增的資料已經存在') else raise Exception.Create('資料儲存失敗,錯誤訊息如下:'#13 E.message); end; end;~~應無所住而生其心~~ 發表人 - terrychen 於 2004/02/12 23:02:31 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 若不使用交易處理方法, 也可試試如下方法, 截自于小弟日前完成的專案相關部分, ADOTable1對資料庫進行異動, 而ADOQuery1是做查詢核可的工作, 程式碼請寫于ADOTable1元件的BeforePost事件中:
procedure TForm3.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;參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
jch
中階會員 發表:111 回覆:224 積分:66 註冊:2003-12-01 發送簡訊給我 |
|
terrychen
尊榮會員 發表:90 回覆:794 積分:501 註冊:2003-05-01 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |