2016-03-24 2 views
1

Использование Delphi 7 с объектами ADO, возможно ли определить драйвер базы данных ODBC из объекта TADOConnection? Таким образом, определяет, является ли MS-Access или SQL Server или Oracle и т.д.Определить драйвер базы данных ODBC из объекта TADOConnection?

enter image description here

Программа подключается к базе данных, используя только имя источника данных ODBC, и я хочу, чтобы определить, является ли эта база данных базу данных MS-Access или SQL Server. Я хочу сделать это, потому что MS-Access и SQL Server используют разные имена функций SQL для приведения целого числа в строку.

Приложение создает строку SQL, которая извлекает VERSION некоторых объектов конфигурации. Она работает на сервере SQL с помощью cast(), но я также хочу, чтобы поддерживать MS-Access, которая использует 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, но я начинаю подозревать, что это невозможно. Есть идеи, как это решить?

ответ

2

ODBC предназначен для абстрагирования деталей реализации сервера. Вы можете указать use ODBC specific syntax, который будет переведен в инструкцию соответствующего SQL-вкуса для сервера. Здесь вы можете заменить:

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

Этих замены известны как ODBC Escape Sequences и могут быть заменены в запросах, где есть конкретный производитель различие синтаксиса.