Translate

ebook【Delphi跨平台資料庫程式設計火速上手】電子書出版 (CHT)

Delphi 跨平台資料庫程式設計火速上手,是本關於整合 Delphi 的跨平台技術打造 2-Tier 架構的跨平台 APP 的入門技術書。 全書沒有需要理解的技術知識,只講套路。 力求短時間把製作 APP 的工法熟悉,未來要開發其它的應用程式也能舉一反三。 底下...

2017/11/20

Delphi 往 Web 方向發展,然後呢?

11/17 (五) 聽了 Embarcadero 網路研討會後,大致上有幾個重點:

  • WebBroker 可以在 Linux 上運行 (已經實現)
  • RAD Studio IDE 將會增加 ExtJS 的前端框架
  • 可能支援 JavaScript code insight

ExtJS 開發在這次的研討會並沒有全面性的展示,講師表示會在下一次研討會裡專門講解。

目前後端沒有多作延伸,依然是以 WebBroker 為基底,來看看 WebBroker 在目前 Delphi 裡的框架位階:


由圖可知,WebBroker 是非常底層的框架,它囊括了 HTTP 必要的元素,如 Request, Response 等,非常陽春,但原料豐富,相對靈活性極佳……

2017/11/15

Service Oriented Architecture with WebBroker

在 Embarcadero Technologies Youtube 上看到一篇關於【從零打造以服務導向的WebBroker】,底下將它內嵌過來:



前半部描述的是 SOAP,把 TRemotable 和 SOAP API 的搭配交待得很清楚,輔以 TRemotable 後,SOAP 服務可以更直覺的開發。

2017/10/08

Forever without restarting IIS - ISAPI Loader



Eggcentric ISAPI Loader is update the ISAPI dll solution.

Update your ISAPI DLL while in USE and without restarting IIS!!

I have a name is "ZooISAPI.dll" in ISAPI DLL.

How to use?

Step 1: Rename "ZooISAPI.dll" to "ZooISAPI.run"


Step 2: Copy "ISAPILoader_NODEBUG.dll" or "ISAPILoader_DEBUG.dll" to same path.

Step 3: The file rename to "ZooISAPI.dll"
This time, run the ISAPI path (Original the ZooISAPI.dll), you could get ZooISAPI.run works.

Step 4: When update ISAPI dll. Rename the new version "ZooISAPI.dll" to "ZooISAPI.update", and  move to IIS ISAPI path.
Step 5: Sleep(10000);   :P


Step finish: The ISAPI Loader will unload the .run and rename it to .backup and then rename the .update to .run and then load the .run
Yeah!! Update our ISAPI DLL while in USE and without restarting IIS, forever!!




See also:

2017/10/01

DBX framework 初探 (二) - In FireDAC


上回介紹了 DBX framework 的好處,我們來看看實作的程式碼:


var
  LDBXConn: TDBXConnection;
  LCmd: TDBXCommand;
  LReader: TDBXReader;
begin
  LDBXConn := SQLConnection1.DBXConnection;
  LCmd := LDBXConn.CreateCommand;
  LCmd.Text := 'SELECT * FROM employee';
  LReader := LCmd.ExecuteQuery;
  ...
  LCmd.Close;
  LCmd.Free;
end;

由上面的原始碼可以看出,DBX framework 是建立在 dbExpress 上,但 FireDAC 的 TFDConnection 沒有內建 DBX framework,難道魚和熊掌不可兼得嗎?


當然可以!


FireDAC 是個海納百川的元件組 (雖然我對它沒有愛),和 dbExpress 結合倒也不是件難事。

使用的元件組是:
  • TFDConnection.
  • TFDPhysTDBXDriverLink.

FireDAC 的連線精靈很方便,只需注意:
  • Driver ID = TDBX (DBX4) or DBX (DBX v1~v3)
  • DriverName = 參考 dbExpress 區的 Driver Name (如 MSSQL、IBLite 等)

若有購買 dbExpress 3rd driver,在 FireDAC 包裝下,可以直接使用 TFDQuery,再也不用 TSQLQuery, TDataSetProvider, TClientDataSet 三個元件、三個步驟了。
































哎呀,被你發現還有後續內容啦。


FDConnection 包裝 dbExpress 後,利用 TFDCustomConnection.CliObj,DBX 元件組便可以利用它,再透過轉型的方式重現。


CliObj = Call Level Interface Object. (白話文是:切到【手動排檔】模式)


它的包裝單元很豐富,表格如下:

Driver  Wrapping class and unit 
Advantage  TFDSConnection, FireDAC.Phys.ADSWrapper.pas 
dbExpress (v <= 3)  ISQLConnection 
InterBase, Firebird  TIBDatabase, FireDAC.Phys.IBWrapper.pas 
MySQL  TMySQLSession, FireDAC.Phys.MySQLWrapper.pas 
Microsoft SQL Server  TODBCConnection, FireDAC.Phys.ODBCWrapper.pas 
Microsoft Access TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
IBM DB2 TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
Sybase SQL Anywhere TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
ODBC TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
Oracle TOCIService, FireDAC.Phys.OracleWrapper.pas 
PostgreSQL  TPgConnection, FireDAC.Phys.PgWrapper.pas 
SQLite  TSQLiteDatabase, FireDAC.Phys.SQLiteWrapper.pas 
TDBX (v >= 4)  TDBXConnection, FireDAC.Phys.TDBX.pas 
DataSnap TDBXConnection, FireDAC.Phys.TDBX.pas
MongoDB TMongoConnection, FireDAC.Phys.MongoDBWrapper.pas


之後只要改一行文字即可,如以下紅字內容:


var
  LDBXConn: TDBXConnection;
  LCmd: TDBXCommand;
  LReader: TDBXReader;
begin
  LDBXConn := TObject(FDConnection1.CliObj) as TDBXConnection;
  LCmd := LDBXConn.CreateCommand;
  LCmd.Text := 'SELECT * FROM employee';
  LReader := LCmd.ExecuteQuery;
  ...
  LCmd.Close;
  LCmd.Free;
end;


警告:效能控請小心服用!


結語:
DBX framework 打從問市以來一直在傳達「以貼近底層的方式發揮程式最大效能」的概念。

但現實的程式設計市場是以【包裝便利】取勝。


從多數 Delpher 對 BDE、ADO 至死不渝,可以看出 Delphi 市場的真實偏好。
官方 FireDAC 的出現,可以看出 Delphi 對市場的妥協。



好的產品不一定賣,會賣的一定是對消費者有價值的產品。


對我們來說,能夠簡化工作量的才是有價值的工具。
在 DBX framework 是加重工作量,而 FireDAC 能簡化開發工作量,對多數的 Delphier 來說,這才是有價值的。

同樣是開發產品的我們,DBX framework 歷史教訓值得學習 ── 要做有價值的產品。

然而,DBX framework 所帶來架構設計上的轉變是不容忽視的,秘密就在……




文內表格裡的彩蛋,您發現了嗎?




See also:

2017/09/26

DBX framework 初探


DBX 框架在官方手冊裡有句話引起我的注意:
Currently, using a TDBXValue is the fastest way to pass a parameter, because these are the internal objects used to manage parameter lists.

新的 DBX 系列元件,如 TDBXCommand, TDBXReader 等,似乎和以前的 TDataSet 有所區別,和 TDataSet 的耦合性相當低。

架構相當底層,和直接呼叫 Driver API 大概只有一線之隔,這也是效能最好的原因。

但也因為如此,手刻程式碼相對變多,以前 TDataSet 會幫忙做的,像是 Params、FieldDefs 自動產生功能等,現在都要自己做,程式碼巨量增加,這成就感還不錯。

【效能】和【程式碼增加】一舉兩得,若你在視程式數量效能為績效的公司,強烈建議使用。(笑)


2017/09/24

Delphi 自動化 JSON 格式相容性分析


Delphi 自動化產出的 JSON 格式一直被詬病著,因為它的 JSON 格式在起始處一定會強制寫入「Meta Data」,它看起來像是:
"table":[["EmpNo",6,0,0,0,4,0,0,false,false,0,false,false], ["LastName",1,1,0,20,21,0,0,false,false,0,false,false]]
這般的格式,所以導致其它平台要和它相容很困難。


然而,你以為只是單純的「多了一隻怪手」的問題嗎?

2017/09/01

DataSnap REST + JS framework = full stack development (CHT)


ExpressWeb Framework, IntraWeb, UniGUI, Raudus, Elevate Web Builder, Kitto, Delphi MVC Framework...

Delphi 這麼多 Web Solution 中,你用過哪幾種?