查詢及Form參數的傳遞 |
尚未結案
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
這是當使用者按下「修改」按鈕,開呑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 發送簡訊給我 |
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 發送簡訊給我 |
引言: 這是當使用者按下「修改」按鈕,開呑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 發送簡訊給我 |
先說明一下元件結構如下
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 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
引言: 試試 : 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,一模就上隱了,由於觀念是完全不一樣,再加上客戶喜歡且習慣以前的版面,所以設計起來格外的幸苦,只好上網找資料,搜尋引擎一找就找到這個網站,邊查、邊學、邊問,越來越興奮,真的感謝各位先見及版主們,不厭其煩回答我的問題,而且是新手的問題,我真的要說:「這個網站真好,充滿了人情味」 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |