从 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,可以在存在供应商特定语法差异的查询中替换。
使用Delphi7 与ADO 对象,是否可以从TADOConnection 对象确定ODBC 数据库驱动程序?所以检测是MS-Access还是SQLServer或者Oracle等
该程序仅通过使用 ODBC 数据源的名称连接到数据库,我想确定该数据库是 MS-Access 数据库还是 SQL 服务器。我想这样做是因为 MS-Access 和 SQL 服务器使用不同的 SQL 函数名称将整数转换为字符串。
应用程序构建了一个 SQL 字符串,用于检索某些配置对象的版本。它适用于使用 cast()
的 SQL 服务器,但我也想支持使用 CStr()
:
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,可以在存在供应商特定语法差异的查询中替换。