首页 文章

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

提问于
浏览
1

将Delphi 7与ADO对象一起使用,是否可以从TADOConnection对象中确定ODBC数据库驱动程序?因此检测它是MS-Access还是SQL Server或Oracle等 .

enter image description here

程序只使用ODBC数据源的名称连接到数据库,我想确定该数据库是MS-Access数据库还是SQL Server . 我想这样做是因为MS-Access和SQL Server使用不同的SQL函数名来将整数转换为字符串 .

该应用程序构建一个SQL字符串,用于检索某些配置对象的VERSION . 它适用于使用 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属性,但我开始怀疑它是不可能的 . 任何想法如何解决这个问题?

1 回答

  • 2

    ODBC旨在抽象出服务器的实现细节 . 您可以将use ODBC specific syntax转换为服务器的相应SQL风格的声明 . 在这里你可以替代:

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

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

相关问题