2015/04/25
FireDAC dbExpress 效能之戰,使用DataSnap
但是ADO和FireDAC是屬於2-Tier架構元件,要和DBX這種屬於單向唯讀的元件比較,由於立足點不同,所以直接比較是非常奇怪的事情。
也許使用While Loop測試比較也可以;但測試結果與其說是測元件效能,說是測試電腦硬體效能應該更為貼切。
While not Query.Eof do
begin
Query.FieldByName(FieldName).AsString...
Something code...
Query.Next();
end;
這樣的應用,現實設計卻很少在我們的專案中出現。
那麼這樣的測試方法,存在有以下兩點問題:
2015/04/23
原來DBX4 Driver可以這樣更新
2015/04/21
Delphi DataSnap CORBA C/S 構築方式
很意外的,居然還有人在使用CORBA技術,而且還有Open Source出來,可以免費使用。
它的名字是:MTDORB -- Multi-threaded Delphi ORB
文末的「 オープンソースを利用した 3層C/Sシステムの構築方法」是2006年的版本,在Delphi 2009後已經不知道要怎麼去建構CORBA Client……
但至少還是個希望,有機會可以試試看讓它復活。
參考資料:
- MTDORB - Delphi向けCORBA実装
- 業務管理システム開発の実例にみる,3層スタイルC/Sアプリ作成術
- 3層スタイルC/Sアプリ作成術 サンプルプログラムソース
- オープンソースを利用した3層C/Sシステムの構築方法
Delphi XE Regular Expressions 單元中的 Bug
在 RegularExpressions 單元有個潛在的bug。 重現的方式也很簡單:
procedure TForm1.Button1Click(Sender: TObject); begin Button1.Caption := TRegEx.Match('one two', '\w+').NextMatch.Value; end;
會發現Button1.Caption變成空白,而不是預期的"one"。
詳細的解說在:
Bug in Delphi XE RegularExpressions Unit.
解決方式如下:
To fix this bug, delete or rename the two RegularExpressions.dcu files and copy RegularExpressions.pas into your source code folder. Make these changes to both the TMatch and TGroupCollection records in this unit:
- Declare FNotifier: IInterface; in the private section.
- Add the parameter ANotifier: IInterface; to the Create constructor.
- Assign FNotifier := ANotifier; in the constructor’s implementation.
You also need to add the ANotifier: IInterface; parameter to the TMatchCollection.Create constructor.
修改完成後,把Debug和Release後的dcu,覆蓋($BDS)\lib\debug(release)目錄同名檔案即可。
附帶說明,在Delphi XE2以後已經修正了這個Bug,如果你有需要,請再留言索取。
參考資料:
2015/04/17
dbExpress SetSchemaInfo 取得結構的勘誤之處
dbExpress 的 SetSchemaInfo 一直以來都很接近 ADO 的 OpenSchema,連取得的表格格式都很接近。
先來看看TADOConnection.OpenSchema和TSQLConnection.SetSchemaInfo各別取得的表格:
Get Primary Key Schema Information | |
---|---|
ADO | DBX |
TABLE_CATALOG | RECNO |
TABLE_SCHEMA | CATALOG_NAME |
TABLE_NAME | SCHEMA_NAME |
COLUMN_NAME | TABLE_NAME |
COLUMN_GUID | INDEX_NAME |
COLUMN_PROPID | PKEY_NAME |
ORDINAL | COLUMN_NAME |
PK_NAME | COLUMN_POSITION |
INDEX_TYPESORT_ORDERFILTER |
看起來一切是如此美好。
但沒想到在dbExpress 4之後,SetSchemaInfo做了一些調整;dbExpress 4下使用SQLConnection.SetSchemaInfo取得的表格居然是:
dbExpress 4: SetSchemaInfo stIndexes |
---|
CatalogName |
SchemaName |
TableName |
IndexName |
ConstraintName |
IsPrimary |
IsUnique |
IsAscending |
結果COLUMN_NAME被取消了,如此一來,要使用DBX就無法直接使用SetSchemaInfo來取得Primary Key欄位。
只是,每一版The Structure of Metadata Datasets卻從來沒有更新及說明替代方法,實在是很讓人傷腦筋。
可參閱:
- The Structure of Metadata Datasets with XE
- The Structure of Metadata Datasets with XE2
- The Structure of Metadata Datasets with XE3
- The Structure of Metadata Datasets with XE4
- The Structure of Metadata Datasets with XE5
- The Structure of Metadata Datasets with XE6
- The Structure of Metadata Datasets with XE7
- The Structure of Metadata Datasets with XE8
- dbExpress Feature Overview
- Data.SqlExpr.TCustomSQLDataSet.SetSchemaInfo
- OpenSchema Method (ADO)
- DbExpress 取得資料表結構的方法
- dbExpress (DBX4) 智慧取得 MetaData 方法研究
2015/04/21 更新:
2015/04/07
FireBird測試使用的資料庫
常見的北風資料庫很不錯,但就是要安裝 SQL Server 這點就比較麻煩。
剛剛在這裡找到Borland Interbase 6.0搭載的範例資料庫,搭配Firebird emb上很好測試。
在這邊記錄一下連結:
mirrors for employee.gdb
2015/04/02
Delphi IntraWeb 會計系統程式設計
作者:吳祐賓
IntraWeb(以下簡稱IW)是Delphi裡繼WebSnap後另一個網站設計解決方案。
許多Delphier認為IW不是個一回事。
不過如果IW真的這麼糟,能從3.x發展到現在的XIV,直接說它不堪使用也未免太過武斷。
今天為了證明IW實用性而找了一個專案來嘗試看看。
就以陳惟彬老師的ASP.NET會計系統來體驗試作。
ASP.NET會計系統程式設計 2002 陳惟彬著 |
為什麼要使用這本書?
- 這套系統是以ASP.NET 1.1 VB語言進行開發,有以下和IW共同的特色:
2.全面使用ASP.NET元件,剛好和IW元件形成對照組。
-
考量Delphier的
不良習慣,限縮設計的手段:
2.付費可以省工,TMS for IntraWeb參戰。
專案開發環境:
- Delphi XE
- FireBird database 1.5 embedded (.Net framework not need!)
- IntraWeb XIV 14.0.23
- TMS IntraWeb Component Pack 5.4.1.1
整個專案所需要的檔案 |
IntraWeb 會計系統主畫面 |
新增子會科程式畫面 |
與 VCL Form 設計比較不同的地方是:
1.為了配合AJAX(Asynchronous JavaScript and XML),在IW元件中,或多或少都有提供OnAsync事件,而要使用OnAsync事件時,必須要注意搭配元件的刷新。
以「新增子會科程式」為例,當TIWDBAdvWebGrid允許Async Edit時,就必須在.OnAsyncEdit事件寫上TIWDBAsyncNavigator元件變更處理,否則便出現 Grid 在編輯狀態,但Navigator卻沒有變化的搞笑情形。
2.TIWDBGrid和TDBGrid很像,但編輯功能還需要綁定其它TIWDBxxx元件。
3.新增功能:
A.TIWDBGrid:無此功能,必須另外設計新增畫面。
B.TIWDBAdvWebGrid:有新增功能,非常接近TDBGrid體驗。
4.TIWDBAdvWebGrid內建就有和ASP.NET Grid相同的分頁功能,這是DBGrid沒有的功能。
開發心得:
開發過程中全都使用Delphi程式,開發習慣並沒有因為是網站開發而有所改變。
IW元件功能和VCL元件相比,功能性相對較差,不足的地方還需要額外程式處理,一樣全面使用Delphi Code。
TDataSet存放在Web Server上,這先天的限制使 IW 註定不能承受太大量的使用者負載,但卻能做到很複雜的商業運算。當然也可以不使用TDataSet,這樣就不需使用DB Aware元件,就像不使用DBGrid而使用StringGrid一樣,但相對的,就必須在程式上多費點苦心。
畫面很陽春,和VCL一樣,沒有內建 OS Style 的 IW 畫面實在太復古。