有關 DBComboBox & DBGrid 之間的聯結 |
尚未結案
|
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ DBComboBox是屬于資料感知元件﹐所以不太适合使用在這樣的要求環境下﹐您可改用ComboBox元件(Standard元件頁)﹐相關程式碼如下﹕
假設Table1對應表單一的資料表﹐在Form中加入一個Query元件﹐設定相關的上游Database屬性相同于Table1 問題一﹒ procedure TForm1.FormCreate(Sender: TObject); //此為Form1元件的OnCreate事件 begin ComboBox1.Items.Clear; Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select Distinct(作者) From 資料表名稱'); //以上SQL語句中的'資料表名稱'請換成您實際的資料表名稱 Query1.Open; While Not Query1.Eof do begin ComboBox1.Item.Add(Table1.FieldByName('作者').AsString); Query1.Next; end; end; 將以上程式碼共享在Table1元件的AfterPost事件和AfterDelete事件中﹒ 問題二﹒ 假設Table2對應表單二的資料表 procedure TForm1.ComboBox1Change(Sender: TObject); //此為ComboBox1元件的OnChange事件 begin if ComboBox1.Text = '' then begin Table2.Filtered := False; end else begin Table2.Filtered := False; Table2.Filter := ComboBox1.Text; Table2.Filtered := True; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/06/15 18:52:47
------
忻晟 |
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 就Table1元件的AfterPost事件和AfterDelete需共享Form1的OnCreate事件程式碼的意思就是指﹕
雙擊Table1元件的AfterPost事件﹐開啟程式碼輸入區域﹐然后將Form1的OnCreate事件中所有的程式碼复制到這個區域中﹒
雙擊Table1元件的AfterDelete事件﹐開啟程式碼輸入區域﹐然后將Form1的OnCreate事件中所有的程式碼复制到這個區域中﹒
注意﹕開啟任何事件的程式碼輸入區域時﹐其已經包含begin和end;的程式碼﹐所以要注意不要重复begin和end;了﹐可以先刪除掉﹐然后再貼進來﹒ =================================
有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗
================================
------
忻晟 |
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
您好! 雙擊Table1元件的AfterPost事件﹐開啟程式碼輸入區域﹐然后將Form1的OnCreate事件中所有的程式碼复制到這個區域中﹒ ==> 這樣的話,就有三個 ↓ 的程式碼相同,是嗎?
procedure TForm1.FormCreate(Sender: TObject);
procedure TForm1.Table1AfterDelete(DataSet: TDataSet);
procedure TForm1.Table1AfterPost(DataSet: TDataSet); 如果是的話,那我也那樣做了,但跑出錯誤訊息 ... 那是什麼意思啊?? < >< >
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 沒有錯﹐您的理解是對的﹐再舉個例子來講﹐如下程式碼中﹐紅色部分不需要复制﹐藍色部分需要复制﹕
procedure TForm1.FormCreate(Sender: TObject); //此為Form1元件的OnCreate事件 begin ComboBox1.Items.Clear; Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select Distinct(作者) From 資料表名稱'); //以上SQL語句中的'資料表名稱'請換成您實際的資料表名稱 Query1.Open; While Not Query1.Eof do begin ComboBox1.Item.Add(Table1.FieldByName('作者').AsString); Query1.Next; end; end; 比如說复制到Table1元件的AfterPost事件中﹕ procedure TForm1.Table1AfterPost(DataSet: TDataSet); begin //复制到這里 end; 比如說复制到Table1元件的AfterDelete事件中﹕ procedure TForm1.Table1AfterDelete(DataSet: TDataSet); begin //复制到這里 end;您之前貼出的錯誤信息﹐修正如下﹕ ComboBox1.Items.Add('....略'); 第二個貼圖的錯誤信息是指找不到Table1對應資料表中的'作者'欄位﹐檢查一下Table1對應的資料表是否正确﹐其中的'作者'欄位名稱是否打錯﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/06/15 21:15:42
------
忻晟 |
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 發現是我筆誤了﹐見諒﹗請見如下紅色處﹕
procedure TForm1.FormCreate(Sender: TObject); //此為Form1元件的OnCreate事件 begin ComboBox1.Items.Clear; Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select Distinct(作者) From 資料表名稱'); //以上SQL語句中的'資料表名稱'請換成您實際的資料表名稱 Query1.Open; While Not Query1.Eof do begin ComboBox1.Items.Add(Query1.Fields[0].Value); Query1.Next; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/06/15 21:58:41
------
忻晟 |
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 加入另外顯示Table2資料表的DataSource2和DBGrid2﹐DataSource2的DataSet屬性設為Table2﹐DBGrid2的DataSource屬性設為DataSource2﹐更改程式碼如下﹕
procedure TForm1.ComboBox1Change(Sender: TObject); //此為ComboBox1元件的OnChange事件 begin if ComboBox1.Text = '' then begin Table2.Filtered := False; end else begin Table2.Filtered := False; Table2.Filter := '作者=' + ''''+ComboBox1.Text+''''; //以上皆為單引號 Table2.Filtered := True; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 是在Form結束的時候嗎﹖如果是的話﹐請參考如下﹕
procedure TForm3.BitBtn1Click(Sender: TObject); begin Form3.close; //在Form3 Close的時候﹐會自動触發以下的OnClose事件 end; procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction); //此為Form3的OnClose事件﹐將以下程式碼寫在此事件中 begin Table1.Close; ComboBox1.ItemIndex := -1; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
cklu
一般會員 發表:19 回覆:18 積分:7 註冊:2005-05-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |