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

detail的儲存

答題得分者是:ccchen
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-04 00:31:49 IP:202.178.xxx.xxx 未訂閱
各位先進: 我在pagecontrol外用dbnavigator控制master的資料adotable1 在tabsheet1擺上detail adotable2 adotable3 在tabsheet2擺上detail adotable4(這些的master field都是 adotable1的同一項) 理想上的動線是新增完master後新增detail1 detail2... 那如果只新增完master跟detail1後用控制dbnavigator換到別筆master的資料 有沒有辦法在這時就儲存並更新呢? 因為我發覺資料只會在我關掉再重新啟動程式的時候才會儲存detail
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-04 07:35:38 IP:61.219.xxx.xxx 未訂閱
當然可以, 就看你程式如何寫 一般而言, 你正在編輯的record只要換到別筆就會自動儲存, 故如果如你所描述之狀況, 你的Master應該會Save. Detail則不會, 因為Detail是輸入完後未移動cursor直接離開 DBGrid 在Options內有一個dgCancelOnExit, 預設為True, 改為False應該可以解決你的問題
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-04 10:37:01 IP:202.178.xxx.xxx 未訂閱
謝謝你的回答,不過我還有問題 我的master-detail是一對一的 所以我沒有在detail的地方放dbgrid 那還有其他的方法嗎? 還是真的要用dbgrid,我把他設visible設false?
andersonhsieh
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-04 10:41:16 IP:211.20.xxx.xxx 未訂閱
試試在MASTER AFTER POST將MASTER CLOSE 再 OPEN @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-04 12:00:05 IP:202.178.xxx.xxx 未訂閱
ㄜ....對不起,我好像沒說清楚 我要存的是detail 也就是我insert master完insert detail後 如果此時將master的指標改變 detail該怎麼儲存? 由於我detail只會有一筆,但是有很多detail...(因為是精神科的病歷 ,所以不會有一對多的關係) 所以我沒設dbnavigator,dbgrid 那將master close再open也會存detail嗎?
andersonhsieh
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-04 12:49:18 IP:211.20.xxx.xxx 未訂閱
可否將你的儲存流程詳細說明一下,這樣大家才有辦法幫你 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-04 13:02:29 IP:61.219.xxx.xxx 未訂閱
在Master之After post直接Detail.post就好了
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-04 14:27:44 IP:202.178.xxx.xxx 未訂閱
謝謝,我的問題終於解決了 除了在master的afterpost時加入detail post 還在master afteredit時加入detail post 不過我現在每加入一筆master後再加入detail時 都不知道為什麼會先出現一筆空白的資料 我把程式po在下面 unit datamodule; interface uses SysUtils, Classes, DB, ADODB; type TDataModule1 = class(TDataModule) DataSource1: TDataSource; ADOConnection1: TADOConnection; ADOTable1: TADOTable; //我的master DataSource3: TDataSource; ADOTable3: TADOTable; //我的detail ADOTable3sn: TWideStringField; ADOTable3clear: TBooleanField; ADOTable3drowsy: TBooleanField; ADOTable3confusional: TBooleanField; ADOTable3clouding: TBooleanField; ADOTable3stupor: TBooleanField; ADOTable3comatous: TBooleanField; ADOTable3twilight: TBooleanField; ADOTable3fluctuating: TBooleanField; ADOTable3delirious: TBooleanField; procedure ADOTable3NewRecord(Dataset:Tdataset); procedure ADOTable1AfterPost(DataSet: TDataSet); procedure ADOTable1AfterEdit(DataSet: TDataSet); private { Private declarations } public { Public declarations } end; var DataModule1: TDataModule1; implementation uses client; {$R *.dfm} procedure TDataModule1.ADOTable3NewRecord(Dataset:Tdataset); begin if adotable1.state=dsinsert then adotable1.post; if adotable3.state=dsinsert then ADOtable3.fieldbyname('sn').Asinteger:=ADOTable1.fieldbyname('sn').Asinteger; end; procedure TDataModule1.ADOTable1AfterPost(DataSet: TDataSet); begin adotable3.DisableControls; adotable3.Edit; adotable3.Post; adotable3.Close; adotable3.Open; adotable3.EnableControls; end; procedure TDataModule1.ADOTable1AfterEdit(DataSet: TDataSet); begin adotable3.DisableControls; adotable3.Edit; adotable3.Post; adotable3.Close; adotable3.Open; adotable3.EnableControls; end; end. 是不是我的邏輯上出錯了?
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-04 15:00:45 IP:61.219.xxx.xxx 未訂閱
這些程式碼寫的很奇怪, 提供些意見給你參考 DisableControls主要在Disable 資料元件(如TTable等)與編輯元件(如DBEdit,DBGrid等)之關係, 以便大量更新資料時不用每筆均更新畫面. 例如在載入整個DataSet時. 在你的情況下, 用navigator編輯一筆資料, 不應disablecontrols    
procedure TDataModule1.ADOTable3NewRecord(Dataset:Tdataset);
begin
  if adotable1.state=dsinsert then
    adotable1.post;

  if adotable3.state=dsinsert then //在NewRecord中, dataSet一定在insert中, 不須此行        ADOtable3.fieldbyname('sn').Asinteger:=ADOTable1.fieldbyname('sn').Asinteger;
end;    procedure TDataModule1.ADOTable1AfterPost(DataSet: TDataSet);
begin
  adotable3.DisableControls;//不須此行
  adotable3.Edit;//不須此行
  if adoTable3.state in [dsEdit,dsInsert] then 
    adotable3.Post;
  adotable3.Close;
  adotable3.Open;
  adotable3.EnableControls;//不須此行
end;    procedure TDataModule1.ADOTable1AfterEdit(DataSet: TDataSet);
begin
  adotable3.DisableControls;//不須此行
  adotable3.Edit;//不須此行
  if adoTable3.state in [dsEdit,dsInsert] then 
    adotable3.Post;
  adotable3.Close;
  adotable3.Open;
  adotable3.EnableControls;//不須此行
end;
不斷的close, open其實也不須要
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-04 16:18:19 IP:202.178.xxx.xxx 未訂閱
謝謝你的建議,這給我的幫助非常大 因為我是自學的,在範例程式的取捨上 常常不知道我可以修改的有多少 東拼西湊,所以很奇怪 嗯,我會再想想我整個的流程的! 謝謝!
系統時間:2024-05-05 4:01:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!