从 TADOConnection 对象确定 ODBC 数据库驱动程序?

Determine ODBC database driver from TADOConnection object?

使用Delphi7 与ADO 对象,是否可以从TADOConnection 对象确定ODBC 数据库驱动程序?所以检测是MS-Access还是SQLServer或者Oracle等

该程序仅通过使用 ODBC 数据源的名称连接到数据库,我想确定该数据库是 MS-Access 数据库还是 SQL 服务器。我想这样做是因为 MS-Access 和 SQL 服务器使用不同的 SQL 函数名称将整数转换为字符串。

应用程序构建了一个 SQL 字符串,用于检索某些配置对象的版本。它适用于使用 cast() 的 SQL 服务器,但我也想支持使用 CStr():

的 MS-Access
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 属性,但我开始怀疑这是不可能的。有什么解决办法吗?

ODBC 旨在抽象出服务器的实现细节。您可以 use ODBC specific syntax 将其转换为适合服务器的 SQL 风格的语句。在这里你可以替换:

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

这些替换称为 ODBC Escape Sequences,可以在存在供应商特定语法差异的查询中替换。