有關 Table |
尚未結案
|
cklu
一般會員 ![]() ![]() 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
承接之前那一個問題(有關 Table 新增資料的連結)
==> 在新增資料時,先檢查書編號是否有空白、重複[新增到table1] [同時新增到table1和table2]
現在我想在它當"書編號"沒重複時,再做一次判斷--"作者"是否有重複!
如果"作者"沒有重複,則再將資料也同時新增到table2。 我有改一些地方,可是執行時顯示出錯誤訊息,好像是↓語法不對...
---------> if Table1.Locate('作者', edit4.text, []) then procedure TForm1.Table1BeforePost(DataSet: TDataSet);
//此處為Table1的BeforePost事件
begin
if Trim(Edit1.Text)='' then
begin
ShowMessage('書編號不允許空白');
Edit1.SetFocus;
Abort;
end
else
begin
if Table1.Locate('書編號', Edit1.Text, []) then
begin
ShowMessage('資料已經存在');
Edit1.SetFocus;
Abort;
end
else
begin
if Table1.Locate('作者', edit4.text, []) then
begin
Table1.Insert;
Table1.FieldByName('書編號').AsString := Edit1.Text;
Table1.FieldByName('出版社編號').AsString := Edit2.Text;
Table1.FieldByName('書名').AsString := Edit3.Text;
Table1.FieldByName('作者').AsString := Edit4.Text;
Table1.FieldByName('出版日期').AsString := Edit6.Text;
Table1.FieldByName('出版版本').AsString := Edit7.Text;
end
else
begin
Table1.Insert;
Table1.FieldByName('書編號').AsString := Edit1.Text;
Table1.FieldByName('出版社編號').AsString := Edit2.Text;
Table1.FieldByName('書名').AsString := Edit3.Text;
Table1.FieldByName('作者').AsString := Edit4.Text;
Table1.FieldByName('出版日期').AsString := Edit6.Text;
Table1.FieldByName('出版版本').AsString := Edit7.Text;
Table2.Insert;
Table2.FieldByName('出版社編號').AsString := Edit2.Text;
Table1.FieldByName('作者').AsString := Edit4.Text;
end;
end;
end;
end;
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 為何Table1有兩次Insert﹖修改如下﹕
procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin if Trim(Edit1.Text)='' then begin ShowMessage('書編號不允許空白'); Edit1.SetFocus; Abort; end else begin if Table1.Locate('書編號', Edit1.Text, []) then begin ShowMessage('資料已經存在'); Edit1.SetFocus; Abort; end else begin if Table1.Locate('作者', Edit4.Text, []) then begin ShowMessage('資料已經存在'); Edit4.SetFocus; Abort; end else begin Table1.Insert; Table1.FieldByName('書編號').AsString := Edit1.Text; Table1.FieldByName('出版社編號').AsString := Edit2.Text; Table1.FieldByName('書名').AsString := Edit3.Text; Table1.FieldByName('作者').AsString := Edit4.Text; Table1.FieldByName('出版日期').AsString := Edit6.Text; Table1.FieldByName('出版版本').AsString := Edit7.Text; Table2.Insert; Table2.FieldByName('出版社編號').AsString := Edit2.Text; Table2.FieldByName('作者').AsString := Edit4.Text; Table2.Post; end; end; end; end;=================================
------
忻晟 |
cklu
一般會員 ![]() ![]() 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
您好! 為何Table1有兩次Insert?
==> if Table1.Locate('作者', Edit4.Text, []) then
---> 是指判斷Table1內的'作者'這個欄位和Edit4.Text輸入的相同,是嗎?
如果是這樣的話...
我的想法是:輸入的作者和table1內的作者相同的話,則只要新增資料到table1就好了;如果輸入的作者和table1內的作者不同,則同時將資料新增到table1和table2。 ==> 所以Table1有兩次Insert...
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 据您要求﹐將程式碼改為如下即可﹕
procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin if Trim(Edit1.Text)='' then begin ShowMessage('書編號不允許空白'); Edit1.SetFocus; Abort; end else begin if Table1.Locate('書編號', Edit1.Text, []) then begin ShowMessage('資料已經存在'); Edit1.SetFocus; Abort; end else begin if Table1.Locate('作者', Edit4.Text, []) then begin Table1.Insert; Table1.FieldByName('書編號').AsString := Edit1.Text; Table1.FieldByName('出版社編號').AsString := Edit2.Text; Table1.FieldByName('書名').AsString := Edit3.Text; Table1.FieldByName('作者').AsString := Edit4.Text; Table1.FieldByName('出版日期').AsString := Edit6.Text; Table1.FieldByName('出版版本').AsString := Edit7.Text; end else begin Table1.Insert; Table1.FieldByName('書編號').AsString := Edit1.Text; Table1.FieldByName('出版社編號').AsString := Edit2.Text; Table1.FieldByName('書名').AsString := Edit3.Text; Table1.FieldByName('作者').AsString := Edit4.Text; Table1.FieldByName('出版日期').AsString := Edit6.Text; Table1.FieldByName('出版版本').AsString := Edit7.Text; Table2.Insert; Table2.FieldByName('出版社編號').AsString := Edit2.Text; Table2.FieldByName('作者').AsString := Edit4.Text; Table2.Post; end; end; end; end;=================================
------
忻晟 |
cklu
一般會員 ![]() ![]() 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ Table1.Locate(...)語法沒有錯﹐檢查一下Table1對應的資料表中是否有作者這個欄位名﹐且作者欄位名為字串形態﹒ 如果還不行的話﹐貼出完整程式碼﹐以便于判斷﹐或者參考如下﹕
procedure TForm1.BitBtn2Click(Sender: TObject); begin Table1.Post; end; procedure TForm1.Table1BeforePost(DataSet: TDataSet); begin if Trim(Edit1.Text)='' then begin ShowMessage('書編號不允許空白'); Edit1.SetFocus; Abort; end else begin if Table1.Locate('書編號', Edit1.Text, []) then begin ShowMessage('資料已經存在'); Edit1.SetFocus; Abort; end else begin if Table1.Locate('作者', Edit4.Text, []) then begin Table1.Insert; Table1.FieldByName('書編號').AsString := Edit1.Text; Table1.FieldByName('出版社編號').AsString := Edit2.Text; Table1.FieldByName('書名').AsString := Edit3.Text; Table1.FieldByName('作者').AsString := Edit4.Text; Table1.FieldByName('出版日期').AsString := Edit6.Text; Table1.FieldByName('出版版本').AsString := Edit7.Text; end else begin Table1.Insert; Table1.FieldByName('書編號').AsString := Edit1.Text; Table1.FieldByName('出版社編號').AsString := Edit2.Text; Table1.FieldByName('書名').AsString := Edit3.Text; Table1.FieldByName('作者').AsString := Edit4.Text; Table1.FieldByName('出版日期').AsString := Edit6.Text; Table1.FieldByName('出版版本').AsString := Edit7.Text; Table2.Insert; Table2.FieldByName('出版社編號').AsString := Edit2.Text; Table2.FieldByName('作者').AsString := Edit4.Text; Table2.Post; end; end; end; end;=================================
------
忻晟 |
cklu
一般會員 ![]() ![]() 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
您好! 我在想 => 是否可在Table1新增資料完後,再來判斷Table2是否要新增資料
=> 這樣的話,可以寫在 Table1 的 AfterInsert 事件裡嗎? 程式碼如下,但是有錯誤→ if Table2.locate('作者', edit4.Text, []) then
我在想是不是因為Table1新增資料完後,edit4就被clear了,才會這樣。 那在判斷那地方,可以直接判斷Table1和Table2裡,'作者'這個欄位嗎? procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
if Table2.locate('作者', edit4.Text, []) then
begin
exit;
end
else
begin
Table2.Insert;
Table1.FieldByName('出版社編號').AsString := Edit2.Text;
Table1.FieldByName('作者').AsString := Edit4.Text;
end;
end;
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 您的要求是在Table1新增資料完後﹐所以一般來講﹐我們會把存入資料到Table2的程式碼寫在Table1的AfterPost事件中﹒
在實務中﹐因為我們已經對是否允許資料存入Table1做過判斷(在Table1中使用Locate方法來驗証'書編號'是否重复)﹐所以經過判斷后的資料是允許存入Table1中的﹐那樣的話﹐就可以直接在Table1的BeforePost事件中驗証Table1中'書編號'是否重复的程式碼之后﹐直接再做驗証Table2中'作者'是否重复的驗証﹐如果驗証結果允許的話﹐就可直接存入了﹒ 如果沒有額外的程式碼﹐在Table1.Post之后﹐Edit4和其它Edit元件的內容是不會被Clear的﹒ 上篇的回覆中之程式碼﹐應該可以正常Run﹐您在試試看﹐建議您不要把新增資料到Table2的程式碼寫在Table1的AfterInsert事件中﹒ =================================
------
忻晟 |
cklu
一般會員 ![]() ![]() 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ '作者'欄位是在哪個Table中﹖或者說您需要在Table1中做驗証就要用Table1.Locate...需要在Table2中做驗証就要用Table2.Locate...
貼出完整程式碼來看看﹐另外在貼程式碼的時候請做程式碼的縮排﹐以便于觀察﹐縮排方法﹕在程式碼開始加上【code】﹐在程式碼最后加上【/code】即可. =================================
------
忻晟 |
cklu
一般會員 ![]() ![]() 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
您好! '作者'這欄位,在table1和table2都有。
procedure TForm1.Table1BeforePost(DataSet: TDataSet); //此處為Table1的BeforePost事件 begin if Trim(Edit1.Text)='' then begin ShowMessage('書編號不允許空白'); Edit1.SetFocus; Abort; end else begin if Table1.Locate('書編號', Edit1.Text, []) then begin ShowMessage('資料已經存在'); Edit1.SetFocus; Abort; end else begin if Table2.Locate('作者', Edit4.Text, []) then begin Table1.Insert; Table1.FieldByName('書編號').AsString := Edit1.Text; Table1.FieldByName('出版社編號').AsString := Edit2.Text; Table1.FieldByName('書名').AsString := Edit3.Text; Table1.FieldByName('作者').AsString := Edit4.Text; Table1.FieldByName('出版日期').AsString := Edit6.Text; Table1.FieldByName('出版版本').AsString := Edit7.Text; end else begin Table1.Insert; Table1.FieldByName('書編號').AsString := Edit1.Text; Table1.FieldByName('出版社編號').AsString := Edit2.Text; Table1.FieldByName('書名').AsString := Edit3.Text; Table1.FieldByName('作者').AsString := Edit4.Text; Table1.FieldByName('出版日期').AsString := Edit6.Text; Table1.FieldByName('出版版本').AsString := Edit7.Text; Table2.Insert; Table2.FieldByName('出版社編號').AsString := Edit2.Text; Table2.FieldByName('作者').AsString := Edit4.Text; Table2.Post; end; end; end; end;我改了這一行→ if Table2.Locate('作者', Edit4.Text, []) then 將原本的table1變table2,可是還是有錯誤訊息出現↓ |
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
cklu
一般會員 ![]() ![]() 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |