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

請問如何取得DBGrid資料並修改後Refresh

尚未結案
kjwang
一般會員


發表:11
回覆:8
積分:3
註冊:2005-04-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-10 12:12:17 IP:210.201.xxx.xxx 未訂閱
我想要的做法是: 主Form上面有一個DBGrid將Query的資料show出來後 DBGrid是設定成Read Only不允許user修改的... 然後user在點選DBGrid上某筆資料時,會show出副Form顯示該筆資料的所有欄位 其中只有某一欄位能夠以Edit欄位來編輯,其餘欄位均是顯示資料無法修改狀態 修改完該欄位後確認關閉副From回到主Form的同時 主Form的DBGrid內資料也Refresh成新的 不知這樣該如何做呢? 我現在的問題是卡在不知如何將主Form資料傳遞至副Form 我用DBGrid.Fields[x].Asstring := TForm2.DBEdit.Text; 會顯示無法對一個ready-only的dataset做編輯動作... 謝謝哦!!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-10 12:53:21 IP:202.62.xxx.xxx 未訂閱
您好﹗    以下步驟請注意﹕ 一﹒如果是使用Query元件來擷取資料﹐需要將其RequestLive屬性值設為True﹐否則無法對擷取到的資料進行異動﹒ 二﹒在副Form中可以User 主Form﹐然后調用主Form的Query,雙擊Query﹐利用其欄位控制器在副Form中加入對應的資料感知元件﹐再在主Form中DBGrid元件的OnDblClick事件(Mouse雙擊)事件中﹐先判斷目前點擊的是否為空值﹐如果不是的話﹐即可開啟副Form﹐而副Form上的資料感知元件皆連接主Form中的DataSource元件(上游為連接資料庫的Query元件)﹐以下是小弟在某專案中的一段節錄﹐差不多的功能﹐供您參考﹕
主Form中DBGrid元件的OnDblClick事件
//TsalaryByDaysDetsail2Form為副Form
procedure TSalaryByDaysForm.suiDBGrid2DblClick(Sender: TObject);
begin
  if Not (ADOQuery2.FieldByName('IDNO').IsNull) then
    begin
      Try
        SalaryByDaysDetail2Form := TSalaryByDaysDetail2Form.Create(Application);
        SalaryByDaysDetail2Form.ShowModal;
      Finally
        SalaryByDaysDetail2Form.Free;
      end;
    end
  else
    begin
      suiMessageDialog1.ButtonCount := 1;
      suiMessageDialog1.IconType := suiStop;
      suiMessageDialog1.Text := 'No Data for modify!';
      suiMessageDialog1.ShowModal;
    end;
end;
注﹕以上範例程式中有使用第三元件 ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
kjwang
一般會員


發表:11
回覆:8
積分:3
註冊:2005-04-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-10 13:53:06 IP:210.201.xxx.xxx 未訂閱
謝謝版大的回應~! 我能否再請問一下... 如果是不用元件來控制資料的前提之下,有可行的做法嗎? 也就是我不用TQuery元件來下SQL Statement,而改在程式碼動態控制的做法 而副Form也不去use主Form... 謝謝您的回應!!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-10 14:09:53 IP:202.62.xxx.xxx 未訂閱
您好﹗    其實處理的方法有很多﹐見仁見智吧﹒    如果在副Form中不引用主Form中的Query元件﹐也是可行﹐可在副Form中新增一個Query﹐然后當主Form中DBGrid在触發OnDblClick事件中﹐擷取到該筆資料的鍵值欄位值﹐然后再用副Form中的Query針對這個鍵值欄位值做一個類似Locate方法的Focus(焦點)移動動作﹐讓資料錄指針指向該筆資料錄﹐問題就是當該筆資料錄有異動產生時﹐主Form中的Query不能及時回傳最新的資料狀態﹐所以還需要使用Close&Open的方法重新擷取到最新的資料錄﹐再用類似Locate方法的Focus(焦點)移動動作﹐讓主Form中DBGrid元件的資料錄指針指向該筆資料﹒    各種不同的作法有利有弊﹐關鍵在于何種方法對目前需求可以達到最有效率的處理﹐這也是一種經驗的累積﹐再試試看其它的方法﹐或許您能找到更有效率的處理方法﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
系統時間:2024-06-26 23:57:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!