2016-03-24 1 views
1

En utilisant Delphi 7 avec des objets ADO, est-il possible de déterminer le pilote de base de données ODBC à partir de l'objet TADOConnection? Donc détecter s'il est MS-Access ou SQL Server ou Oracle, etc.Déterminer le pilote de base de données ODBC à partir de l'objet TADOConnection?

enter image description here

Le programme se connecte à une base de données en utilisant simplement le nom d'une source de données ODBC, et je veux savoir si cette base de données est une base de données MS-Access ou SQL Server. Je veux faire cela parce que MS-Access et SQL Server utilisent différents noms de fonctions SQL pour convertir un entier en une chaîne.

L'application génère une chaîne SQL qui récupère la VERSION de certains objets de configuration. Il fonctionne pour le serveur SQL en utilisant cast(), mais je veux aussi soutenir MS-Access qui utilise 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 

J'ai essayé de regarder le TADOConnection.Provider mais qui est MSDASQL.1 dans les deux cas. J'ai regardé toutes les propriétés de TADOConnection, mais je commence à suspecter que ce n'est pas possible. Des idées pour résoudre ceci?

Répondre

2

ODBC est conçu pour extraire les détails d'implémentation du serveur. Vous pouvez use ODBC specific syntax qui sera traduit en une déclaration de la saveur SQL appropriée pour le serveur. Ici, vous pouvez remplacer:

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

Ces substitutions sont connues sous le nom ODBC Escape Sequences et peuvent être substitués dans les requêtes où il y a des différences de syntaxe spécifiques au fournisseur.