當輸入相同資料時, 跳出一個警告視窗 ? |
尚未結案
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
jasonchen613
初階會員 發表:67 回覆:75 積分:28 註冊:2003-03-25 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
jasonchen613
初階會員 發表:67 回覆:75 積分:28 註冊:2003-03-25 發送簡訊給我 |
我有試過了不行啊? procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
var dt:tadoquery;
begin
//只在新增模式判斷
if ADOTable1.State in [dsInsert, dsEdit] then begin
dt:=tadoquery.create(self);
dt.connection:=ADOConnection1;
dt.sql.text:='select count(車牌號碼) from moto where 車牌號碼='+quotedstr(adotable1.fieldbyname('車牌號碼').asstring);
dt.open;
if dt.fields[0].value > 0 then begin
showmessage ('已有此車牌號碼');
DBEdit1.SetFocus;
abort;
end;
dt.free;
end;
end;
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
看到大家討論這麼熱烈,小弟忍不住也要發表一下:
一筆資料是否重複輸入,這件事情原則上應由資料庫來判斷才對,也就是說,如果使用者輸入的資料重複的話,應該是資料庫回應錯誤訊息,然後Delphi再將該訊息轉成使用者可以看得懂的說明即可.為什麼非得要在使用者輸入之前先檢查呢?尤其如果你的程式是網路版時,如果有另一個人也輸入同一筆資料時,你的程式要怎麼處理?所以最好的方法,應是補捉資料庫回傳的錯誤訊息.
Database1.StartTransaction;
try
Query1.Close;
Query1.SQL.Text:='INSERT INTO TABLE ......'; //新增一筆資料的SQL指令
Query1.Prepare;
Query1.ExecSQL;
Database1.Commit;
except
on E:Exception do
begin
DataBase.Rollback;
if Pos('Attempt to insert duplicate key row',E.Message)>0 then //假設當資料重複時資料庫回傳的錯誤訊有以上字串....
raise Exception.Create('新增的資料已經存在')
else
raise Exception.Create('資料儲存失敗,錯誤訊息如下:'#13 E.message);
end;
end;
|
jasonchen613
初階會員 發表:67 回覆:75 積分:28 註冊:2003-03-25 發送簡訊給我 |
Sorry change.jian大大 我看不太懂你的指令耶
Database1.StartTransaction; //我沒有使用Database1的元件
是不是要多加個Database1的元件啊? PS(我所使用的元件有ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;) 另外 如果多加一個dsedit
且把if dt.fields[0].value > 0 then begin
改成 if dt.fields[0].value > 1 then begin
這樣可以嗎?
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
引言: Sorry change.jian大大 我看不太懂你的指令耶 Database1.StartTransaction; //我沒有使用Database1的元件 是不是要多加個Database1的元件啊? PS(我所使用的元件有ADOConnection1: TADOConnection; ADOTable1: TADOTable; DataSource1: TDataSource; ADOQuery1: TADOQuery;) 另外 如果多加一個dsedit 且把if dt.fields[0].value > 0 then begin 改成 if dt.fields[0].value > 1 then begin 這樣可以嗎?Database1為BDE的資料庫元件,如果你用ADO的話,那麼就是ADOConnection1.BeginTrans替代Database1.StartTransaction、ADOConnection1.CommitTrans替代Database1.Commit、 ADOConnection1.RollbackTrans替代Database1.Rollback 用什麼元件並不重要,重要的是利用tyr-except-end來抓取錯誤訊息,至於update到後端資料庫的方法,不一定是要以SQL指令來執行,你也可以直接在ADOQuery裡去update資料..... |
jasonchen613
初階會員 發表:67 回覆:75 積分:28 註冊:2003-03-25 發送簡訊給我 |
恩 請問change.jian大大 以下的指令是不是key在ADOTable1BeforePost下 程式碼如下:
procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
ADOConnection1.BeginTrans;
try
ADOQuery1.Close;
ADOQuery1.SQL.Text:='INSERT INTO TABLE ......';
ADOQuery1.Prepare;//這一行它偵測出有誤耶
ADOQuery1.ExecSQL;
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; 另外 我原本試的方法 現在以剩下一個錯誤 就是
當我 只是 單純的按修改 它可以檢驗出資料(車證號碼)有無重複
不會有問題 另外 如果單純的按新增 在案儲存
它也可以檢驗出資料(車牌號碼)有無重複 且也是沒有問題
但是 如果我先(1)新增完一筆資料 (2)按儲存完後 (3)在按修改 之後
(4)在儲存 它就有問題 問題如圖所示 以下是我在ADOTable1BeforePost下的程式碼: procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
var dt:tadoquery;
begin
//只在新增模式判斷
if ADOTable1.State = dsInsert then begin
dt:=tadoquery.create(self);
dt.connection:=ADOConnection1;
dt.sql.text:='select count(車牌號碼) from moto where 車牌號碼='+quotedstr(adotable1.fieldbyname('車牌號碼').asstring);
dt.open;
if dt.fields[0].value > 0 then begin
showmessage ('已有此車牌號碼');
DBEdit1.SetFocus;
abort;
end;
dt.free;
end; if ADOTable1.State = dsEdit then begin
dt:=tadoquery.create(self);
dt.connection:=ADOConnection1;
dt.sql.text:='select count(車牌號碼) from moto where 車牌號碼='+quotedstr(adotable1.fieldbyname('車牌號碼').asstring);
dt.open;
if dt.fields[0].value > 1 then begin
showmessage ('已有此車牌號碼');
DBEdit1.SetFocus;
abort;
end;
dt.free;
end; end;
|
kevin622
一般會員 發表:0 回覆:22 積分:9 註冊:2003-10-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |