動態表單創建主題已經被多次討論過了,但是我找不到解決我的問題的東西,所以在這裏我再次...... :-)德爾福 - 在新創建的表單上創建表單並創建對象
我之前的問題讓我認爲,如果不是所有表單都是在啓動時創建的,而是在需要時動態創建的,那麼我的應用程序的啓動速度會更快。 大多數情況都是如此,當我只創建了我的主Form和Datamodule時,啓動速度要快得多。
在按一下按鈕,下面是我用它來創建的代碼,並免費點播形式(主要是由什麼我發現這裏從傑裏·道奇和克雷格·楊的回答啓發,感謝他們的幫助):
procedure TfrmWelcome.BtKeywordsClick(Sender: TObject);
var
F_Keywords : TfrmKeywords;
begin
F_Keywords := Tfrmkeywords.Create(nil);
try
F_Keywords.ShowModal;
finally
F_Keywords.Free;
end;
end;
再一次,這工作正常,但是,在創建frmKeywords時,主表格應該由顯示錶單時觸發的FDQuery填充。 當然,(否則我就不會在這裏),在FormShow或FORMCREATE事件添加
frmKeywords.FDQuery1.Open;
與「訪問衝突錯誤」結束。
所以我修改了創建代碼,它現在的樣子:
procedure TfrmWelcome.BtKeywordsClick(Sender: TObject);
var
F_Keywords : TfrmKeywords;
begin
F_Keywords := Tfrmkeywords.Create(nil);
try
F_Keywords.FDQuery1.Open;
F_Keywords.ShowModal;
finally
F_Keywords.FDQuery1.Close;
F_Keywords.Free;
end;
end;
(我什至不知道該FDQUery1.Close
finally塊中是非常有用的)。
太棒了,現在我的表單顯示出來了,主數據網格中充滿了數據。
問題是,當用戶在DBGrid1中單擊時,所選記錄的數據庫ID將作爲參數傳遞給輔助FDQuery,該輔助FDQuery將返回填充具有數據的輔助DBGrid(DBgrid1中的主數據, DBGrid2)
這樣做是這樣的:
procedure TfrmKeywords.DBGridEh1CellClick(Column: TColumnEh);
var
kwid : Integer;
begin
frmKeywords.FDQuery2.Close; //Closing secondary query
kwid := FDQuery1.FieldByName('id').AsInteger; //Assigning kw_id according to selected row
frmKeywords.FDQuery2.ParamByName('kw_id').AsInteger := kwid; //Linking query2 parameter to kwid
frmKeywords.FDQuery2.Open; //Reopening query2 to display assets
end;
還有,又像以前, 「訪問衝突錯誤」。像FDQuery不存在也許?
所以我的問題是:當你動態地創建一個窗體,窗體的所有視覺和非可視化組件都會自動創建? Dbgrid出現在我的表單上,似乎工作,因爲數據顯示(至少在其中一個),但第二個FDQuery只是不想工作。 我明顯錯過了這裏的東西。我排除了FDConnection是在數據模塊,因爲FDQuery1的作品,所以我的想法......提前
感謝
數學
這麼簡單,但離我所能想到的還很遠。感謝十億次,作品,我明白爲什麼:-) – Mathmathou
不客氣! :)我已經添加了一些關於控制數據集的註釋。 – Victoria
刪除所有這些全局變量,它們是撒旦的產物。他們只存在模仿VB編碼風格。你想編程,就好像你在寫VB一樣。 –