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

請問DBGrids問題

尚未結案
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-10 13:00:10 IP:203.162.xxx.xxx 未訂閱
我對DBGrids屬性不熟,想請教各位教手. Form1中有1 個DBGrids,1 個Edit button. DBGrids顯示table1的內容.我想當我選DBGrids中的個籣位,然後按下Edit button,然後再把所選的資料顯示在Form2 請問我要如何知道使用者有選取DBGrids中的資料,和我要如何讀取所選取DBGrids中的資料呢? 謝謝
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-10 13:08:06 IP:61.220.xxx.xxx 未訂閱
你必須先在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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-10 13:12:09 IP:203.77.xxx.xxx 未訂閱
再加一點! DataSource 指向 Form1.DataSource1 (Form1之DataSource)
------
*********************
* 只要用心一定成功 *
*********************
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-10 14:40:00 IP:203.162.xxx.xxx 未訂閱
請問T.J.B 在unit1裡的 value := query1.fieldbyname('EmpNo').asstring; <--將dbgrid所指到的那一筆給value變數 這裡query1要如何宣告呢? query1的datasource指向那裡?我試過你的方式但是會出現error說. 請問我要如何判斷DBGrid中有沒有被選取的資料呢?
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-10 15:24:30 IP:61.220.xxx.xxx 未訂閱
引言: 請問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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-11 12:26:48 IP:203.162.xxx.xxx 未訂閱
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-11 13:19:20 IP:202.39.xxx.xxx 未訂閱
把這一句 Query1.Open; 改成 Query1.ExecSQL; 即可    -- Everything I say is a lie.
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-11 13:45:36 IP:203.162.xxx.xxx 未訂閱
thank you T.J.B 和 hagar
系統時間:2024-11-22 20:06:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!