2012/04/24

Create DBDEMOS from BDE into PostgreSQL

BDE have a demo database: DBDEMOS.

But, dbExpress is not easy a demo database, so I just to create a sample program.

I used:
1. Devart dbExpress for PostgreSQL
2. Delphi XE
3. BDE + Paradox database

Below my example picture:
First, I select our db data (C:\Program Files (x86)\Common Files\CodeGear Shared\Data; C:\Program Files (x86)\Common Files\Borland Shared\Data), when we get all xml's db file(same Paradox format) on the folder.

Then we can to click "Create SQL". Create SQL Statement when after copy to pgAdmin run it.
Or to use "Create Table" direct to create table.

Setting PostgreSQL's login param.

Final, click "Import Postgres", The data pump will all data append from xml into PostgreSQL.

Now, we can try dbexpress framework for PostgreSQL!

2012/04/13

[轉]Fixing TCriticalSection


TCriticalSection (along with TMonitor*) suffers from a severe design flaw in which entering/leaving different TCriticalSection instances can end up serializing your threads, and the whole can even end up performing worse than if your threads had been serialized.
This is because it’s a small, dynamically allocated object, so several TCriticalSection instances can end up in the same CPU cache line, and when that happens, you’ll have cache conflicts aplenty between the cores running the threads.
How severe can that be? Well, it depends on how many cores you have, but the more cores you have, the more severe it can get. On a quad core, a bad case of contention can easily result in a 200% slowdown on top of the serialization. And it won’t always be reproducible, since it’s related to dynamic memory allocation.
There is thankfully a simple fix for that, use TFixedCriticalSection:
type
   TFixedCriticalSection = class(TCriticalSection)
      private
         FDummy : array [0..95] of Byte;
   end;
That’s it folks. This makes sure the instance size larger than 96 bytes, which means that it’ll be larger than the cache line in all current CPUs, so no serialization anymore across distinct critical section instances.
As a bonus, it also ends up using one of the larger, more aligned, FastMM bucket, which seems to improve critical section code performance by about 7%. The downside is you use more RAM… but how many critical sections do you really have?
* (11-12-01): as noted by Allen Bauer in the comments, the issue is fixed for TMonitor in XE2.

2012/04/10

High Five - SQL Complete 介紹

還記得之前介紹過的「SQL Pretty Printer:好用的 SQL Formatter 工具」嗎?

這次來介紹 DBA 的好朋友 - Devart 公司所出品的「SQL Complete」

What is SQL Comlete?
Devart的Demo圖片已經完整呈現這款工具的概念了!
圖片擷自 Devart 官方網站
簡單的說,就是自動完成的工具

當然還有更多額外的工具

我們先來看與SQL Pretty Printer比較吧:
參賽者
SQL Complete
(Express Version)
SQL Pretty Printer
智慧感知功能
Smart Intellisense
V
X
提供表格物件名稱
Name suggestions for major objects
V
X
提供函式名稱
Name suggestions for advanced objects
部份提供
Partial Support
X
智慧篩選清單
Smart filtering in the suggestion list
V
X
輸入關鍵字後的內容建議
Context-sensitive suggestion of keywords
部份提供
Partial Support
X
資料庫名稱建議功能
Database context detection
V
X
依照SELECT, DML, DROP, EXEC, SET USE 語法的上下文提供建議清單
Context-sensitive object suggestions for SELECT, DML, DROP, EXEC, SET, and USE statements
V
X
提供函式所需參數種類及數量
Parameter information for functions
V
X
快捷物件資訊(如表格所含的欄位及格式內容)
Quick object information
部份提供
Partial Support
X
SQL 格式化處理
SQL formatting
部份提供
Partial Support
V
執行當前語法
Execute current statement
V
依賴SSMS
內建功能
Dependent SSMS
Built-in features
半透明的訊息箱
Semi-transparent view of the suggestion box
V
X
提供的SQL文字組譯成各種語法
(SQL to c#, Dephi, C++ string etc)
X
V
提供各語法轉成標準SQL語言
(Any language to SQL)
X
V
Single License Price ($$$)
Free
$50

與 SQL Complete Express 版本比較時,雖然 SQL Pretty Printer 有提供較為完整的 SQL Formatter (SQL 格式化處理) ,但 SQL Complete 提供了更多有利於DBA工作的工具,整體來說:

SQL Pretty Printer 適合給 Programmer 使用

SQL Complete 適合給專業 DBA 來使用。

注意!我只是拿 Express 版本來作比較,Standard版當然是更加強大的!(詳情請參閱:Editions of dbForge SQL Complete)

你對SSMS內建的半吊子功能感到綁手綁腳的嗎?
那 SQL Complete 一定能讓你的工作更加得心應手!

2012/4/16 補充:
很高興 Devart 公司能看到這篇文章,他們也提供了很多訊息給我,關於 SQL Complete 的核心價值是在於它的

「智慧感知」(Smart Intellisense) 功能

所謂的智慧感知(Smart Intellisense),就是使用者在輸入SQL語法時,SQL Complete會自動判斷上下文、分析使用者輸入的指令, 然後智慧地填入下一個指令, 讓使用者不用熟背 SQL 指令 也能如同使用新注音一樣的熟練、方便。

SSMS 雖然有內建 Microsoft IntelliSense (Stupid IntelliSense),但是它的功能遠比不上 SQL Complete (Best Smart)

SQL Complete 先進的智慧感知功能對於初學入門的使用者來說,這套工具仍然能保證讓你的功力在短時間內獲得提升,而對於已有基礎的進階使用者,SQL Complete更可以縮短你的工作時間

SQL Complete 絕對是一個值得入手的產品!

很高興你可以看到這一行,還等什麼?趕快去嚐試一下吧!

2012/04/17 再補充:
剛剛看到 Devart 關於 SQL Complete 的教學影片,來分享一下!

2012/04/05

Delphi裡的夢幻逸品 - dbExpress driver for PostgreSQL

其實從 C++ Builder 6 開始,就很喜歡 dbExpress 的設計方式,雖然必需搭配 DataSnap (Midas) 才能完全發揮它的作用,但是看中它仍持續成長的潛能以及多樣化的驅動連結,至今讓我只要有機會一定會把它納到我的專案中

在 C++ Builder 6 時期,免費的 dbExpress for MySQL 5 讓我吃了不少苦頭,後來才發現 Devart 公司有出相關的 Driver,在當時就非常想要購買這項產品。

在 MySQL 被 Oracle 強暴 購買後,我也斷了使用MySQL的想法,取而代之的就是與 Oracle 近乎同等級的資料庫 -- PostgreSQL

好陌生的資料庫,dbExpress有可以使用的Driver嗎?

有,Kylix有!但也只限在Linux下使用 (2002年的骨灰級產物了...)

咦!C++ Builder XE2 沒有,Delphi XE2 也沒有 (廢話,這兩個是相同的產品),那怎麼辦?

於是在 Devart 網站中找到了 dbExpress for PostgreSQL,看完它的介紹後,真覺得是個夢幻的逸品

要OleDB嗎?不用!
要ODBC嗎?不用!
要Native Client嗎?不用!

它只要靠自己就吃天下了!讚吧!

不囉嗦,先來看看安裝:
就是這頭大象!會飛的哦!(笑)
「Next」按沒機次就安裝好了,安裝速度飛快!

安裝後即會在Data Explorer增加Devart PostgreSQL群組
Data Explorer裡的Devart PostgreSQL群組
因為Devart的dbExpress Driver並不是使用.NET寫的,所以沒辦法在Data Explorer列出資料庫的細節內容,但也換得更佳的速度

還是想看 Tables 和 Views?用 pgAdmin III 還比較實用些。

怎麼連接到資料庫呢?三個步驟,如下圖:
前兩個步驟大約需要6000毫秒(ms)的時間,最後一步大約是10毫秒(ms)吧

連結技巧就這樣,沒了!會不會太簡單?

除了配服Devart的技術外,更讓人覺得高興的是這項工具到現在還有在持續維護,真不愧是Delphi的資料庫專家!

而且還能搭配Devart自家的dbMonitor,營造出SQL Server平台外的Profiler介面,對於資料庫連結能有更進一步的訊息可供調整,這玩樣兒真是太棒了啦!


與其花大錢買昂貴的資料庫,還不如花少少的錢買個好用的驅動,再搭配上可商用的免費資料庫,這樣不僅專案建置的成本降低,更可以縮短開發的工時,何樂而不為呢!

有機會一定要來試試 Devart 的產品,真的是超級好用的啦!

最後還有一句話要說:dbExpress for PostgreSQL,我愛死你了!

2012/04/09補充:

令人振奮的消息,給想在FireMonkey實現MacOS 2-Tier 應用程式的伙伴們

因為PostgreSQL到目前為止沒有正式給MacOS的ODBC Driver,所以想靠dbExpress for ODBC的想法是不可行的

然而,Devart 公司已經先設想到這點了

詳請可參閱:Delphi XE2 FireMonkey Applications Deployment on Mac OS X

在專案中使用 Direct Mode 再加上 Midas 及 dbExpress for PostgreSQL Driver (libmidas.dylib, libdbexpmda40.dylib)
就可以順利在 MacOS上順利連結 PostgreSQL (32 / 64bit) 囉!

--等我入手 MacOS 後再來補發 dbExpress for PostgreSQL + FireMonkey 的試用心得! :D --