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

有關於分割資料庫應用程式的問題!

尚未結案
sanhang
一般會員


發表:12
回覆:25
積分:17
註冊:2002-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-03 00:51:34 IP:203.67.xxx.xxx 未訂閱
先說聲對不起,因為知道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)有較多描述的 謝謝各位耐心看完本文
系統時間:2024-06-16 0:43:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!