2016-03-24 6 views
1

ADOオブジェクトでDelphi 7を使用すると、TADOConnectionオブジェクトからODBCデータベースドライバを特定できますか?だから、MS-AccessまたはSQL ServerやOracleなどTADOConnectionオブジェクトからODBCデータベースドライバを決定しますか?

enter image description here

プログラムはちょうどODBCデータ・ソースの名前を使用してデータベースに接続し、私はそのデータベースがあるかどうかを判断したいかどうかを検出MS-AccessデータベースまたはSQL Server。 MS-AccessとSQL Serverは異なるSQL関数名を使用して整数を文字列にキャストするため、これを実行したいと思います。

アプリケーションは、いくつかの構成オブジェクトのVERSIONを取得するSQL文字列を作成します。それはcast()を使用してSQLサーバーのために動作しますが、私はまた、CStr()を使用してMS-アクセスをサポートしたい:

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として知られており、ベンダー固有の構文の違いがあるクエリで置換することができます。

関連する問題