全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1953
推到 Plurk!
推到 Facebook!

Form參數的傳遞,仍然無解

答題得分者是:danny
jawtair
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-02 16:54:47 IP:61.221.xxx.xxx 未訂閱
抱歉,試了好久,雖然參考了以下的討論 .問題】如何做到編號自動累加? .~~急~~兩個表單函數的傳遞?? .更新資料後將游標保持在此筆位置 .同時show幾個form 仍然不得其解,是否能指導如下: 我有兩個Form,一個是Form1,一個是Form2 Form1用DBGrid列出所有會員資料,俟使用點選後,按修改按鈕 開啟Form2的畫面 (Form2為基本資料的修改) 這個是我在Form1按下「修改」時的內容 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.Caption := '個人院訊'; Form2.WindowState:=wsMaximized; end; 但是Form2郤讀不到傳過來的參數 procedure TForm2.FormCreate(Sender: TObject); begin ADOTable1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=CCPM_ODBC'; ADOTable1.Active:=True; Label5.Caption:=Emp_No; end; 是否有那位先進能指導一下,謝謝!
Justmade
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-02 17:02:00 IP:218.16.xxx.xxx 未訂閱
在你 post 出來的程式碼中完全沒做傳遞的動作丫... 你的 Form2 是何時 Create 的? 是一開始便先 Create 了嗎 ? 你試試 : procedure TForm1.SpeedButton6Click(Sender: TObject); var Emp_No: String; begin Emp_No := ADOTable1.FieldByName('A0').AsString; Label1.Caption:=Emp_No; Form2.Label5.Caption := Emp_No; Form2.FormStyle:=fsMDIChild; Form2.Show; Form2.Caption := '個人院訊'; Form2.WindowState:=wsMaximized; end;
jawtair
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-02 17:09:37 IP:61.221.xxx.xxx 未訂閱
忘了說,我的Form是用MDI方式,事先就設計好了,所以用 Form2.FormStyle:=fsMDIChild; Form2.Show; 來把它Show出來,因為買了很多書,範例大部份在講一個Form上的處理,對於兩個以上的Form的傳遞講的很少,真的是無解,才上來詢求協助。
chih
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-02 17:10:45 IP:61.216.xxx.xxx 未訂閱
1.Emp_No宣告在Form1的public區段 2.Label5.Caption:=Form1.Emp_No; TRY TRY SEE
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-02 17:10:51 IP:211.76.xxx.xxx 未訂閱
引言: 抱歉,試了好久,雖然參考了以下的討論 .問題】如何做到編號自動累加? .~~急~~兩個表單函數的傳遞?? .更新資料後將游標保持在此筆位置 .同時show幾個form 仍然不得其解,是否能指導如下: 我有兩個Form,一個是Form1,一個是Form2 Form1用DBGrid列出所有會員資料,俟使用點選後,按修改按鈕 開啟Form2的畫面 (Form2為基本資料的修改) 這個是我在Form1按下「修改」時的內容 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.Caption := '個人院訊'; Form2.WindowState:=wsMaximized; end; 但是Form2郤讀不到傳過來的參數 procedure TForm2.FormCreate(Sender: TObject); begin ADOTable1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=CCPM_ODBC'; ADOTable1.Active:=True; Label5.Caption:=Emp_No; end;
因為您跟本沒傳參數給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.Caption := '個人院訊';
  Form2.Label5.Caption := Emp_No;
  Form2.WindowState:=wsMaximized;
  Form2.Show;
end;
不過以上寫法並不好, 最好作成如下給 Form1 呼叫:
Form2
... 略 ...
  public
    procedure SetDataValue(Emp_No: String);
... 略 ... 
procedure TForm2.SetDataValue(Emp_No: String);
begin
  Label5.Caption := Emp_No;
end;    Form1
procedure TForm1.SpeedButton6Click(Sender: TObject);
var
  Emp_No: String;
begin
  Emp_No := ADOTable1.FieldByName('A0').AsString;
  Label1.Caption:=Emp_No;
  Form2.FormStyle:=fsMDIChild;
  Form2.Caption := '個人院訊';
  Form2.SetDataValue(Emp_No)
  Form2.WindowState:=wsMaximized;
  Form2.Show;
end;
------
將問題盡快結案也是一種禮貌!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-02 17:11:50 IP:211.76.xxx.xxx 未訂閱
Hi, 你可以將你想要傳遞的變數宣告在 form2 的 public 段.. 這樣一來就可以將資料存入 form2 中.. 在 form2 的程式中就可以使用了. 如:    
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Emp_No: string;
  end;
然後就可以使用這樣的語法來進行給定的參數:
procedure TForm1.SpeedButton6Click(Sender: TObject);
var
  Emp_No: String;
begin
  Emp_No := ADOTable1.FieldByName('A0').AsString;
  Label1.Caption:=Emp_No;
  Form2.Emp_No:=Emp_No;
  Form2.FormStyle:=fsMDIChild;
  Form2.Show;
  Form2.Caption := '個人院訊';
  Form2.WindowState:=wsMaximized;
end;
jawtair
一般會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-02 17:54:28 IP:61.221.xxx.xxx 未訂閱
問題已經解決了,沒想到那麼簡單,原來我想的太複雜了 但對於以下程式不太了解,是要放在那裡,他的意思是??是否能寫完整點? Form2 ... 略 ... public procedure SetDataValue(Emp_No: String); ... 略 ... procedure TForm2.SetDataValue(Emp_No: String); begin Label5.Caption := Emp_No; end;
jawtair
一般會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-02 18:06:30 IP:61.221.xxx.xxx 未訂閱
另外再請教的是,我原先的資料庫是微軟的ACCESS 2000,原於超過20,000多筆,所以將資料庫匯入微軟的SQL Server,問題在於原先的資料庫,有一個欄位A0,資料類型是「自動編號」,SQL Server好像沒有自動編號的欄位,不知是否有人遇到相同的問題,是否能指導該怎麼做,謝謝各位先進。
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-02 21:08:37 IP:61.221.xxx.xxx 未訂閱
MS SQL 是使用 identity 的欄位屬性, 可以用在 int, smallint 資料型態上. 請自行試試, 下面的 table 中的 id_num 就是會自動編號的一個欄位.    
CREATE TABLE new_employees
(
 id_num int IDENTITY(1,1),
 fname varchar (20),
 minit char(1),
 lname varchar(30)
)    
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-03 09:33:50 IP:211.76.xxx.xxx 未訂閱
引言: 問題已經解決了,沒想到那麼簡單,原來我想的太複雜了 但對於以下程式不太了解,是要放在那裡,他的意思是??是否能寫完整點? Form2 ... 略 ... public procedure SetDataValue(Emp_No: String); ... 略 ... procedure TForm2.SetDataValue(Emp_No: String); begin Label5.Caption := Emp_No; end;
這是在 Form2 宣告一個傳送參數的 procedure 給其他的 Form 用. 這樣作的原因是保持物件導向設計的完整性; 像 timhuang 兄所說的方法是最簡單的, 但也破壞了物件導向設計原則, 但將他改成如下是很好的設計
Form2
... 略 ...
  private
    FEmp_No,
    FEmp_Code: String;
  public
    property Emp_No: String read FEmp_No write FEmp_No;
    property Emp_Code: String read FEmp_Code write FEmp_Code;
    .....
這樣就要傳多少參數給 Form2 都可以
------
將問題盡快結案也是一種禮貌!
jawtair
一般會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-04 20:56:12 IP:61.221.xxx.xxx 未訂閱
感謝版主及各位熱心回覆的朋友們,關於參數傳遞的問題已經完成解決了。 但「SQL自動編號」的問題,試了幾天也摸不著頭緒,為使更多人能提供更多的資訊,已重新另貼主題,網址如下: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29912 再次感謝再感謝。
jawtair
一般會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-22 23:01:55 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 ??
系統時間:2024-11-25 8:40:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!