請問DBGrids問題 |
尚未結案
|
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
你必須先在form1宣告全域變數
然後將dbgrid的值給該全域變數
然後form2去use form1
form1去use form2
就可以在form2秀出form1的值了
給你參考
form1及form2的範例
unit Unit1; <----FORM1 interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; value : string; <---宣告你需要的全域變數名稱 implementation uses Unit2; <---把form2 use 進來 {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin value := query1.fieldbyname('EmpNo').asstring; <--將dbgrid所指到的那一筆給value變數 Form2.ShowModal ; <----打開form2 end; end. //----------------------------------------------------- //------------------------------------------------------ //------------------------------------------------------ unit Unit2; <---- FORM2 interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Label1: TLabel; procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation uses Unit1; <--- 把form1 use 進來 {$R *.dfm} procedure TForm2.FormShow(Sender: TObject); begin Label1.Caption := value ; <-- 將value的值秀在Label1.caption end; end.PS: 你要幾個DBGRID的值就宣告幾個全域變數 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2002/12/10 13:28:56
------
天行健 君子當自強不息~~@.@ |
sfy257000
一般會員 發表:21 回覆:13 積分:6 註冊:2002-07-11 發送簡訊給我 |
|
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 請問T.J.B 在unit1裡的 value := query1.fieldbyname('EmpNo').asstring; <--將dbgrid所指到的那一筆給value變數 這裡query1要如何宣告呢? query1的datasource指向那裡?我試過你的方式但是會出現error說. 請問我要如何判斷DBGrid中有沒有被選取的資料呢?[第一個問題] query1並不是變數名稱,,,它是一個元件 query1指的就是你dbgrid所連結datasource的 table query1是一個元件 你也可以用table 這個元件 用query的好處是它可以下sql 不會被限制只能在同一個table 而Table元件 就不能下sql 而被限制只能在同一個table [第二個問題] 可用DBGrid1.SelectedRows.Count >=1 做判斷 要注意 :如果你是要在form2裡做判斷的動作 因為你的dbgrid是在form1 所以要寫成 if form1.DBGrid1.SelectedRows.Count >=1 而如果是在form1裡做判斷的動作 就不用加form1 (加了也無所謂) if DBGrid1.SelectedRows.Count >=1 天行健 君子當自強不息~~@.@
------
天行健 君子當自強不息~~@.@ |
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
Thank you T.J.B, it can work now.
可不可以麻煩幫我看一下unit2寫的對不對,因為當我儲存edit後的結果時,會出現error: "Project1.exe raised exception class ENoResultSet with message 'Error creating cursor handle'. Process stopped. Use step or Run to continue."
unit2 詳細內容
unit 2; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, StdCtrls, Buttons, DBTables; type
TForm11 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
......
BitBtn1: TBitBtn;
Table1: TTable;
Query1: TQuery;
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form11: TForm11; implementation
uses unit1, login;
{$R *.DFM} procedure TForm11.FormShow(Sender: TObject);
begin
Label3.Caption := shipperID; //讀取unit1的variable
Edit1.Text := shipperName;
Memo1.Text := address;
Edit2.Text := tel;
Edit3.Text := fax;
end; procedure TForm11.BitBtn1Click(Sender: TObject);
var
newShipperName : string;
newAddress : string;
newTel : string;
newFax : string;
today : TDateTime;
year,month,day : word;
present : string;
pmonth,pday : string;
begin
newShipperName := Form11.Edit1.Text;
newAddress := Form11.Memo1.Text;
newTel := Form11.Edit2.Text;
newFax := Form11.Edit3.Text;
If (newShipperName = '') then
MessageBox(Form11.handle,'Please input Shipper Name','Error',MB_ICONWARNING)
else if (newAddress = '') then
MessageBox(Form11.handle,'Please input Address','Error',MB_ICONWARNING)
ELSE
begin
today := Date();
DecodeDate(today,year,month,day);
if month < 10 then
pmonth := '0' IntToStr(month)
else
pmonth := IntToStr(month);
if day < 10 then
pday := '0' IntToStr(day)
else
pday := IntToStr(day);
present := IntToStr(year) pmonth pday;
Query1.close;
Query1.SQL.Clear;
Query1.SQL.Add('update shipper');
Query1.SQL.Add('set name = :Sname, address = :Saddress,');
Query1.SQL.Add('tel = :Stel, fax = :Sfax,');
Query1.SQL.Add('userID = :SuserID,');
Query1.SQL.Add('inputDate = :SinputDate');
Query1.SQL.Add('where shipperID = :ID');
Query1.ParamByName('Sname').AsString := newShipperName;
Query1.ParamByName('Saddress').AsString := newAddress;
Query1.ParamByName('Stel').AsString := newTel;
Query1.ParamByName('Sfax').AsString := newFax;
Query1.ParamByName('SuserID').AsString := Form1.Edit1.Text;
Query1.ParamByName('SinputDate').AsString := present;
Query1.ParamByName('ID').AsString := shipperID;
Query1.Prepare;
Query1.Open;
end;
end; end.
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |