2016-03-24 42 views
1

使用Delphi 7與ADO對象,是否可以從TADOConnection對象中確定ODBC數據庫驅動程序?因此,檢測是否是MS-Access或SQL Server或Oracle等確定TADOConnection對象的ODBC數據庫驅動程序?

enter image description here

該方案通過只是使用ODBC數據源名稱連接到一個數據庫,我想,以確定數據庫是否MS-Access數據庫或SQL Server。我想這樣做是因爲MS-Access和SQL Server使用不同的SQL函數名將整數轉換爲字符串。

該應用程序構建一個SQL字符串,用於檢索某些配置對象的VERSION。它適用於使用cast() SQL服務器,但我也想支持MS-訪問它使用CStr()

SELECT NAME + '_' + CAST(VERSION as varchar) as OBJECT_NAME FROM ANALYSIS // SQL Server 
SELECT NAME + '_' + CStr(VERSION) as OBJECT_NAME FROM ANALYSIS // MS-Access 

我試着看TADOConnection.Provider但就是在這兩種情況下MSDASQL.1

if (myqry.Connection.Provider = 'MSDASQL.1') then 
    strSQL := strSQL + 'cast(' + myfieldname + ' as varchar)' // always goes here.. 
else 
    strSQL := strSQL + 'CStr(' + myfieldname + ')'; // ..never to here 

我看過所有的TADOConnection屬性,但我開始懷疑這是不可能的。任何想法如何解決這個問題?

回答

2

ODBC旨在抽象出服務器的實現細節。您可以將use ODBC specific syntax轉換爲適合服務器的SQL風格的聲明。這裏可以替代:

... { fn CONVERT(VERSION, SQL_VARCHAR) } AS OBJECT_NAME FROM ANALYSIS 

這些取代被稱爲ODBC Escape Sequences,並且可以在其中存在供應商特定的語法差異查詢被取代。