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 --

2012/03/31

Use Thread to open ADO


type
  TOpenQuery = Class(TThread)
  Public
     constructor Create(Q: TADOQuery;sSQL: String);
  protected
     tQry: TADOQuery;
     tSQL: String;
     procedure Execute; override;
  end;

{ TOpenQuery }

constructor TOpenQuery.Create(Q: TADOQuery; sSQL: String);
begin
  inherited Create(False);

  FreeOnTerminate:=True;
  tQry:=Q;
  tSQL:=sSQL;
end;

procedure TOpenQuery.Execute;
begin
  inherited;

  Screen.Cursor:=crAppStart;
  with tQry do Begin
     SQL.Text:=tSQL;
     Open;
  End;

  Screen.Cursor:=crDefault;
end; 

2012/03/21

Delphi XE 的 ZIP 實現方法

圖片來源


連結:将Delphi Xe2的Zip单元移植了一份到Delphi Xe上

再利用万一博客的這篇文章,就可以再加上進度條了!

给 System.Zip 增加了个(多文件解压时的)解压进度事件

2015/12/22 補充:
Delphi XE 使用 XE2 移轉過來的 System.Zip,在使用上雖然能壓縮,但卻無法被 Zip 解壓縮程式直接打開 (正確來說是壓縮檔毀損)。

哼哼……原來還有藏一手啊……

在比對 XE2 的原始碼後,經過調整,總算是能夠正確使用,真是謝謝前人的努力!

2012/03/20

使StringGrid中的一列具有Check功能,和CheckBox效果一樣

從CSDN上找到的,感覺還不錯
來源:在StringGrid控件的单元格中动态插入CheckBox?


{//***********************************

  使StringGrid中的一列具有Check功能,和CheckBox效果一樣

//***********************************}

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TForm1 = class(TForm)
    grid: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure gridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure gridClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  fcheck, fnocheck: tbitmap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  bmp: TBitmap;
begin
  FCheck := TBitmap.Create;
  FNoCheck := TBitmap.Create;
  bmp := TBitmap.create;
  try
    bmp.handle := LoadBitmap(0, PChar(OBM_CHECKBOXES));
    with FNoCheck do
    begin
      width := bmp.width div 4;
      height := bmp.height div 3;
      canvas.copyrect(canvas.cliprect, bmp.canvas, canvas.cliprect);
    end;
    with FCheck do
    begin
      width := bmp.width div 4;
      height := bmp.height div 3;
      canvas.copyrect(
        canvas.cliprect,
        bmp.canvas,
        rect(width, 0, 2 * width, height));
    end;
  finally
    bmp.free
  end;

end;

procedure TForm1.gridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if not (gdFixed in State) then
    with TStringGrid(Sender).Canvas do
    begin
      brush.Color := clWindow;
      FillRect(Rect);
      if Grid.Cells[ACol, ARow] = 'yes ' then
        Draw((rect.right + rect.left - FCheck.width) div 2,
          (rect.bottom + rect.top - FCheck.height) div 2,
          FCheck)
      else
        Draw((rect.right + rect.left - FCheck.width) div 2,
          (rect.bottom + rect.top - FCheck.height) div 2,
          FNoCheck);
    end;

end;

procedure TForm1.gridClick(Sender: TObject);
begin
  if grid.Cells[grid.col, grid.row] = 'yes ' then
    grid.Cells[grid.col, grid.row] := 'no '
  else
    grid.Cells[grid.col, grid.row] := 'yes ';
end;

end.

2012/03/15

[轉]datasnap中如何修改ADOconnection的连接字串

[求助]datasnap中如何修改ADOconnection的连接字串。。
DELPHI DATASNAP 2010 入门操作(2)不写一行代码,绿色三层我也行

摘錄
Q. 因为作业原因,看了这篇文章,实现了最简单的三层。(局域网的datasnap sever:服务器是unit1+ServerMethodsUnit1+ServerContainerUnit1)
http://www.cnblogs.com/zhqian/archive/2010/07/06/1771798.html

后来把里面的ADOTable改成ADOquery,ADOconnection的相关设置修改了,做了个可执行条件查询的服务端,简单的三层就做好了。考虑到程序的灵活性,又设置了客户端的连接IP配置在ini文件中,客户端配置好,就剩下服务器的灵活性了,可是发现了个问题,不知道怎么才能修改ServerMethodsUnit1中的ADOconnection1的连接字串,在unit1中uses了ServerMethodsUnit1也不能引用到ADOconnection1。。。

A. 把adoconnection放在另一个单元,比如form,然后在ServerMethodsUnit中uses form的单元,就行
现在在form下的adoconn随你怎么弄了

=========================================
討論區的結局是成功的,但我還沒試過,有時間再來玩玩