将Delphi 7与ADO对象一起使用,是否可以从TADOConnection对象中确定ODBC数据库驱动程序?因此检测它是MS-Access还是SQL Server或Oracle等 .
程序只使用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 回答
ODBC旨在抽象出服务器的实现细节 . 您可以将use ODBC specific syntax转换为服务器的相应SQL风格的声明 . 在这里你可以替代:
这些替换称为ODBC Escape Sequences,可以在存在特定于供应商的语法差异的查询中替换 .