線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1078
推到 Plurk!
推到 Facebook!

有關 Table

尚未結案
cklu
一般會員


發表:19
回覆:18
積分:7
註冊:2005-05-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-15 22:03:30 IP:140.130.xxx.xxx 未訂閱
承接之前那一個問題(有關 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-15 22:19:52 IP:202.62.xxx.xxx 未訂閱
您好﹗    為何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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-15 22:35:48 IP:140.130.xxx.xxx 未訂閱
您好! 為何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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-15 22:39:46 IP:202.62.xxx.xxx 未訂閱
您好﹗    据您要求﹐將程式碼改為如下即可﹕
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-15 22:55:42 IP:140.130.xxx.xxx 未訂閱
您好!    我改了,但出現錯誤訊息↓     它指著這一行字 → if Table1.Locate('作者', Edit4.Text, []) then 是...不可以這樣寫嗎?
cashxin2002
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-16 09:01:56 IP:202.62.xxx.xxx 未訂閱
您好﹗    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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-16 19:24:09 IP:140.130.xxx.xxx 未訂閱
您好! 我在想 => 是否可在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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-16 19:46:38 IP:202.62.xxx.xxx 未訂閱
您好﹗    您的要求是在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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-16 20:00:13 IP:140.130.xxx.xxx 未訂閱
您好!    謝謝您的建議,不過,我已經試過您貼的那個程式碼,可是還是會出現錯誤訊息耶!(之前回覆的那一個圖)    它還是指著 if Table1.Locate('作者', Edit4.Text, []) then 這一行…不知道是哪裡錯了…
cashxin2002
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-16 20:17:51 IP:202.62.xxx.xxx 未訂閱
您好﹗    '作者'欄位是在哪個Table中﹖或者說您需要在Table1中做驗証就要用Table1.Locate...需要在Table2中做驗証就要用Table2.Locate... 貼出完整程式碼來看看﹐另外在貼程式碼的時候請做程式碼的縮排﹐以便于觀察﹐縮排方法﹕在程式碼開始加上【code】﹐在程式碼最后加上【/code】即可.    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/06/16 20:19:29
------
忻晟
cklu
一般會員


發表:19
回覆:18
積分:7
註冊:2005-05-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-16 20:58:22 IP:140.130.xxx.xxx 未訂閱
您好!    '作者'這欄位,在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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-16 21:28:35 IP:202.62.xxx.xxx 未訂閱
您好﹗    沒碰到過這樣的現象﹐錯誤信息的意思是﹕欄位描述符號的問題﹒ 用資料庫工具打開這個資料庫檔案﹐檢查一下'作者'欄位名稱是否異樣﹐或者重新輸入'作者'這個欄位名稱試試﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
cklu
一般會員


發表:19
回覆:18
積分:7
註冊:2005-05-05

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-17 01:41:12 IP:140.130.xxx.xxx 未訂閱
您好! 不知道哪裡出問題了…還是有錯誤,就是那一個錯誤… 哎…應該是電腦透逗了… 總之,很謝謝您! ^.^
cashxin2002
版主


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-17 08:48:40 IP:202.62.xxx.xxx 未訂閱
您好﹗    要不要把程式寄給我幫你看一看﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
系統時間:2024-06-28 4:53:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!