請問有關 package 載入執行檔的問題 |
答題得分者是:Ktop_Robot
|
alvin26
初階會員 發表:24 回覆:41 積分:28 註冊:2005-04-12 發送簡訊給我 |
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. ====================
------
弟子規,聖人訓,首孝悌,次謹信,泛愛眾,而親仁,有餘力,則學文。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |