detail的儲存 |
答題得分者是:ccchen
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
各位先進:
我在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 發送簡訊給我 |
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
謝謝,我的問題終於解決了
除了在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 發送簡訊給我 |
這些程式碼寫的很奇怪, 提供些意見給你參考
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |