仍未解決之ADO Master and Detial 問題 |
尚未結案
|
problemman
一般會員 發表:7 回覆:25 積分:16 註冊:2003-04-11 發送簡訊給我 |
請問各大佬:
我的ADO pogram 上有個DBGrid1(Master)和DBGrid2(Detail),當我在DBGrid1(Master) 上輸入一個record但未post,之後在DBGrid2(Detail)上輸入一個record,但當我按post時,這個record在DBGrid2就不見了,之後我在DBGrid1(Master)按post,也見不到Detail那隻record.
之後我要將DBGrid1(Master)'s pointer 移去其他record,然後移回剛才新增之Master Record,才可見回剛才新增之Detail record。 但我測試過,如果我在新增Detail record之前,把Master Record 先post,然後再新增Detail record,就沒有問題。 但我在BDE是可以Master 未post,但Detail也可以加record,
究竟有什麼方法可解決< >< > 發表人 -
|
JamesLiang
初階會員 發表:54 回覆:78 積分:31 註冊:2003-02-13 發送簡訊給我 |
|
problemman
一般會員 發表:7 回覆:25 積分:16 註冊:2003-04-11 發送簡訊給我 |
|
JamesLiang
初階會員 發表:54 回覆:78 積分:31 註冊:2003-02-13 發送簡訊給我 |
1.進入detail時先查核master是否為dsinsert狀態(if master.dataset.state :- dsInsert then master.Post;)
2.於設計階段將detail的dataset object property cursor type set成ctkeyset,locktype is itbatchoptimistic,command text is cmdtext
3.FORM 設一個 button 於click 時updatebatch(arAll)
|
cmj
高階會員 發表:15 回覆:242 積分:226 註冊:2002-06-12 發送簡訊給我 |
引言: 請問各大佬: 我的ADO pogram 上有個DBGrid1(Master)和DBGrid2(Detail),當我在DBGrid1(Master) 上輸入一個record但未post,之後在DBGrid2(Detail)上輸入一個record,但當我按post時,這個record在DBGrid2就不見了,之後我在DBGrid1(Master)按post,也見不到Detail那隻record. 之後我要將DBGrid1(Master)'s pointer 移去其他record,然後移回剛才新增之Master Record,才可見回剛才新增之Detail record。 但我測試過,如果我在新增Detail record之前,把Master Record 先post,然後再新增Detail record,就沒有問題。 但我在BDE是可以Master 未post,但Detail也可以加record, 究竟有什麼方法可解決< >< > 發表人 - >>< face="Verdana, Arial, Helvetica"> 在Detail Post前 if Master.State in [dsInsert,dsEdit] then // 先做Master.Post Master.Post else 新增一筆和detail關聯的Master記錄 發表人 - cmj 於 2003/04/16 01:07:18 |
problemman
一般會員 發表:7 回覆:25 積分:16 註冊:2003-04-11 發送簡訊給我 |
|
wlj_sh
一般會員 發表:1 回覆:3 積分:0 註冊:2003-04-18 發送簡訊給我 |
|
problemman
一般會員 發表:7 回覆:25 積分:16 註冊:2003-04-11 發送簡訊給我 |
引言: 在DETAIL表BEFORE INSERT 时INSERT MASTER表中的记录,然后修改MASTER表中的记录就行wlj_sh兄: 但Master都是在"新增"狀態下,怎可再insert? 你的意思是否說, 1. 在Detail的before insert中先將Master先post 2. 再edit Master資料 3. 再新增Detail 是嗎? 但是我的意思是說 1. 在Master在新增狀態下(但未post) 2. 再新增detail 3. 把detail Post 4. 再post Master 這樣得嗎?............但BDE是得的........ADO得嗎? 如果不知我說什麼,請看我最初發問的問題(在最頂的問題) 謝謝 《觸不到問題人》 來無影,去無踪, 問題總是一羅羅。 |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 請問各大佬: 我的ADO pogram 上有個DBGrid1(Master)和DBGrid2(Detail),當我在DBGrid1(Master) 上輸入一個record但未post,之後在DBGrid2(Detail)上輸入一個record,但當我按post時,這個record在DBGrid2就不見了,之後我在DBGrid1(Master)按post,也見不到Detail那隻record. 之後我要將DBGrid1(Master)'s pointer 移去其他record,然後移回剛才新增之Master Record,才可見回剛才新增之Detail record。 但我測試過,如果我在新增Detail record之前,把Master Record 先post,然後再新增Detail record,就沒有問題。 但我在BDE是可以Master 未post,但Detail也可以加record, 究竟有什麼方法可解決< >< > 發表人 - >>< face="Verdana, Arial, Helvetica"> problemman兄: 您的問題我已經在http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28683建議了一種作法,以下是我的第二個作法,也是目前我所使用的方法: 這個作法是因為我的單號(也就是Master與Detail連結的欄位)是在當user按存檔鈕時才給定,一開始新增Master及Detail的單號都是空白,結果我使用了第一種方法(ClientDateSet DataSetProvider)的方式,又回到一開始的問題也就是Detail會不見了。(若是用ClientDateSet DataSetProvider的方式,一開始新增Master就給定單號那Detail就不會消失) 解決方法: 也就是Master與Detail的連結,自已做。 一般而言,我們都會將Datail的TADOQuery的DataSource指向Master的TADOQuery(若是TADOTable則是將MasterSource指向Master的TADOQuery),就是這個地方再搞怪,拿掉關連,自已用程式控制,不交給ADO幫我們作關連,舉個例子: ADOqryMaster:SQL:Select * From SellM ADOqryDetail:SQL:Select * From SellD Where Sell_No = :Sell_No or 0 = :Switchprocedure TForm1.ADOqryMasterAfterScroll(DataSet: TDataSet); begin if DataSet.State in [dsInsert, dsEdit] then begin ADOqryDetail.Close; ADOqryDetail.Parameters.ParamByName.FieldByName('Switch').Value := 1; ADOqryDetail.Parameters.ParamByName.FieldByName('Sell_No').Value := DataSet.FieldByName('Sell_No').AsString; ADOqryDetail.Open; end else beign ADOqryDetail.Close; ADOqryDetail.Parameters.ParamByName.FieldByName('Switch').Value := 1; ADOqryDetail.Open; end end; //另外再刪除後已必須將Detail重新Close、Open procedure TForm1.ADOqryMasterAfterDelete(DataSet: TDataSet); begin ADOqryDetail.Close; ADOqryDetail.Parameters.ParamByName.FieldByName('Switch').Value := 1; ADOqryDetail.Parameters.ParamByName.FieldByName('Sell_No').Value := DataSet.FieldByName('Sell_No').AsString; ADOqryDetail.Open; end;補充:您必須使用UpdateBatch模式,即是將Lock Type設為ltBatchOptimistic 這樣應該就可以,您可以試試看... ~小弟淺見,參考看看~ 發表人 - channel 於 2003/04/24 16:45:59
------
~小弟淺見,參考看看~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |