2011/09/28

Indy -- 專業的Blocking

Indy (Internet Direct)與Dbexpress在Delphi中是我最喜歡的技術類型。
今天來說說它的特色之一 -- Blocking

很多人都會很好奇,SocketServer和idTCPServer主要的差異在於一個預設為non-Blocking,另一個則是恆為Blocking,但這兩者之間有什麼樣的不同呢?

我不知道!(被毆)

2011/09/15

DBX4MySQL - 極緻效能的 Dbexpress Driver

鮮少使用MySQL,直到有人問我Dbexpress如何連接MySQL時,發現這比想像中要來得困難。

在尋找解決方案時,突然發現這個好物:DBX4MySQL (DBX for MySQL)

它的概念和Devart的MyDAC很像
MyDAC Connection Flow [Direct Mode] (節錄自Devart官網)
MicroOLAP官方是這樣寫的:
Any MySQL libraries are not requred on a client workstation, even libmysql.dll

2011/09/14

特殊符號的英文單字

資料來源:身為一個專業的程式設計師需具備的基本知識(一)

/ Slash (斜線)
\ Backslash (反斜線)
~Tilde (取代符號)
@ At sign, at (At 符號,At)

# Poundsign (井字號)

$ Dollarsign (錢符號)

^ Caret (插入號)

& Ampersand (And 符號)

* Asterisk (星號)

[ Open bracket (左開式方括弧)

] Close bracket (右關式方括弧)

( Open parenthesis (左開式圓括號)

) Close parenthesis (右關式圓括號)

: Colon (冒號)

, Comma (逗號)

-- Double dash (雙破折號)

... Ellipsis (省略符號)

' Single quote (單引號)

" Quote (引號)

= Equals (等號)

+ Plus,plus sign (加,加號)

! Exclamation point (驚歎號)

> Greater than (大於)

< Less than (小於)

? Question mark (問號)

. Period,dot (句號,點)

; Semicolon (分號)

- Hyphen (連字號)

— Dash (破折號)

_ Underscore (底線)

| Vertical bar (垂直線)

{ Open brace (左開式大括號)

} Close brace (右關式大括號)

% Percent,percent sign (百分比,百分比符號)

// Double slash (雙斜線)

2011/09/13

[轉]FLEX AIR 儲存路徑的三種選擇


資料來源:AIR 文件存储路径三种选择

1.File.desktopDirectory
路径参数:C:\Documents and Settings\当前用户名\桌面
file = File.desktopDirectory.resolvePath("HelloWorld.txt");
var stream:FileStream = new FileStream()
stream.open(file, FileMode.WRITE);
var str:String = "Congratulations on AIR Save Path ";
stream.writeUTFBytes(str);
stream.close();
2.File.applicationStorageDirectory
路径参数:C:\Documents and Settings\当前用户名\Application Data\应用程序项目名\Local Store
var file:File = File.applicationStorageDirectory.resolvePath("HelloWorld.txt");
var stream:FileStream = new FileStream()
stream.open(file, FileMode.WRITE);
var str:String = "Congratulations on AIR Save Path";
stream.writeUTFBytes(str);
stream.close();

3.File.applicationStorageDirectory
路径参数:C:\Documents and Settings\当前用户名\My Documents
var file:File = File.documentsDirectory.resolvePath("HelloWorld.txt");
var stream:FileStream = new FileStream()
stream.open(file, FileMode.WRITE);
var str:String = "Congratulations on AIR Save Path";
stream.writeUTFBytes(str);
stream.close();

2011/09/01

SQL Pretty Printer:好用的 SQL Formatter 工具

目前使用 SSMS,不論是2005還是2008,都沒有SQL Formatter功能,往往看到長得天荒地老的一行SQL,總是要費盡心力地來無盡的ENTER ENTER ENTER ENTER......

在網路上找了找,有個方便的工具:Instant SQL Formatter
線上格式化SQL工具,還蠻方便的,但並不支援UNICODE,所以出現非英文語時就會出現「???」,還真的是麻煩...
中文亂碼的畫面
後來才發現,它有單機版本,名稱叫:SQL Pretty Printer
有提供 Desktop version, Add-In for SSMS, Add-In for VS or API
API就是利用網路連結到Instant SQL Formatter來處理。所以重點還是在前三項

因為我不只是用MS SQL,所以下載了Desktop Version來測試,以下就是展示畫面:
未格式化時的SQL
格式化後的SQL

更棒的是,這個版本就支援UNICODE了!

工作上經常會先將 T-SQL 測到沒有問題後,再謄到 Delphi 中,此時會進行字串相加的串連工作,然而這工作如果文字少還算簡單,如果量大時,難免會出現漏打的情形,這時 SQL Pretty Printer 也支援 SQL 指令碼轉成其它如 C#、Pascal 相容的字串相加程式碼:

SQL Pretty Printer 有將 SQL 組成其它語言字串相加的功能

價格

SQL Pretty Printer 是付費軟體,一個LICENSE $50,但為你省下的時間絕對超過 $50 的價值!

向你推薦!


General SQL Parser for VCL 簡介

最近這一陣子大量在Delphi存取MS SQL,對於SQL指令的解析及輸入的繁瑣實在是頭痛。

比方說:
SELECT a.name,
       b.id,
       c.class
FROM   a
       JOIN b
         ON a.name = b.name
            AND a.money > 100
       JOIN c
         ON c.x > a.y
WHERE  a.address NOT IN (SELECT *
                         FROM   xtable
                                JOIN ytable
                                  ON xtable.id <> ytable.id



這樣的語法,如果要輸入到Delphi裡,對coding人員來說,一定是場惡夢,更不要說那些複雜到見鬼的SQL指令了,所以我們常會這樣打:

str := 'SELECT A.NAME, B.ID, C.CLASS FROM A JOIN B ON A.NAME = B.NAME AND A.MONEY > 100 JOIN C ON C.X > A.Y WHERE A.ADDRESS NOT IN (SELECT * FROM XTABLE JOIN YTABLE ON XTABLE.ID <> YTABLE.ID'

中間完全不間斷………

要不就是認命地自己斷行,結果中間多打或少打一個字,也得等到執行時期才抓得到錯誤…

這時候就會覺得JQuery或LINQ真是好物啊!

在這邊介紹一個好物:General SQL Parser VCL Version

它算是一個外掛的CLASS,利用USES的方式引入到專案中即可使用
目前還在深入摸索中,所以我們先借用它內附的DEMO吧!
咦!出錯了!
上面的畫面可以看到我們KEY入的SQL有錯誤,也很明白的指出是缺少了「)」

這時我們再補上後執行,就會出現正確的結果了
正解!
當然,不會只是滿足於現有的Check syntax,所以我們還可以使用pretty print!
不只是單純的Memo,還可以搭配Rich Text
另外,還可以編成各語言的傳入字串:
剛剛的一行SQL轉成Delphi String型態,超方便!

但是這套工具價值不斐