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

請問有關 package 載入執行檔的問題

答題得分者是:Ktop_Robot
alvin26
初階會員


發表:24
回覆:41
積分:28
註冊:2005-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-27 01:00:10 IP:61.230.xxx.xxx 未訂閱
Hi,各位大大: 小弟剛學三層架構,在依照書上的範例執行後 發現有錯誤,不知道該如何解決, 可否麻煩各位大大指點一下: 我在看李維大師寫的有關在獨立執行檔中, 載入並且使用自已開發的 package 的部分, 我已把 package 寫好了,是個只有一個 DataModul 的 package. 另外,在這獨立執行檔中,要去載入並使用 package 中 DataModul的 query 做為資料來源。 程式範例寫法如下: 其中有問題的地方是在 LoadDataModule的其中一行程式: Application.CreateForm(pDMClass,pGlobalDM); 錯誤訊息是: Incompatible types: 'TComponentClass' and 'TPersistentClass' 李維大師說: GetClass可以回傳指定名稱類別的 MetaClass, 又說,剛好 CreateForm 是接受 MetaClass , 這樣就可以載入事先寫好的 package , 並使用其中的服務類別了。 但為什麼程式不能執行呢? 請指點一下,謝謝各位大大. Package source code: ====================== unit dmu; interface uses SysUtils, Classes, DB, DBTables; type TdmSharedDatabase = class(TDataModule) dbSysDb: TDatabase; qryOC_BL: TQuery; srcOC_BL: TDataSource; private { Private declarations } public { Public declarations } end; var dmSharedDatabase: TdmSharedDatabase; implementation {$R *.dfm} initialization RegisterClass(TdmSharedDatabase); end. ========================================= 執行檔 source code: ==================== unit fm10010u; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, DB, Grids, DBGrids, StdCtrls; type TMainForm = class(TForm) DBGrid1: TDBGrid; DataSource1: TDataSource; Panel1: TPanel; DBNavigator1: TDBNavigator; Button1: TButton; procedure FormActivate(Sender: TObject); private cDBConnect:integer; cUIConnect:integer; procedure LoadDBPackage; procedure LoadDataModule; { Private declarations } public { Public declarations } end; var MainForm : TMainForm; pDMClass : TComponentClass;// TPersistentClass; pGlobalDM : TDataModule; implementation {$R *.dfm} procedure TMainForm.FormActivate(Sender: TObject); begin cDBConnect:=0; cUIConnect:=0; LoadDBPackage; end; procedure TMainForm.LoadDataModule; var iCounter:integer; begin pDMClass:=GetClass('TdmSharedDatabase'); Application.CreateForm(pDMClass,pGlobalDM); if (pDMClass <> nil) then begin for iCounter := 0 to pGlobalDM.ComponentCount - 1 do begin if UpperCase(pGlobalDM.Components[iCounter].ClassName) 'TQUERY' then begin aQuery:=TQuery(pGlobalDM.Components[iCounter]); DataSource1.DataSet:=aQuery; Break; end; end; end; end; procedure TMainForm.LoadDBPackage; begin try Mainform.cDBConnect := LoadPackage(Tdm); LoadDataModule; except On E:Exception do begin MessageBeep(word(-1)); ShowMessage(E.Message); Application.Terminate; end; end; end; end. ====================
------
弟子規,聖人訓,首孝悌,次謹信,泛愛眾,而親仁,有餘力,則學文。
系統時間:2024-05-09 0:12:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!