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

DataModule的觀念問題

尚未結案
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-04 17:32:03 IP:61.59.xxx.xxx 未訂閱
請問 1.如果有一資料庫,針對不同功能需求而設計有多個From,如果僅設計一個DataMoudule,並在其中有Query1作查詢.Query2作資料更新.且所有的From都取用該二個Query作查詢與更新資料.這樣著觀念是否正確. 2.在DataMoudule上設有一onDataChange來取出資料. 如: procedure TData.DataSourceDataChange...... Form2.EDIT.Text := Query1.FieldByName('BBBB').AsString; 另在Form2上亦設計可由EDIT.Text更新(修改)資料. 但修改完後必須重新取出資料,才會看到最新的資料 如此資料庫一大是否就會變得很慢.請問先進有何建議. 2.又同上,因必須重新取出資料(Close & Open)則DBGrid & Query會移置首筆 是否需在onDataChange上先紀錄key值,當Form資料修改完,重新Open後再重新 取回,我做了以下但是仍不行,請先進指教 procedure TData.DataSourceDataChange...... i := Query1.RecNo; Form1........ Data.Query1.Close; Data.Query1.Open Data.Query1.RecNo := StrToINT(i) 謝謝指教..
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-04 17:41:47 IP:61.59.xxx.xxx 未訂閱
對不起..尚有一問題 因有多個Form共用該DataModule之Query. 我分別在FormClose時用 Data.Free; Form1.Release; 好像沒有完全釋放. 再開啟第二個Form時會沒有資料或錯誤
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-04 17:47:39 IP:211.20.xxx.xxx 未訂閱
看不太懂你的需求,可否詳述,或將程式POST上來 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-04 18:12:56 IP:61.59.xxx.xxx 未訂閱
thanks...... DataMoudule>> --------------------------------------------- 有DataBase..DataSource..Query1(有取出Fields)..Query2..元件 --------------------------------------------- procedure TData.DataSourceDataChange(Sender: TObject; Field: TField); var i:String; begin i := POSQuery.RecNo; Form1.Edit1.Text := Query1.FieldByName('BBBB').AsString; end; --------------------------------------------- Form1>>>>有DBGrid取出該資料庫 目的:再DBGrid移動游標,會將值填入Edit1中,並可於Edit1直接更新資料 procedure TForm1.BTupdateClick(Sender: TObject); begin Data.Query2.SQL.Clear; Data.Query2.SQL.Add('Update ABC '); Data.Query2.SQL.Add('SET '); Data.Query2.SQL.Add('BBB = ''' Edit1.Text ''', '); Data.Query2.SQL.Add('T_R = ''' BoolToStr(CheckBox1.Checked) ''', '); Data.Query2.SQL.Add('QTN = ''' QTN.Text ''' '); Data.Query2.SQL.Add('Where BNO = ''' Data.Query1.FieldbyName('BNO').AsString ''' '); Data.Query2.ExecSQL; Data.POSQuery.Close; Data.POSQuery.Open; Data.Query2.RecNo := StrToINT(i); //更新後如何維持再此修改列??而不移到首筆 end; 另有一Form2 其中類似上述有作Insert & Update 亦使用同一Query1與Query2 ============================================ Question(1) 更新後如何維持再此修改列??而不移到首筆 不知要如何利用RecNo等 Question(2) 該二Form單獨執行都正常,但當先執行Form2後,再開啟Form1. Form1上之Dbgrid會沒有資料 先執行Form1後,再開啟Form2.則會產生錯誤 是否為FormClose沒有完全釋放,或再另行作Query不要共用 FormClose時我用 Data.Free; Form1.Release;
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-04 20:37:23 IP:211.23.xxx.xxx 未訂閱
引言: thanks...... DataMoudule>> --------------------------------------------- 有DataBase..DataSource..Query1(有取出Fields)..Query2..元件 --------------------------------------------- procedure TData.DataSourceDataChange(Sender: TObject; Field: TField); var i:String; begin i := POSQuery.RecNo; Form1.Edit1.Text := Query1.FieldByName('BBBB').AsString; end; --------------------------------------------- Form1>>>>有DBGrid取出該資料庫 目的:再DBGrid移動游標,會將值填入Edit1中,並可於Edit1直接更新資料 procedure TForm1.BTupdateClick(Sender: TObject); begin Data.Query2.SQL.Clear; Data.Query2.SQL.Add('Update ABC '); Data.Query2.SQL.Add('SET '); Data.Query2.SQL.Add('BBB = ''' Edit1.Text ''', '); Data.Query2.SQL.Add('T_R = ''' BoolToStr(CheckBox1.Checked) ''', '); Data.Query2.SQL.Add('QTN = ''' QTN.Text ''' '); Data.Query2.SQL.Add('Where BNO = ''' Data.Query1.FieldbyName('BNO').AsString ''' '); Data.Query2.ExecSQL; Data.POSQuery.Close; Data.POSQuery.Open; Data.Query2.RecNo := StrToINT(i); //更新後如何維持再此修改列??而不移到首筆 end; 另有一Form2 其中類似上述有作Insert & Update 亦使用同一Query1與Query2 ============================================ Question(1) 更新後如何維持再此修改列??而不移到首筆 不知要如何利用RecNo等 RecNo不可行,最好是先用變數在BEFORD EDIT記下key值在AFTER POST利用LOCALTE移到該筆資料 Question(2) 該二Form單獨執行都正常,但當先執行Form2後,再開啟Form1. Form1上之Dbgrid會沒有資料 先執行Form1後,再開啟Form2.則會產生錯誤 是否為FormClose沒有完全釋放,或再另行作Query不要共用 FormClose時我用 Data.Free; DATAMOUDLE己被你FREE掉了當然會出現問題 Form1.Release;
@@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-05 09:15:09 IP:61.59.xxx.xxx 未訂閱
謝謝您的回覆.但我還有不太了解的地方 1.要如何記下key值.如果設在該Query1.會不會造成其他的Form產生問題 2.不是當FormClose時把DataMoule關閉.而當FormCreate時再重新連結嗎? 3.我做二個Query(Query1作查詢.Query2作資料更新).這樣子的觀念對嗎 但修改完後必須重新取出資料,才會看到最新的資料 如此資料庫一大是否就會變得很慢.請問先進有何建議. 謝謝您的指教
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-05 09:55:45 IP:211.20.xxx.xxx 未訂閱
引言: 謝謝您的回覆.但我還有不太了解的地方 1.要如何記下key值.如果設在該Query1.會不會造成其他的Form產生問題 可以利用動態ASSGIN程式碼方式做,請參考先前的討論 2.不是當FormClose時把DataMoule關閉.而當FormCreate時再重新連結嗎? 除非你的DATAMOUDLE是動態產生的,否則這樣做會有問題,因為我看不到你有CREATE DATAMOUDLE的程式碼 3.我做二個Query(Query1作查詢.Query2作資料更新).這樣子的觀念對嗎 但修改完後必須重新取出資料,才會看到最新的資料 如此資料庫一大是否就會變得很慢.請問先進有何建議. 其實不用這麼麻煩,因為你是單檔維護,所以其實只要利用一個QUERY即可 謝謝您的指教
@@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
系統時間:2024-05-05 14:21:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!