debug |
尚未結案
|
QOO10
初階會員 發表:59 回覆:89 積分:29 註冊:2002-12-25 發送簡訊給我 |
下列程式 datablock 是繼承 panel ,希望能在 onenter 時設定其 onwner
下之 dsmaster (tdatasource) 的 dataset property ,但在此單原看都有
設成功,但在換 dataset 時觸發 dsmasterdatachange 時關查又沒換成
不知為何?? procedure TDataBlock.OnEnter(sender:Tobject);
var
aObject,aDatasource,vDatasource,bObject:Tobject;
i:integer;
propInfo:PPropInfo;
begin
aObject := Tcomponent(sender).Owner;
while not (aObject Is TForm) do
aObject := Tcomponent(sender).Owner;
if Autolink then
begin
aDatasource:=Tcomponent(aObject).FindComponent('dsMaster');
if aDatasource <> nil then
begin
if (aDataSource is TDataSource) then
begin
i:=0;
while i <= TWinControl(sender).ControlCount-1 do
begin
bObject := TWinControl(sender).controls[i];
PropInfo:=GetPropInfo(bObject.ClassInfo,'DataSource');
if propInfo <> nil then
begin
vDatasource:=GetObjectProp(TWinControl(sender).controls[i],propInfo);
if vDataSource <> nil then
begin TDataSource(aDataSource).DataSet:=TDataSource(vDataSource).dataset; exit;
end;
end;
i := i + 1;
end;
end
else
begin
showmessage('dsMaster Type Error!!');
Application.Terminate;
end;
end;
end;
end;
|
QOO10
初階會員 發表:59 回覆:89 積分:29 註冊:2002-12-25 發送簡訊給我 |
引言: 下列程式 datablock 是繼承 panel ,希望能在 onenter 時設定其 onwner 下之 dsmaster (tdatasource) 的 dataset property ,但在此單原看都有 設成功,但在換 dataset 時觸發 dsmasterdatachange 時關查又沒換成 不知為何?? procedure TDataBlock.OnEnter(sender:Tobject); var aObject,aDatasource,vDatasource,bObject:Tobject; i:integer; propInfo:PPropInfo; begin aObject := Tcomponent(sender).Owner; while not (aObject Is TForm) do aObject := Tcomponent(sender).Owner; if Autolink then begin aDatasource:=Tcomponent(aObject).FindComponent('dsMaster'); if aDatasource <> nil then begin if (aDataSource is TDataSource) then begin i:=0; while i <= TWinControl(sender).ControlCount-1 do begin bObject := TWinControl(sender).controls[i]; PropInfo:=GetPropInfo(bObject.ClassInfo,'DataSource'); if propInfo <> nil then begin vDatasource:=GetObjectProp(TWinControl(sender).controls[i],propInfo); if vDataSource <> nil then begin TDataSource(aDataSource).DataSet:=TDataSource(vDataSource).dataset; exit; end; end; i := i 1; end; end else begin showmessage('dsMaster Type Error!!'); Application.Terminate; end; end; end; end; sorry !! TDataSource(aDataSource).DataSet:=TDataSource(vDataSource).dataset; 此行 利用 watch list 看是有將 dsmaster.dataset 換了 但下列確 show 舊值!! procedure TTSMutitbfrm.dsMasterDataChange(Sender: TObject; Field: TField); begin showmessage( Tdataset(tdatasource(sender).DataSet).name) end; |
QOO10
初階會員 發表:59 回覆:89 積分:29 註冊:2002-12-25 發送簡訊給我 |
引言:引言: 下列程式 datablock 是繼承 panel ,希望能在 onenter 時設定其 onwner 下之 dsmaster (tdatasource) 的 dataset property ,但在此單原看都有 設成功,但在換 dataset 時觸發 dsmasterdatachange 時關查又沒換成 不知為何?? procedure TDataBlock.OnEnter(sender:Tobject); var aObject,aDatasource,vDatasource,bObject:Tobject; i:integer; propInfo:PPropInfo; begin aObject := Tcomponent(sender).Owner; while not (aObject Is TForm) do aObject := Tcomponent(sender).Owner; if Autolink then begin aDatasource:=Tcomponent(aObject).FindComponent('dsMaster'); if aDatasource <> nil then begin if (aDataSource is TDataSource) then begin i:=0; while i <= TWinControl(sender).ControlCount-1 do begin bObject := TWinControl(sender).controls[i]; PropInfo:=GetPropInfo(bObject.ClassInfo,'DataSource'); if propInfo <> nil then begin vDatasource:=GetObjectProp(TWinControl(sender).controls[i],propInfo); if vDataSource <> nil then begin TDataSource(aDataSource).DataSet:=TDataSource(vDataSource).dataset; exit; end; end; i := i 1; end; end else begin showmessage('dsMaster Type Error!!'); Application.Terminate; end; end; end; end; sorry !! TDataSource(aDataSource).DataSet:=TDataSource(vDataSource).dataset; 此行 利用 watch list 看是有將 dsmaster.dataset 換了 但下列確 show 舊值!! procedure TTSMutitbfrm.dsMasterDataChange(Sender: TObject; Field: TField); begin showmessage( Tdataset(tdatasource(sender).DataSet).name) end;sorry 弄錯了!!是 procedure TTSMutitbfrm.dsMasterDataChange(Sender: TObject; Field: TField); begin showmessage( Tdataset(tdatasource(sender).DataSet).name); showmessage( dsMaster.dataset.name); // dsmaster.dataset:=Tdataset(tdatasource(sender).DataSet; end; 兩者答案不同但我確定 from 上只有一個 dsmaster !!之前有網友 回答但我還是不太懂我要如何解決!!我只知利用 dsmaster.dataset:=Tdataset(tdatasource(sender).DataSet; 補此洞但,我想知道為何如此?? |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
QOO10
初階會員 發表:59 回覆:89 積分:29 註冊:2002-12-25 發送簡訊給我 |
引言: 1. 對不起,原文未縮排, 看不懂, 幫你縮排了一下 2. showmessage( Tdataset(tdatasource(sender).DataSet).name); showmessage( dsMaster.dataset.name); 顯示不同結果, 是否有繼續debug下去, 第二次再進入此Event時仍不同嗎? 還是只是在換DataSet時驅動此Event有不同結果, 之後就正確了呢謝謝您幫我重排,下次我會流意,是的我沒次更換 dataset 時在 onenter 利用 watch list 看 TDataSource(aDataSource).name 是 'dsmaster' TDataSource(aDataSource).dataset.name 都已跟換新的 dataset 但到TTSMutitbfrm.dsMasterDataChange(Sender: TObject; Field: TField); 時 dsmaster.dataset.name 又回舊值,但tdataource(sender).dataset 確是新值,於是我目前只補了一行來補洞"dsmaster:=tdatasource(sender) 但奇怪的是為何如此?? |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |