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

sql-server - 从TADOConnection对象确定ODBC数据库驱动程序?-LMLPHP

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

该应用程序构建一个SQL字符串,该字符串检索某些配置对象的VERSION。它适用于使用cast()的SQL Server,但我也想支持使用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,并且可以在存在特定于供应商的语法差异的查询中替换。

09-10 03:34
查看更多