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

查詢及Form參數的傳遞

尚未結案
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-22 23:50:17 IP:61.221.xxx.xxx 未訂閱
這是當使用者按下「修改」按鈕,開呑MDI視窗Form2的內容, 執行沒有問題 procedure TForm1.SpeedButton6Click(Sender: TObject); var Emp_No: String; begin Emp_No := ADOTable1.FieldByName('A0').AsString; Label1.Caption:=Emp_No; Form2.FormStyle:=fsMDIChild; Form2.Show; Form2.ADOTable1.Active:=True; Form2.Caption := '個人院訊修改'; Form2.WindowState:=wsMaximized; Form2.Label5.Caption:=Emp_No; Form2.ADOTable1.Locate('A0',Emp_No,[]); end; 這是查詢姓名按鍵內容 procedure TForm1.SpeedButton9Click(Sender: TObject); begin if Edit1.text <> '' then //有輸入 begin ADOQuery1.Active := false; ADOQuery1.sql.Clear; ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE A2 LIKE ' #39 '%' Edit1.Text '%' #39); ADOQuery1.Active := true; ADOQuery1.close; ADOQuery1.Open; Label3.Caption:=IntToStr(ADOQuery1.RecordCount); DataSource1.DataSet :=ADOQuery1; DBGrid1.DataSource := DataSource1; if ADOQuery1.isEmpty then // 沒有資料 ShowMessage('查無此姓名'); end else ShowMessage('您沒有輸入資料'); end; 請問我如何把查到列在DBGrid1上的那一筆資料, 經由「修改」按鈕 Emp_No 變數傳給Form2 ??
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-23 08:02:19 IP:211.74.xxx.xxx 未訂閱
var
  Form1: TForm1;
  Emp_No: String;    implementation
{$R *.dfm}
.
.
.
//查詢
procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
if Edit1.text <> '' then //有輸入
begin
ADOQuery1.Active := false;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE A2 LIKE ' #39 '%' Edit1.Text '%' #39);
ADOQuery1.Active := true;
ADOQuery1.close;
ADOQuery1.Open;
Label3.Caption:=IntToStr(ADOQuery1.RecordCount);
DataSource1.DataSet :=ADOQuery1;
DBGrid1.DataSource := DataSource1;
if ADOQuery1.isEmpty then // 沒有資料
begin
ADOQuery1.close;
ShowMessage('查無此姓名');
exit;
end
else
begin
Emp_No:=ADOQuery1.FieldByName('Emp_No').Value;
ADOQuery1.close;
end;
ShowMessage('您沒有輸入資料');
end; 
//修改
procedure TForm1.SpeedButton6Click(Sender: TObject);
//我把你原來變數Emp_No改為全域變數了,以便接收查詢資料
begin
//Emp_No := ADOTable1.FieldByName('A0').AsString;
Label1.Caption:=Emp_No; 
Form2.FormStyle:=fsMDIChild;
Form2.Show;
Form2.ADOTable1.Active:=True;
Form2.Caption := '個人院訊修改';
Form2.WindowState:=wsMaximized;
Form2.Label5.Caption:=Emp_No;
Form2.ADOTable1.Locate('A0',Emp_No,[]);
end;
TRY TRY SEE
發表人 - chih 於 2003/05/23 08:14:03
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-23 08:41:26 IP:218.16.xxx.xxx 未訂閱
引言: 這是當使用者按下「修改」按鈕,開呑MDI視窗Form2的內容, 執行沒有問題 procedure TForm1.SpeedButton6Click(Sender: TObject); var Emp_No: String; begin Emp_No := ADOTable1.FieldByName('A0').AsString; Label1.Caption:=Emp_No; Form2.FormStyle:=fsMDIChild; Form2.Show; Form2.ADOTable1.Active:=True; Form2.Caption := '個人院訊修改'; Form2.WindowState:=wsMaximized; Form2.Label5.Caption:=Emp_No; Form2.ADOTable1.Locate('A0',Emp_No,[]); end; 這是查詢姓名按鍵內容 procedure TForm1.SpeedButton9Click(Sender: TObject); begin if Edit1.text <> '' then //有輸入 begin ADOQuery1.Active := false; ADOQuery1.sql.Clear; ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE A2 LIKE ' #39 '%' Edit1.Text '%' #39); ADOQuery1.Active := true; ADOQuery1.close; ADOQuery1.Open; Label3.Caption:=IntToStr(ADOQuery1.RecordCount); DataSource1.DataSet := ADOQuery1; DBGrid1.DataSource := DataSource1; if ADOQuery1.isEmpty then // 沒有資料 ShowMessage('查無此姓名'); end else ShowMessage('您沒有輸入資料'); end; 請問我如何把查到列在DBGrid1上的那一筆資料, 經由「修改」按鈕 Emp_No 變數傳給Form2 ??
你的寫法沒問題,不過你 DBGrid1裡的是 ADOQuery1 的資料但你卻在 ADOTable1 傳資料所以這可能是問題出處 在你這個個案全域變數應無必要但亦沒壞處
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-23 19:08:59 IP:61.221.xxx.xxx 未訂閱
先說明一下元件結構如下 Form1視窗 數據庫pm3d←ADOConnection1←ADOTable1←DataSource1←DBGrid1 ←ADOQuery1 Form2視窗 Form1.ADOConnection1←ADOTable1←DataSource1 有一個MDI視窗,目前有兩個FORM Form1 如上面大家看到的結構 .用DBGrid1列出所有人資料 .當使用者按下各樣查詢按鈕時,DBGrid1需列出所查到的人 .當操作者在DBGrid1瀏覽資料選定後按下「修改」或「新增」按鈕,開啟Form2並將Form1的所選的那一筆記錄,傳給Form2,Form2自動指到那一筆記錄(註:Form1與Form2使用的是同一個ADOTable1) .可刪除該筆記錄 Form2 .所有欄位輸入(修改或新增) 問題是Form1在沒有查詢的情況下,可以用 Emp_No := ADOTable1.FieldByName('A0').AsString; 記錄下來現在處在第幾筆,在Form2時再用 Form2.ADOTable1.Locate('A0',Emp_No,[]); 移到同一筆資料庫 但是如果Form1在查詢的情況下,如何將ADOQuery1所查到那一筆傳給Form2,另我百思不得其解 如果照chih的做法,當USER在沒有查詢的狀態下,按下「修改」或「新增」按鈕,將無法記錄目前處在第幾筆 麻煩各位先見指導,是否是我的結構有問題(以前在Clipper可以),或是語法上可解決。 Delphi新手,麻煩大家了。 發表人 - jawtair 於 2003/05/23 19:44:03
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-23 20:14:06 IP:61.216.xxx.xxx 未訂閱
hi...jawtair..請問一下有沒有考慮把新增修改按鈕放在Form1中而不用去另外開Form2ㄋ?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-23 20:18:20 IP:218.16.xxx.xxx 未訂閱
試試 : Emp_No := DataSources1.DataSet.FieldByName('A0').AsString;    這個做法的好處是當 沒查詢時 DataSources1.DataSet 便是 ADOTable1 所以到 ADOTable1 拿資料 當有查詢時 DataSources1.DataSet 是 ADOQuery1 便到 ADOQuery1 找資料    原來又是 Clipper 事代的戰友喔,這兒有不少之前 (甚至現在) 玩 Clipper 的人哩 
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-23 20:56:59 IP:61.221.xxx.xxx 未訂閱
引言: hi...jawtair..請問一下有沒有考慮把新增修改按鈕放在Form1中而不用去另外開Form2ㄋ?
我也曾這樣想過, 但操作者需要用DBGrid1查看許多資料,才能決定是不是這個會員,才修改他的資料
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-23 21:18:21 IP:61.221.xxx.xxx 未訂閱
引言: 試試 : Emp_No := DataSources1.DataSet.FieldByName('A0').AsString;
Justmade版主,真是高手中的高手,一行指令解決我所有的問題。從我上這個網站,版主已經幫我解決許多問題,經驗也慢慢累積起來了,真的是非常感謝版主。您真是我的貴人,謝謝您 <>< face="Verdana, Arial, Helvetica">引言: 原來又是 Clipper 事代的戰友喔,這兒有不少之前 (甚至現在) 玩 Clipper 的人哩 < face="Verdana, Arial, Helvetica"> 沒辦法,以前是用dbase III Plus寫的,後來換成瑩圃的...忘記了,再來是Clipper,視窗出現後換到FiveWin,因為年級接近中年了,所以想說FiveWin能用久,就用多久;現在是因為客戶,常常反映進入主系統後,會出現一些錯誤訊息,像是什麼.DLL錯誤啊...等等,一定要我改版,但原始程式早就不知丟那裡去了,且市面上清一色是VB再來就是DELPHI,研究vb後動不動就是錯誤訊息,灰心之餘只好來模DELPHI,一模就上隱了,由於觀念是完全不一樣,再加上客戶喜歡且習慣以前的版面,所以設計起來格外的幸苦,只好上網找資料,搜尋引擎一找就找到這個網站,邊查、邊學、邊問,越來越興奮,真的感謝各位先見及版主們,不厭其煩回答我的問題,而且是新手的問題,我真的要說:「這個網站真好,充滿了人情味」
系統時間:2024-06-27 1:01:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!