依需求的不同呼叫不同的CLASS 從DELPHI的寫法如何轉成BCB的方式 |
答題得分者是:dllee
|
tyw6455
一般會員 發表:7 回覆:9 積分:3 註冊:2005-06-23 發送簡訊給我 |
之前寫過在DELPHI裡面有寫過
依照連不同資料庫的用不同的CLASS給予不同的連線字串 目前在BCB裡面有相類似的需求 ,但不清楚要怎麼去轉 請問是不是有人能告知怎麼轉 謝謝 DELPHI的程式 [code] unit UnDBFunc; interface uses SysUtils, UnConn, UnSql, UnExeMax, UnDelData; type TDBFunc = class(TObject) public constructor Create; destructor Destory; function GetConnStr(viDBKind : Integer): TDBConnStr; end; implementation { TDBFunc } constructor TDBFunc.Create; begin // end; destructor TDBFunc.Destory; begin // end; function TDBFunc.GetConnStr(viDBKind : Integer): TDBConnStr; begin case viDBKind of 1 : Result := TMSSQLConnStr.Create As TDBConnStr; 2 : Result := TDBFConnStr.Create As TDBConnStr; 3 : Result := TExeclConnStr.Create As TDBConnStr; end; end; end. [/code] 這個是呼叫的方式 主要也是這個程式不會改寫 在*.H 裡面怎麼定義, *.CPP裡面怎麼去寫 下面 TMSSQLConnStr 、TExeclConnStr 、TExeclConnStr 都是繼承自TDBConnStr [code] unit UnConn; interface uses SysUtils; type TDBConnStr = class(TObject) Private FsID, FsPassWord, FsDBName, FsDBPath : string; protected public constructor Create; destructor Destory; property ID: string Write FsID; property PassWord: string Write FsPassWord; property DBName: string Write FsDBName; property DBPath: string Write FsDBPath; function GetConnStr: string; Virtual; Abstract; end; {取得MSSQL的ADO連線字串} TMSSQLConnStr = class(TDBConnStr) public function GetConnStr: string; Override; end; {取得DBF的ADO連線字串} TDBFConnStr = class(TDBConnStr) public function GetConnStr: string; Override; end; {取得Execl的ADO連線字串} TExeclConnStr = class(TDBConnStr) public function GetConnStr: string; Override; end; implementation {實做} constructor TDBConnStr.Create; begin FsID := ''; FsPassWord := ''; FsDBName := ''; FsDBPath := ''; end; destructor TDBConnStr.Destory; begin end; { TMSSQLConnStr } function TMSSQLConnStr.GetConnStr: string; var sConnStr :string; begin inherited; sConnStr := 'Provider=SQLOLEDB.1;Password=%S;User ID=%S' ';Initial Catalog=%S;Data Source=%S;Persist Security Info=True;'; Result := Format(sConnStr,[FsPassWord,FsID,FsDBName,FsDBPath]); end; { TDBFConnStr } function TDBFConnStr.GetConnStr: string; var sConnStr :string; begin inherited; sConnStr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%S;' 'Extended Properties=dBase III'; Result := Format(sConnStr,[FsDBPath]); end; { TExeclConnStr } function TExeclConnStr.GetConnStr: string; var sConnStr :string; begin inherited; sConnStr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%S;' 'Extended Properties=Excel 8.0'; Result := Format(sConnStr,[FsDBPath]); end; end. [/code] 對了 還有一個問題 在DELPHI裡面 function GetConnStr: string; Virtual; Abstract; 這種宣告法 我只知道BCB 可以用virtual 但不知 Abstract 是否也需要轉過去或是不需要(抑或BCB裡面沒有) 編輯記錄
tyw6455 重新編輯於 2007-09-10 09:58:59, 註解 無‧
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
身為一位 BCB 的使用者,應該用善用 BCB 的優點,也就是可以直接使用 Delphi 的元件。
所有 VCL 元件都是 Delphi 寫的,但 BCB 可以直接使用。 您只需要開一個新的 BCB 專案,將您已寫好的 Delphi Unit (.pas) 加到您的專案中, 可以先不寫任何 code,直接 compile 專案,即可得到該 .pas 檔的 .hpp 檔, 假設您的 Delphi Unit 是 ooxx.pas 則在 compile 後會產出 ooxx.dcu(類似 .obj 檔) 及 ooxx.hpp 在 ooxx.hpp 檔可以看到: // Borland C Builder // Copyright (c) 1995, 1999 by Borland International // All rights reserved // (DO NOT EDIT: machine generated header) 'OOXX.pas' rev: 5.00 這是由 compiler 產生的,每次 .pas 有更新,在 compile 時,此 .hpp 檔就會更新。 在 .hpp 檔產出後,在 .cpp 的 Unit 或其 .h 檔內,就可以 include 它,接著就可以 new 出 ooxx.hpp 內的 Txxx 物件了。 物件需要修改時,可以直接改 .pas 檔,或是如果對 Delphi 不熟,就繼承它用 BCB 寫即可, 就如同用 BCB 繼承現有 VCL 元件再修改一樣。 用 BCB 可要記得這點,才能真的快速開發,否則,Delphi 別人寫了一遍,自己又要用 BCB 重寫一次,如果都要這樣,就太累了,同時也是作白工耶。 之前您的提問:什麼樣的查詢條件比較容易找出有關BCB裡如何切Package(*.bpl)的文章 其實只要您有原始碼,不論是 Delphi Unit .pas 或 BCB Unit .cpp/.h 可自行按其相關性 放在同一個 package。如果高興,一個 class 也可以是一個 package。基本上,可以說 是按開發者自己高興去分/切 Package。另一個方向思考,如果您的 Package 是要賣錢, 就可以把想分開應用的分開 Package,那就可以分開賣了。
------
http://www.ViewMove.com
編輯記錄
dllee 重新編輯於 2007-09-10 21:06:04, 註解 無‧
|
tyw6455
一般會員 發表:7 回覆:9 積分:3 註冊:2005-06-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |