2011-10-04 64 views
0

下面的代碼是從http://wiki.freepascal.org/MySQLDatabases拉撒路表單創建

procedure TFormTryMySQL.OpenQueryButtonClick(Sender: TObject); 
begin 
ShowQueryForm := TShowQueryForm.Create(self); 
ShowQueryForm.Datasource1.DataSet := SQLQuery1; 
SQLQuery1.SQL.Text := CommandEdit.Text; 
SQLQuery1.Open; 
ShowQueryForm.ShowModal; 
ShowQueryForm.Free; 
SQLQuery1.Close; 
end; 

我是新來的拉撒路。有人可以請解釋行ShowQueryForm:= TShowQueryForm.Create(self);?我特別好奇:

  1. 爲什麼我們需要以編程方式創建窗體?
  2. 什麼是TShowQueryForm?
  3. 我的表單沒有T.爲什麼SQLQuery1 控件可以訪問新表單上的數據?

我很抱歉,如果這不是一個良好的措辭問題,但我很困惑在這裏:(

感謝

回答

0
1. Why do we need to CREATE a form programmatically? 

它是可選的。 vfclists說,你可以讓表單自動創建,其中設計師將表單創建添加到LPR。 (就像德爾福btw)。

2. What is the TShowQueryForm? My form is without a T. 

表單的類型。所以你有一個變量名爲xxxsomeForm,並且Txxxsomeform是它的特定類型。

3. How come the SQLQuery1 control can access the data on the new form? 

其他的方法。網格或任何db知道的控件都在showqueryform中從數據源對象獲取它們的數據。在第二行中:

ShowQueryForm.Datasource1.DataSet := SQLQuery1; 

將當前表單的sqlquery組件分配給新創建表單上的數據集。

+0

感謝您的解釋。最後一點是困惑我。我認爲這兩個表單包含一些對象(例如:數據源),並且這些對象應該是表單的私有對象。我對第二種形式如何簡單地分配第一種數據源感到困惑。 – itsols

+0

designtime組件默認爲「發佈」,即「public」+「generate rtti」。這不是一個非常好的解決方案,(很好會使用datamodule),但也不是非常錯誤 –

0

如果形式在項目中自動創建|!窗體自動創建sas一個在應用程序啓動時自動創建的應用程序不需要創建它

所顯示的表單是一個模式窗體,這意味着它就像一個不會自動創建的對話框,但只能根據需要。

+0

感謝vfclists。這就是我提出這個問題的原因。表單已經在設計視圖中創建。所以我沒有看到使用create方法顯示它的任何意義。我想知道是否有關於填充網格中的數據... – itsols