有關於分割資料庫應用程式的問題! |
尚未結案
|
sanhang
一般會員 發表:12 回覆:25 積分:17 註冊:2002-08-31 發送簡訊給我 |
先說聲對不起,因為知道DataBase區的前輩與人氣較為旺盛
才會將此問題PO在此區,不過這個問題還是勉強跟DB沾的上一點邊
各位先進們
我手上有大約十幾個模組
每一個Project都有自己的DataModulem與數量不定的Form
我想要將他們用Package整合起來
將資料庫物件獨立成一個Package,其他模組各自成為一個Package
以下是我的步驟
1.建立一個MyDB.dpk,新增一ConnectionDBModule,並加入一ADOConnection(共同連線用)
將各模組的DataModule加入到此模組,各模組的連線物件更改成ConnectionDBModule.AdoConnection
2.新增個別的Package,將個別的模組檔案加入各自的Package中的Contains
Requires加入必要的package與DB.dpk
3.共同模組部份則採用huanlin_tsai的AppAddin.dpk(感謝huanlin_tsai兄)
function LoadAddinPackage(const PackageID, FileName: string): HMODULE; var ModuleInstance: HMODULE; begin { 檢查package是否已經載入以避免重複載入,重複載入模組只會遞增參考計數 } ModuleInstance := GetModuleHandle(PChar(ExtractFileName(FileName))); if ModuleInstance = 0 then begin ModuleInstance := LoadPackage(FileName); { 已經存在的 package 不要重複加入串列中 } if AddinPackages.IndexOfObject(Pointer(ModuleInstance)) < 0 then AddinPackages.AddObject(UpperCase(PackageID), Pointer(ModuleInstance)); end; Result := ModuleInstance; end; function CreateFormByClassName(const ClassName: string): TCustomForm; var AClass: TPersistentClass; begin { Note that TApplication "owns" this form and thus it must be freed prior to unloading the package } AClass := GetClass(ClassName); if AClass <> nil then Result := TComponentClass(AClass).Create(Application) as TCustomForm else raise Exception.CreateFmt(sErrorCreateForm, [ClassName]); end; function ShowModalFormByClassName(const ClassName: string): integer; var frm: TCustomForm; begin frm := CreateFormByClassName(ClassName); try Result := frm.ShowModal; finally frm.Release; end; end;4.新增一Project Group,然後新增一Main Project與一個Main Form 加入各模組,如下所示 MyProjectGroup --AppAddin.bpl --MyMainProject.exe (Active) ------Main Form --ModulePackage1.bpl (Requires包含MyDB.dcp) --ModulePackage2.bpl (Requires包含MyDB.dcp) --ModulePackage3.bpl (Requires包含MyDB.dcp) --MyDB.bpl[Project] -> [Options] -> 在[Packages]的Tab裡 -> 將[Build With Run-Time Packages]打勾 5.在各個Package中的Form裡加入 ex. initialization RegisterClass(TModulePackage1Frm);6.在Main Form呼叫各模組的地方使用 LoadAddinPackage('ModulePackage1','ModulePackage1.bpl'); ShowModalFormByClassName('TModulePackage1Frm');不知道各位先進覺得小弟建立Package模組的方法有哪些錯誤的地方 目前已知的錯誤是呼叫模組時會出現A Class Named TConnectionDBModule already exists的錯誤 小弟我雖然爬過一些文,但是對於Package的觀念還是很薄弱 希望各位能指點一下小弟 對了,除了寬達兄所翻譯的那本Delphi 4 Develope Guide對Package有較多著墨外 還有沒有什麼書是對Delphi分割應用程式(DLL與Package)有較多描述的 謝謝各位耐心看完本文 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |