[Delphi]ADO 在 XP 的環境上無法使用 CTE 指令 ?
這一陣子臨時受命需要快速的產出四張類似樞紐分析的報表,由於只是要能方便快速使用,因此就直接拿出封藏已久的 Delphi + FastReport 來使用 ( 因為希望只要一支執行檔就可以使用 ),而這樣的程式整個寫起來不用 100 行就可以完全搞定了,其中一大部分我利用 CTE 的語法來做處理 ( CTE 的部分可以參考另外這篇的說明 http://www.dotblogs.com.tw/jamesfu/archive/2012/04/28/sql_cte.aspx )。
然而就在完工之際讓大家正是使用的,忽然有一個 User 表示他完全不能使用 ?! 所以當下認為既然大家都可以,那麼應該會是連線上的問題,於是透過之前所發表的一篇的連線設定檢查方式 ( http://www.dotblogs.com.tw/jamesfu/archive/2013/03/07/sqlconnect.aspx ),看來連線正常,而是部份的指令 ADO 是會有問題的。但雖然知道了問題,要怎麼來解決呢 ?
在 Vista 之前,當時微軟的資料存取技術稱之為 MDAC ( 也就是俗稱的 ADO,最後一版為 2.8 ),但到了之後也就改名成為 WDAC,但在 XP 上面也就沒有辦法更新了。由於我們所要連接的資料庫是 SQL Server,因此這個時候可以利用安裝 Native SQL Client 的 x86 版本 ( XP 應該沒有 x64 的版本吧 ),安裝完之後您就可以看到有個 SQL Server Nivete Client 10.0,由於這個是我安裝 SQL Server 2008 的版本,如果您安裝的是 SQL Server 2012 的版本,則會看到的是 SQL Server Native Client 11.0,基本上不論您安裝哪個版本,在一般使用上都沒有問題,以我的例子來說,雖然指定使用這個 10.0 的版本,但還是可以正常連線到我的 SQL Server 2012 上正常使用。
那既然可以用這樣的連線,那我們程式需要做大幅的修改嗎 ? 答案是不用的,只要更改原本的 ADO Connection 的 Connection 就可以了。以往我們在使用 ADO 連接 SQL Server 的時候,多半會是這樣的設定
Provider=SQLOLEDB;Data Source=SQLServer;User ID=sa;Password=12345678;Initial Catalog=DB1
當你有安裝 SQL Native Client 之後,則將原本的 Provider 設定更改一下
Provider=SQLNCLI10;Data Source=SQLServer;User ID=sa;Password=12345678;Initial Catalog=DB1