Difference between revisions of "ODBCConn/fr"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
(24 intermediate revisions by one other user not shown)
Line 46: Line 46:
  
 
== Installation d'ODBC des des pilotes ODBC ==
 
== Installation d'ODBC des des pilotes ODBC ==
 +
Avant de pouvoir vous connecter à votre base de données en utilisant ODBC, vous avez besoin d'installer :
 +
* un gestionnaire de pilotes ODBC
 +
* un ilote spécifique au SGBD auquel vous voulez vous connecter.
  
Before you can connect to your database using ODBC, you need to install
+
Cette section bous donnera une brève vue d'ensemble des étapes impliquées. Toutefois, veuillez consulter la documentation pertinente pour une référence définitive.
* an ODBC Driver Manager
 
* an ODBC driver specific to the DBMS you want to connect to
 
 
 
This section will give a brief overview of the steps involved. However, please consult the relevant documentation for a definitive reference.
 
  
 
=== Le gestionnaire de pilotes ODBC ===
 
=== Le gestionnaire de pilotes ODBC ===
  
 
==== Windows ====
 
==== Windows ====
Windows has an ODBC Driver Manager built in, which allows DSNs to be set up, and other configuration. It is found in the ''Control Panel'', in later Windows versions with categorised sections it was moved into the ''Administrative Tools'' area. Or you may simply click the Start button and enter ''ODBC'' into the Run box (in Windows 7 this appears as "''Search programs and files''").
+
windows a un gestionnaire de pilotes ODBC intégré, qui permet le réglages des DSNs et d'autres configurations. Il est accessible depuis le ''Panneau de contrôle'', dans les versions récentes avec des sections catégorisées, il a été déplacé dans l'aire ''Outils d'administration''. Vous pouvez aussi cliquer sur le bouton Démarrer et entrer ''ODBC'' dans la boîte d'exécution (dans Windows 7, ceci apparaît comme "''Rechercher des programmes et des fichiers''").
  
You can, of course, create a desktop shortcut to the ODBC dialog if you find yourself using it frequently.
+
Vous pouvez, bien sûr, créer un raccourci de bureau vers la boîte de dialogue si vous pensez l'utiliser régulièrement.
  
 
[[Image:WinXPODBCDataSourceAdministratorDrivers.png]]
 
[[Image:WinXPODBCDataSourceAdministratorDrivers.png]]
  
 
==== Unix-s ====
 
==== Unix-s ====
 
+
Deux gestionnaires de pilotes ODBC populaires dans les paltes-formes sont [http://www.unixodbc.org unixODBC] et [http://www.iodbc.org iODBC].
Two popular ODBC Driver Managers for Unix-based platforms are [http://www.unixodbc.org unixODBC] and [http://www.iodbc.org iODBC].
+
<code>ODBCConn</code> est connu pour fonctionner avec unixODBC ; La compatibilité iODBC doit encore être testée.
<code>ODBCConn</code> is known to work with unixODBC; iODBC compatibility still has to be tested.
 
  
 
===== Debian =====
 
===== Debian =====
  
For Debian, you can install the ''unixodbc'' package:
+
Pour Debian, vous pouvez installer le paquet ''unixodbc'' :1
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 76: Line 74:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The <code>odbcsqldyn</code> unit, and hence <code>odbcconn</code>, will search for a file called <code>libodbc.so</code>.
+
L'unité <code>odbcsqldyn</code> et par conséquent <code>odbcconn</code>, vont chercher un fichier appelé <code>libodbc.so</code>.
It will ''not'' accept a file named like <code>libodbc.so.1</code> or <code>libodbc.so.1.0.0</code>.
+
 
Debian's ''unixodbc'' package does not create a symlink with the name <code>/usr/lib/libodbc.so</code>; you must either
+
Elle n'acceptera ''pas'' un fichier nommé <code>libodbc.so.1</code> ou <code>libodbc.so.1.0.0</code>.
* create the link yourself: <code>ln -s libodbc.so.1 /usr/lib/libodbc.so</code>, or
+
Le paquet ''unixodbc'' de Debian ne crée pas de lien symbolique (''symlink'') avec le nom <code>/usr/lib/libodbc.so</code> ; donc vous devez soit :
* install the ''unixodbc-dev'' package, which does create the symlink.
+
* créer le lien vous-même : <code>ln -s libodbc.so.1 /usr/lib/libodbc.so</code>, ou
 +
* installer le paquet ''unixodbc-dev'', qui crée le lien symbolique.
  
If you installed the ''unixodbc-bin'' package, you can run the <code>ODBCConfig</code> program to configure ODBC drivers and DSNs.
+
Si vous avez installé le paquet ''unixodbc-bin'', vous pouvez exécuter le programme <code>ODBCConfig</code> pour configurer les pilotes ODBC et les DSNs.
  
 
[[Image:ODBCDataSourceAdministratorAbout.PNG]]
 
[[Image:ODBCDataSourceAdministratorAbout.PNG]]
Line 88: Line 87:
 
===== Ubuntu =====
 
===== Ubuntu =====
  
For Ubuntu, follow the instruction for [[#Debian|Debian]].
+
Pour Ubuntu, suivez l'instruction pour [[#Debian|Debian]].
Note: the ''unixodbc-bin'' package might not be available from the default package repository.
+
Note : Le paquet ''unixodbc-bin'' pourrait ne pas être disponible depuis le référentiel de paquet par défaut.
  
 
=== Pilotes ODBC ===
 
=== Pilotes ODBC ===
  
You can download latest ODBC drivers using the following links:
+
Vous pouvez télécharger les derniers pilotes ODBC avec les liens suivants :
  
[https://www.devart.com/odbc/sqlserver/download.html Download SQL Server 32/64 bit ODBC driver] - latest version of SQL Server ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with SQL Server 2014\2012\2008 R2\ 2008\2005 (including Express edition), SQL Server 2000 (including MSDE), SQL Server 7, SQL Server Compact 4.0\3.5\3.1. Works on all Lazarus versions.  
+
[https://www.devart.com/odbc/sqlserver/download.html Télécharger le pilote ODBC 32/64-bit pour SQL Server] - la dernière version du pilote SQL Server ODBC qui prend en charge Windows, Mac OS X, Linux à la fois les versions 32 et 64-bit. Compatible avec SQL Server 2014\2012\2008 R2\ 2008\2005 (y compris la version Express), SQL Server 2000 (y compris MSDE), SQL Server 7, SQL Server Compact 4.0\3.5\3.1. Fonctionne sur toutes les version de Lazarus.
  
[https://www.devart.com/odbc/oracle/download.html Download Oracle 32/64 bit ODBC driver] - latest version of Oracle ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with Oracle servers: 12c, 11g, 10g, 9i, 8i, 8.0, including Oracle Express Edition 11g and 10g.  
+
[https://www.devart.com/odbc/oracle/download.html Télécharger le pilote ODBC 32/64-bit pour Oracle] - Dernière version du pilote ODBC Oracle qui prend en charge Windows, Mac OS X, Linux à la fois les versions 32 et 64-bit. Compatible avec les serveurs Oracle : 12c, 11g, 10g, 9i, 8i, 8.0, y compris Oracle Express Edition 11g et 10g.  
Oracle Clients: 12c, 11g, 10g, 9i, 8i, 8.0.  
+
Clients Oracle : 12c, 11g, 10g, 9i, 8i, 8.0. Fonctionne sur toutes les versions de Lazarus.
Works on all Lazarus versions.
 
  
[https://www.devart.com/odbc/mysql/download.html Download MySQL 32/64 bit ODBC driver] - latest version of MySQL ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with MySQL servers: 6.0, 5.6, 5.5, 5.1, 5.0, 4.1, 4.0, and 3.23. MariaDB 5.x  
+
[https://www.devart.com/odbc/mysql/download.html Télécharger le pilote ODBC 32/64 bit pour MySQL] - Dernière version du pilote MySQL qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec le serveurs MySQL : 6.0, 5.6, 5.5, 5.1, 5.0, 4.1, 4.0, et 3.23. MariaDB 5.x. Fonctionne sur toutes les versions de Lazarus.  
Works on all Lazarus versions.  
 
  
[https://www.devart.com/odbc/postgresql/download.html Download PostgreSQL 32/64 bit ODBC driver] - latest version of PostgreSQL ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with PostgreSQL server versions since 7.1 up to 9.4. Works on all Lazarus versions.
+
[https://www.devart.com/odbc/postgresql/download.html Télécharger le pilote ODBC 32/64 bit pour PostgreSQL] - Dernière version du pilote ODBC pour PostgreSQL qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec les versions de serveur PostgreSQL depuis 7.1 jusqu'à 9.4. Fonctionne sur toutes les versions de Lazarus.
  
[https://www.devart.com/odbc/postgresql/download.html Download SQLite 32/64 bit ODBC driver] - latest version of SQLite ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with SQLite versions since 3.0 and higher. Works on all Lazarus versions.
+
[https://www.devart.com/odbc/postgresql/download.html Télécharger le pilote ODBC 32/64-bit pour SQLite] - Dernière version du pilote ODBC pour SQLite ODBC qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec les versions de SQLite depuis 3.0 et supérieur. Fonctionne sur toutes les versions de Lazarus.
  
[https://www.devart.com/odbc/firebird/download.html Download Firebird 32/64 bit ODBC driver] - latest version of Firebird ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with Firebird versions 3, 2.x, 1.x. Works on all Lazarus versions.
+
[https://www.devart.com/odbc/firebird/download.html Télécharger le pilote ODBC 32/64-bit pour Firebird] - Dernière version du pilote ODBC pour Firebird qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec les versions 3, 2.x, 1.x de Firebird. Fonctionne sur toutes les versions de Lazarus.
  
[https://www.devart.com/odbc/interbase/download.html Download Interbase 32/64 bit ODBC driver] - latest version of Interbase ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with all Interbase versions. Works on all Lazarus versions.
+
[https://www.devart.com/odbc/interbase/download.html Télécharger le pilote ODBC 32/64-bit pour Interbase] - Dernière version du pilote ODBC pour Interbase qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec toutes les versions d'Interbase. Fonctionne sur toutes les versions de Lazarus.
  
[https://www.devart.com/odbc/sqlazure/download.html Download SQL Azure 32/64 bit ODBC driver] - latest version of SQL Azure ODBC driver which supports Windows, Mac OS X, Linux both on 32 and 64 versions. Compatible with all SQL Azure versions. Works on all Lazarus versions.
+
[https://www.devart.com/odbc/sqlazure/download.html Télécharger le pilote ODBC 32/64-bit pour SQL Azure] - Dernière version du pilote ODBC pour SQL Azure qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec toutes les versions de SQL Azure. Fonctionne sur toutes les versions de Lazarus.
  
 
== Connexion à une source de données ODBC ==
 
== Connexion à une source de données ODBC ==
  
The parameters for connecting to an ODBC data source are described in a ''connection string''.
+
Les paramètres de connexion à une source de données ODBC sont décrits à l'aide d'une ''chaîne de connexion''.
This is a string of the form <code>NAME=VALUE;NAME=VALUE</code>.
+
C'est une chaîne de la forme <code>NAME=VALUE;NAME=VALUE</code>.
 
+
<code>TODBCConnection</code> fournit une enveloppe (''wrapper'') autour de cette chaîne de connexion. Certaines de ses propriétés correspondent à des paires nom-valeur dans la chaîne de connexion et des paramètres personnalisés peuvent être spécifiés dans la propriété <code>Params</code> (qui est une <code>TStrings</code>).
<code>TODBCConnection</code> provides a wrapper around this connection string.
 
Some of its properties are mapped to name-value pairs in the connection string, and custom parameters can be specified in the <code>Params</code> property (which is a <code>TStrings</code>).
 
  
Before going to the details of this wrapper, you must first have a basic understanding of how an ODBC data source is identified.
+
Avant d'aller plus en détail sur cette enveloppe, vous devez d'abord avoir une compréhension basique de comment une source de données ODBC est identifiée.
  
 
=== Connexions ODBC via DSN ===
 
=== Connexions ODBC via DSN ===
 +
Un gestionnaire de pilote ODBC fournit une manière alternative pour créer des raccourcis de DSN pour un jeu de paramètres :
 +
* DSN ('''D'''ata'''S'''ource '''N'''ame soit Nom de Source de Données) : uns source de données utilisateur ou système, identifiée par un nom unique. Les DSNs peuvent être configurés en utilisant l'administrateur de sources de données d'OBDC ou manuellement en éditant le fichier <code>odbc.ini</code> (ou le registre)
 +
* Fichier DSN : un fichier qui contient des paramètres de connexion. Un administrateur de de source de données ODBC vous permet en général de créer un fichier de DSNs depuis une IHM.
 +
Les paramètres dans un DSN ou un fichier DSN peuvent toujours être combinés avec des paramètres additionnels dans la chaîne de connexion, par exemple pour spécifier un mot de passe.
  
An ODBC driver manager provides alternative ways to make DSN shortcuts for a set of parameters:
+
En configurant un DSN, les détails de la connexion peuvent être vérifiés fonctionnellement avec la boîte de dialogue de gestion, ensuite, le DSN nommé est tout ce qu'il faut pour utiliser la connexion plus tard. Les détails de connexion sont ainsi découplé de l'application, et seul le nom de DSN est utilisé dans votre logiciel - le DSN agissant comme un intermédiaire.
* DSN ('''D'''ata'''S'''ource '''N'''ame): a system or user defined data source, identified by a (unique) name. DSNs can be configured using the ODBC Data Source Administrator or by manually editing the <code>odbc.ini</code> file (or registry).
 
* File DSN: a file which contains connection parameters. An ODBC Data Source Administrator usually allows you to create File DSNs from the GUI.
 
The parameters in a DSN or File DSN can always be combined with additional parameters in the connection string, for example to specify a password.
 
 
 
By setting up a DSN the connection details can be verified to work within the manager dialog, and then the named DSN is all that is needed to use the connection later. The connection details are therefore ''decoupled'' from your application, as only the DSN name is used in your software - the DSN acting as a go-between.
 
  
An advantage to using a named DSN is that you may easily switch between databases using the ODBC Manager, without changing your code. This is useful in commercial development to test for bugs using a number of sets of your clients' data.
+
Un avantage dans l'utilisation d'un DSN nommé est que vous pouvez facilement basculer entre des bases de données en utilisant le gestionnaire ODBC sans modifier votre code. C'est utile dans un logiciel commercial pour tester des bugs en utilisant un nombre de jeux de données de votre client.
  
 
=== Sans DSN ===
 
=== Sans DSN ===
  
You may also connect via ODBC without using a DSN, simply supplying all the details in the Connection String that you would otherwise set up in a DSN (driver,server,database,login details). This more direct method avoids the need to set up a DSN when installing your application on a new machine.
+
Vous pouvez aussi vous connecter sans employer de DSN, simplement en fournissant tous les détails dans la chaîne de connexion que vous règleriez autrement dans un DSN (pilote, serveur, base de données, détails de la connexion). Cette méthode plus directe évite le besoin de configurer un DSN en installant votre applicaiton sur une nouvelle machine.
  
The ODBC specification defines a few parameters that can be used in a connection string:
+
La spécification ODBC définit quelques paramètres qui peuvent être utilisés dans une chaîne de connexion :
* Two special parameters, <code>DSN</code> and <code>FILEDSN</code>, allow one to select a set of pre-defined parameters, as described above.
+
* Deux paramètres spéciaux, <code>DSN</code> et <code>FILEDSN</code>, qui permettent à quelqu'un de configurer des paramètres prédéfinis, comme décrit plus haut.
* The <code>DRIVER</code> specifies which ODBC driver to use. Obviously, this is a very important parameter.
+
* Le <code>DRIVER</code> spécifie quel pilote ODBC utiliser. Évidement, c'est un paramètre très important.
* The <code>UID</code> and <code>PWD</code> parameters are used to supply a username and password.
+
* Les paramètres <code>UID</code> et <code>PWD</code> sont utilisés pour fournir un nom d'utilisateur et son mot de passe.
All other parameters are driver dependent.
+
Tous les autres paramètres dépendent du pilote.
Please refer to the documentation of the specific driver to learn more about available parameters and their names.
+
Veuillez vous référer à la documentation spécifique du pilote pour apprendre plus au sujet des paramètres disponibles et leurs noms.
  
 
=== Propriétés TODBCConnection ===
 
=== Propriétés TODBCConnection ===
  
The following table describes the mapping of <code>TODBCConnection </code> properties to ODBC connection string parameters:
+
La table suivante décrit la correspondance entre les propriétés de <code>TODBCConnection</code> et les paramètres de chaîne de connexion ODBC :
 +
 
 
{| class="wikitable"
 
{| class="wikitable"
! Property !! Type !! Connection string parameter
+
! Propriété !! Type !! Paramètre de chaîne de connexion
 
|-
 
|-
 
| <code>Driver</code> || <code>string</code> || <code>DRIVER</code>
 
| <code>Driver</code> || <code>string</code> || <code>DRIVER</code>
 
|-
 
|-
| <code>DatabaseName</code> || <code>string</code> || <code>DSN</code>, ''not'' to something like <code>DATABASENAME</code>, which is not part of the ODBC standard
+
| <code>DatabaseName</code> || <code>string</code> || <code>DSN</code>, et ''non'' pas quelque chose comme <code>DATABASENAME</code>, qui ne fait pas partie de la norme ODBC.
 
|-
 
|-
 
| <code>FileDSN</code> || <code>string</code> || <code>FILEDSN</code>
 
| <code>FileDSN</code> || <code>string</code> || <code>FILEDSN</code>
Line 162: Line 157:
 
| <code>UserName</code> || <code>string</code> || <code>UID</code>
 
| <code>UserName</code> || <code>string</code> || <code>UID</code>
 
|-
 
|-
| <code>HostName</code> || <code>string</code> || ''none''; there is no corresponding parameter in the ODBC standard
+
| <code>HostName</code> || <code>string</code> || ''none'' ; Pas de paramètre correspondant dans la norme ODBC.
 
|-
 
|-
| <code>Params</code> || <code>TStrings</code> || Use this to specify custom parameters. Each item must be of the form <code>NAME=VALUE</code>.
+
| <code>Params</code> || <code>TStrings</code> || Utilisez ceci pour spécifier des paramètres personnalisés. Chaque article doit être de la forme <code>NAME=VALUE</code>.
  
One important parameter that can be used is '''<code>AUTOCOMMIT</code>''' which determines if SQL statements are directly executed (without possibility of a rollback) (default setting, or set explicitly using <code>AUTOCOMMIT=1</code>) or whether you need to manually call StartTransaction and Commit, CommitRetaining or Rollback (set using <code>AUTOCOMMIT=0</code>)
+
Un paramètre important qui peut être utilisé est '''<code>AUTOCOMMIT</code>''' qui détermine si les ordres SQL sont directement exécutés (sans possibilité de Rollback) (règlage par défaut ou mettez-le explicitement en utilisant <code>AUTOCOMMIT=1</code>) ou si vous avez besoin d'appeler manuellement StartTransaction et Commit, CommitRetaining ou Rollback (réglez-le à <code>AUTOCOMMIT=0</code>)
 
|}
 
|}
  
Note that <code>TODBCConnection</code> will take care of escaping parameter values in the connection string (when required).
+
Remarquez que <code>TODBCConnection</code> prendra soin d'échapper les valeurs de paramètres au besoin.
  
The <code>LoginPrompt</code> boolean property is not implemented yet.
+
La propriété booléenne <code>LoginPrompt</code> n'est pas encore implémentée.
It would require finding the correct window handle, so a driver can show a GUI dialog to specify parameters.
+
Il faudrait trouver le bon handle de fenêtre, de sorte qu'un pilote peut afficher une boîte de dialogue GUI pour spécifier des paramètres. Notez que cela n'est pas contrôlé par la chaîne de connexion, mais plutôt par le dernier paramètre de la fonction de l'API ODBC <code>SQLDriverConnect</code>.
Note that this is not controlled by the connection string, but rather by the last parameter to the ODBC API function <code>SQLDriverConnect</code>.
 
  
 
== Exemples ==
 
== Exemples ==
  
In this section, examples are given of connecting to certain DBMSs using their specific ODBC drivers.
+
Dans cette section, des exemples sont donnés pour se connecter à certains SGBD en utilisant leur pilote ODBC spécifique.
  
 
=== Connexion à Excel ===
 
=== Connexion à Excel ===
Probably works on Windows only.
+
Ne fonctionne sans doute que sur Windows.
  
To avoid errors like:
+
Pour éviter des erreurs comme :  
 
<nowiki>
 
<nowiki>
 
Could not start transaction! ODBC error details: LastReturnCode: SQL_ERROR; Record 1: SqlState: HYC00; NativeError: 106; Message: [Microsoft][ODBC Excel Driver]Optional feature not implemented ;
 
Could not start transaction! ODBC error details: LastReturnCode: SQL_ERROR; Record 1: SqlState: HYC00; NativeError: 106; Message: [Microsoft][ODBC Excel Driver]Optional feature not implemented ;
 
</nowiki>
 
</nowiki>
  
... you'll have to enable autocommit, something like
+
... vous devrez activer l'autocommit, quelque chose comme
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
ODBCConnection1.Params.Add('AUTOCOMMIT=1');
 
ODBCConnection1.Params.Add('AUTOCOMMIT=1');
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 194: Line 188:
 
=== Connexion à MySQL ===
 
=== Connexion à MySQL ===
  
For a reference of supported parameters by the MyODBC driver, see [https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html].
+
Pour une référence sur les paramètres pris en charge par le pilote MyODBC, voyez [https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html].
  
Additionally you may check this [https://www.devart.com/odbc/mysql/docs/using_odbc_driver.htm mysql odbc connection] guide. It has a detail explanation of how to connect to MySQL using ODBC.  
+
De plus, vous pouvez contrôler ce guide de [https://www.devart.com/odbc/mysql/docs/using_odbc_driver.htm mysql connexion ODBC]. Il donne une explication détaillée sur la manière de se connecter à MySQL en utilisant ODBC.
  
The driver name differs a bit depending on the platform and MyODBC version; examples are :
+
Le nom du pilote diffère un peu selon la plate-forme et la version de MyODBC ; des exemples :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
  { properties of connection object, i.e. conn: TODBCConnection; }
 
  { properties of connection object, i.e. conn: TODBCConnection; }
 
  conn.Driver := 'MySQL'; // (Unix)  
 
  conn.Driver := 'MySQL'; // (Unix)  
Line 208: Line 202:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Other parameters (when not using a DSN) :
+
D'autres paramètres (en n'utilisant pas un DSN) :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
  conn.UserName := 'myUsername';
 
  conn.UserName := 'myUsername';
 
  conn.Password := 'myPassword';
 
  conn.Password := 'myPassword';
Line 222: Line 216:
 
=== Connexion à MS Access ===
 
=== Connexion à MS Access ===
  
Please see [[MS Access]].
+
Veuillez voir [[MS Access/fr|MS Access]].
  
 
=== Connexion à Microsoft SQL Server ===
 
=== Connexion à Microsoft SQL Server ===
{{Note|Newer versions than FPC 2.6.0 and Lazarus versions using those support a direct SQLDB connection to MS SQL Server; see [[Lazarus_Database_Overview#Lazarus_and_MSSQL.2FSybase|MSSQL]] }}
+
{{Note|Les versions plus récentes que FPC 2.6.0 et Lazarus l'utilisant prennent en charge une connexion directe SQLdb vers MS SQL Server ; voir [[Lazarus_Database_Overview/fr#Lazarus_et_MSSQL.2FSybase|MSSQL]]}}
  
Use this [https://www.devart.com/odbc/sqlserver/docs/using_odbc_driver.htm mssql odbc driver connection] examples which include step by step tutorial and connection strings.  
+
Utilisez ces exemples de [https://www.devart.com/odbc/sqlserver/docs/using_odbc_driver.htm connexion au pilote ODBC de MS SQL] qui contiennent une tutoriel pas à pas et des chaînes des connexion.
  
See http://www.connectionstrings.com/sql-server#p7 for more details on connection strings.
+
Voir http://www.connectionstrings.com/sql-server#p7 pour plus de détails sur les chaînes de connexion.
  
Microsoft SQL Server ODBC connection string example:
+
Exemple de chaîne de connexion ODBC pour Microsoft SQL Server :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
Server=<server name>; // or <server name>\<instance name>
 
Server=<server name>; // or <server name>\<instance name>
 
Database=<database name>;
 
Database=<database name>;
Line 240: Line 234:
 
=== Connexion à Oracle ===
 
=== Connexion à Oracle ===
  
Use this [https://www.devart.com/odbc/oracle/docs/using_odbc_driver.htm odbc oracle connection] guide to perform easy and painless connection to Oracle.  
+
Utilisez ce guide de [https://www.devart.com/odbc/oracle/docs/using_odbc_driver.htm connexion ODBC à Oracle] pour réaliser facilement et sans souffrance une connexion à Oracle.
  
Oracle ODBC connection string example:
+
Exemple de chaîne de connexion à Oracle :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
Login Prompt=False;
 
Login Prompt=False;
 
Data Source=ORCL;
 
Data Source=ORCL;
Line 253: Line 247:
 
=== Connexion à PosgreSQL ===
 
=== Connexion à PosgreSQL ===
  
Use this [https://www.devart.com/odbc/postgresql/docs/using_odbc_driver.htm postgresql odbc connection guide] to perform easy and painless connection to PostgreSQL database.  
+
Utilisez ce [https://www.devart.com/odbc/postgresql/docs/using_odbc_driver.htm postgresql guide de connexion ODBC à Postgresql] pour réaliser facilement et sans souffrance une connexion à PostgreSQL.
  
PostgreSQL ODBC connection string example:
+
Exemple de chaîne de connexion à PostgreSQL :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
Login Prompt=False;
 
Login Prompt=False;
 
Data Source=localhost;
 
Data Source=localhost;
Line 268: Line 262:
 
=== Connexion à SQLite ===
 
=== Connexion à SQLite ===
  
Use this [https://www.devart.com/odbc/sqlite/docs/using_odbc_driver.htm sqlite odbc connection guide] to perform easy and painless connection to SQLite database.  
+
Utilisez ce guide de [https://www.devart.com/odbc/sqlite/docs/using_odbc_driver.htm connexion ODBC à SQLite] pour réaliser facilement et sans souffrance une connexion à une base de données SQLite.
  
SQLite ODBC connection string example:
+
Exemple de chaîne de connexion à SQLite :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
Login Prompt=False;
 
Login Prompt=False;
 
Database=c:\test.db3
 
Database=c:\test.db3
Line 279: Line 273:
 
=== Connexion à Firebird ===
 
=== Connexion à Firebird ===
  
Use this [https://www.devart.com/odbc/firebird/docs/using_odbc_driver.htm firebird odbc connection guide] to perform easy and painless connection to Firebird database.  
+
Utilisez ce guide de [https://www.devart.com/odbc/firebird/docs/using_odbc_driver.htm connexion ODBC à Firebird] pour réaliser facilement et sans souffrance une connexion à une base de données Firebird.
  
Firebird ODBC connection string example:
+
Exemple de chaîne de connexion à Firebird :  
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
Data Source=127.0.0.1;
 
Data Source=127.0.0.1;
 
User ID=sysdba;
 
User ID=sysdba;
Line 291: Line 285:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==== DSN nommé ====
+
=== DSN nommé ===
On Windows, you can use something like this with an existing named DSN:
+
Sur Windows, vous pouvez utiliser quelque chose comme ceci avec un DSN nommé existant :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
  { properties of connection object, i.e. conn: TODBCConnection; }
 
  { properties of connection object, i.e. conn: TODBCConnection; }
 
  conn.DatabaseName := '<Your_DSN_Name>';
 
  conn.DatabaseName := '<Your_DSN_Name>';
Line 300: Line 294:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==== DSN-less ====
+
=== Sans DSN ===
Without a DSN:
+
Ceci devient :
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
  { properties of connection object, i.e. conn: TODBCConnection; }
 
  { properties of connection object, i.e. conn: TODBCConnection; }
 
  conn.Driver := 'SQL Server';
 
  conn.Driver := 'SQL Server';
Line 314: Line 308:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Note: In this example, we connect to the local machine (server=.), on the instance SQLEXPRESS. You can use a hostname instead of ., and you can omit the instance to connect to the default instance. See MS documentation for details.
+
Note : Dans cet exemple, nos nous connectons à la machine locale (server=.), à l('instance SQLEXPRESS. Vous pouvez utiliser un nom d'hôte (''hostname'') à la place et vous pouvez omettre l'instance pour vous connecter à l'instance par défaut. Voyez la documentation MS pour les détails.
 +
 
 +
Utiliser une connexion de confiance (''trusted'', aussi connue comme sécurité intégrée ou SSPI) signifie que vous vous connectez en utilisant vos pièces d'identité (''credentials'') d'utilisateur Windows. Vous pouvez omettre la ligne Trusted_Connection, mais vous devez alors spécifier l'ID utilisateur  (Uid=...) et le mot de passe (Pwd=...).
  
Using a trusted connection (also known as integrated security or SSPI) means you login using your Windows user credentials. You can omit the Trusted_Connection line, but then you need to specify user ID (Uid=...) and password (Pwd=...).
+
=== Exemple DSN ===
 +
L'exemple de code du dessous sélectionne les lignes depuis une table de MS SQL Server appelée 'journal_entries' et affiche toutes les valeurs de la colonne 'journal_entry' dans un contrôle TMemo nommé Memo1.
  
==== Exemple DSN ====
+
<syntaxhighlight lang=pascal>
The example code below selects the rows from a MS SQL Server table called 'journal_entries' and displays all the values of column 'journal_entry' in a Memo control called Memo1.
 
<syntaxhighlight>
 
 
// uses  ODBCConn, sqldb;
 
// uses  ODBCConn, sqldb;
 
procedure TForm1.Button1Click(Sender: TObject);
 
procedure TForm1.Button1Click(Sender: TObject);
Line 372: Line 367:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
In fact it is possible to use conn.Params for all parts of the connection string, if we modify the above - this time showing the SQL Server version in a pop-up message :
+
En fait il est possible d'utiliser conn.Params pour toutes les parties de la chaîne de connexion, si vous modifiez ce qui précède - cette fois, en montrant la version de SQL Server dans un message pop-up :
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   conn.Params.Add('Driver=SQL Server');
 
   conn.Params.Add('Driver=SQL Server');
 
   conn.Params.Add('Server=OURBIGSERVER');
 
   conn.Params.Add('Server=OURBIGSERVER');
Line 386: Line 381:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Functions are supported - e.g. '<Code>SELECT * FROM MyTestFunc()</Code>' - but there may be issues with ''Stored Procedures'' that return recordsets. For example, if '<Code>EXEC MyStoredProcedure</Code>' returns data rows (verified in SQL Server Management Studio or with the ''SqlCmd'' DOS command: <Code>C:\>sqlcmd -S MyServer -E -d MyDataBase -Q "exec MySP"</Code>) then <Code>query.open</Code> will give an error : "Cannot open a non-select statement" (this may be fixed after FPC 2.6)
+
Les fonctions sont prises en charge - p.ex. '<Code>SELECT * FROM MyTestFunc()</Code>' - mais il peut y avoir des problèmes avec les ''procédures stockées'' qui retourne des ensembles d'enregistrements. Par exemple, si '<Code>EXEC MyStoredProcedure</Code>' retourne des lignes de données (vérifié dans le SQL Server Management Studio ou avec la commande DOS : <Code>C:\>sqlcmd -S MyServer -E -d MyDataBase -Q "exec MySP"</Code>) alors <Code>query.open</Code> nous donnera une erreur : "Cannot open a non-select statement" (cela pourrait être corrigé après FPC 2.6).
  
To call a Stored Procedure or to issue other SQL commands that return no rowsets (CREATE,INSERT,UPDATE,DELETE), use <Code>query.ExecSQL</Code> instead of <Code>query.Open</Code>
+
Pour appeler une procédure stockées ou pour émettre d'autres ordres SQL qui ne retourne pas d'ensemble de données (CREATE,INSERT,UPDATE,DELETE), utilisez <Code>query.ExecSQL</Code> au lieu de <Code>query.Open</Code>.
  
Stored Procedure parameters work, e.g. '<Code>EXEC MySP @param1=23</Code>'
+
Les paramètres de procédure stockées fonctionnent, p.ex. '<Code>EXEC MySP @param1=23</Code>'.
  
The use of ''Parameters'' is recommended to avoid ''SQL injection vulnerabilities''. In this case the SQL statement isn't built with values directly, but a named placeholder is used instead - and then the parameter is specified separately. Using this method it isn't possible to inject malicious SQL commands into variable fields in an attempt to tamper with the database; the server then knows specifically what part of the statement is a value and what is command. For example, instead of building a WHERE clause directly with the value 95 (<Code>'... WHERE field2>95'</Code>), instead use a named parameter like 'testval' -
+
L'emploi de ''Paramètres'' est recommandé pour éviter des ''vulnérabilités par injection SQL''. Dans ce cas, l'ordre SQL n'est pas construit directement avec des valeurs, mais des marques substitutives nommées (''named placeholder'') sont utilisées à la place - et ensuite les paramètres sont spécifiées séparément. Avec cette méthode, il est impossible d'injecter du code SQL malicieux dans les champs variables pour altérer la base de données ; le serveur sait alors distinguer les instructions des valeurs. Par exemple, au lieu de construire une clause WHERE contenant la valeur 95 (<Code>'... WHERE field2>95'</Code>), vous utilisez un paramètre nommé tel que 'testval' -
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
  query.SQL.Text := 'select * from mytable where field2>:testval';
+
  query.SQL.Text := 'select * from mytable where field2=:testval';
 
  query.Params.ParamByName('testval').AsString := '95';
 
  query.Params.ParamByName('testval').AsString := '95';
 
  query.open;   
 
  query.open;   
Line 402: Line 397:
  
 
=== Problèmes avec des transactions ===
 
=== Problèmes avec des transactions ===
In Lazarus 1.2.4 (FPC 2.6.4), ODBC transaction behaviour has changed.
+
Dans Lazarus 1.2.4 (FPC 2.6.4), le comportement de transaction ODBC a changé.
This may cause previously working code to stop working.
+
Cela peut rendre du code qui marchait avant en code qui ne marche plus.
  
For a solution, see [[User_Changes_2.6.4#TODBCConnection_.28odbcconn.29_No_longer_autocommit]]
+
Pour une solution, voyez [[User_Changes_2.6.4#TODBCConnection_.28odbcconn.29_No_longer_autocommit]].
  
 
=== Messages d'erreur ===
 
=== Messages d'erreur ===
Each ODBC API call also returns a succes code; if there is an error, more information can be retrieved using calls to <code>SQLGetDiagRec</code>. (For the sake of completeness: diagnostic records are also available when an API call returns <code>SQL_SUCCES_WITH_INFO</code>.)
+
Chaque appel à l'API ODBC retourne aussi un code de succès ; s'il y a une erreur, plus d'informations peut être obtenue en faisant des appels à <code>SQLGetDiagRec</code>. Dans un souci d'exhaustivité : les enregistrements de diagnostic sont également disponibles lorsqu'un appel d'API renvoie <code> SQL_SUCCES_WITH_INFO </code>.
  
<code>TODBCConnection</code> checks the return code of each ODBC call and contructs an <code>EODBCException</code>.
+
<code>TODBCConnection</code> vérifie le code de retour de chaque appel ODBC et construit une <code>EODBCException</code>. Le <code>message</code> de cette exception consiste en :
The <code>message</code> of this exception consists of:
+
* un message identifiant ce que le <code>TODBCConnection</code>faisait quand l'erreur s'est produite.
* a message identifying what the <code>TODBCConnection</code> was doing when the error occurred
+
* Le code de retour de l'appel à l'API ODBC (p.ex. <code>SQL_ERROR</code>)
* the return code of the ODBC API call (e.g. <code>SQL_ERROR</code>)
+
* un nombre d'enregistrements de diagnostic (obtenus en utilisant <code>SQLGetDiagRec</code>) ; chaque enregistrement consiste en trois champs :
* a number of diagnostic records (obtained using <code>SQLGetDiagRec</code>); each record consists of three fields:
+
** un code d'erreur sur 5 caractères identifiant l'erreur
** a 5-character error code identifying the error
+
** Un "code d'erreur natif"
** a 'native error code'
+
** un message décrivant l'erreur
** a message describing the error
 
  
 
==== Erreur de fonction séquence ====
 
==== Erreur de fonction séquence ====
If you get a 'Function sequence error' in the finalization section of the <code>ODBCConn</code> unit, then you probably did not properly clean up all you queries and connections.
+
Si vous obtenez une 'Function sequence error' dans la section 'finalization' de l'unité <code>ODBCConn</code>, il s'agit probablement que vous n'avez pas nettoyer correctement toutes vos requêtes et vos connexions.
  
 
==== Le Rollback ne fonctionne pas ====
 
==== Le Rollback ne fonctionne pas ====
If you issue <syntaxhighlight>TSQLTransaction.Rollback</syntaxhighlight> commands but your SQL is committed regardless, your ODBC connection probably is in AUTOCOMMIT mode; see [[ODBCConn#TODBCConnection_properties|the remarks about the AUTOCOMMIT connection parameter]] on how to correct this.
+
Si vous émettez des instructions <syntaxhighlight lang=pascal>TSQLTransaction.Rollback</syntaxhighlight> mais que votre SQL est validé malgré tout, votre connexion est probablement en mode AUTOCOMMIT ; voyez [[ODBCConn/fr#Propri.C3.A9t.C3.A9s_TODBCConnection|les remarques sur le paramètre de connexion AUTOCOMMIT]] pour savoir comment corriger ceci.
  
 
=== Tracage ===
 
=== Tracage ===
Line 434: Line 428:
  
 
== Voir aussi ==
 
== Voir aussi ==
* [[MS Access]] Using ODBC to access Microsoft Access databases
+
* [[MS Access/fr|MS Access]] Utilisation de ODBC pour accéder aux bases de données Microsoft Access.
 +
<br/>

Latest revision as of 13:34, 21 February 2020

English (en) español (es) français (fr) 日本語 (ja)

Portail de la base de données

Références:

Tutoriels/articles pratiques :

Bases de données

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

L'unité ODBCConn implémente une connexion SQLdb pour ouvrir des sources de données Open Database Connectivity (ODBC).

Vue d'ensemble

ODBC

ODBC (Open Database Connectivity) est une technologie qui permet à chacun de se connecter à une variété de base de données en utilisant une simple API, l'API ODBC.

Il y a des implémentations ODBC pour des plates-formes diverses et il y a des pilotes pour la plupart des SGBDR. La documentation officielle ODBC peut être trouvée dans le site ODBC de MSDN.

TODBCConnection

FreePascal est livré avec des en-têtes ODBC; Ils se trouvent dans les unités odbcsql et odbcsqldyn.

TODBCConnection est un descendant de TSQLConnection fournissant une enveloppe POO sympa pour ODBC en utilisant le framework SQLdb.

Dans Lazarus, vous pouvez trouver le composant TODBCConnection dans l'onglet SQLdb. Vous pouvez aussi utiliser le composant TODBCConnection dans votre code en ajoutant l'unité ODBCConn à votre clause uses.

sqldbcomponents.png

Ce qui a été implémenté :

  • Exécution des requêtes et récupération des ensembles résultats.
  • la plupart des types de champ, y compris les BLOB.
  • Les paramètres de requêtes (types string et integer).
  • La préparation des requêtes.
  • UpdateIndexDefs (vous pouvez aussi utiliser ApplyUpdates).

Ce qui reste à implémenter :

  • Support approprié aux transactions; Actuellement, chaque connexion correspond à une transaction.
  • Quelques types de champ :
    • SQL_TYPE_UTC* (ceux-ci sont mentionnés dans les doc ODBC, mais en semble pas utilisées dans les implémentions).
    • SQL_INTERVAL_* (quel pourrait être le TFieldType correspondant ?)
    • SQL_GUID (TGUIDField n'était pas implémenté, jusqu'à récemment).

Pourquoi utiliser ODBC?

Free Pascal est livré avec des composants pour la connexion à plusieurs bases de données, telles que MySQL, PostGreSQL, Firebird, Microsoft SQL Server (depuis 2.6.1), Oracle, etc.

Pour les bases de données manquantes à la liste, comme MS Access et peut-être Microsoft SQL Server, Microsoft SQL Server, EDBC est une solution acceptable et bien établie.

(Il est recommandé aux développeurs VB.net/C# d'utiliser SQLClient plutôt que OLEDB ou ODBC pour une performance optimale, mais ici, Lazarus ODBC fonctionnera de manière adéquate et fiable)

Le composant TODBCConnection a été développé l'origine pour contourner la licence stricte de MySQL pour les applications qui ne sont pas GPL-isées ou qui n'obéissent pas à MySQL AB exception FLOSS.

Installation d'ODBC des des pilotes ODBC

Avant de pouvoir vous connecter à votre base de données en utilisant ODBC, vous avez besoin d'installer :

  • un gestionnaire de pilotes ODBC
  • un ilote spécifique au SGBD auquel vous voulez vous connecter.

Cette section bous donnera une brève vue d'ensemble des étapes impliquées. Toutefois, veuillez consulter la documentation pertinente pour une référence définitive.

Le gestionnaire de pilotes ODBC

Windows

windows a un gestionnaire de pilotes ODBC intégré, qui permet le réglages des DSNs et d'autres configurations. Il est accessible depuis le Panneau de contrôle, dans les versions récentes avec des sections catégorisées, il a été déplacé dans l'aire Outils d'administration. Vous pouvez aussi cliquer sur le bouton Démarrer et entrer ODBC dans la boîte d'exécution (dans Windows 7, ceci apparaît comme "Rechercher des programmes et des fichiers").

Vous pouvez, bien sûr, créer un raccourci de bureau vers la boîte de dialogue si vous pensez l'utiliser régulièrement.

WinXPODBCDataSourceAdministratorDrivers.png

Unix-s

Deux gestionnaires de pilotes ODBC populaires dans les paltes-formes sont unixODBC et iODBC. ODBCConn est connu pour fonctionner avec unixODBC ; La compatibilité iODBC doit encore être testée.

Debian

Pour Debian, vous pouvez installer le paquet unixodbc :1

aptitude install unixodbc
aptitude install unixodbc-bin # if you want some GUI tools

L'unité odbcsqldyn et par conséquent odbcconn, vont chercher un fichier appelé libodbc.so.

Elle n'acceptera pas un fichier nommé libodbc.so.1 ou libodbc.so.1.0.0. Le paquet unixodbc de Debian ne crée pas de lien symbolique (symlink) avec le nom /usr/lib/libodbc.so ; donc vous devez soit :

  • créer le lien vous-même : ln -s libodbc.so.1 /usr/lib/libodbc.so, ou
  • installer le paquet unixodbc-dev, qui crée le lien symbolique.

Si vous avez installé le paquet unixodbc-bin, vous pouvez exécuter le programme ODBCConfig pour configurer les pilotes ODBC et les DSNs.

ODBCDataSourceAdministratorAbout.PNG

Ubuntu

Pour Ubuntu, suivez l'instruction pour Debian. Note : Le paquet unixodbc-bin pourrait ne pas être disponible depuis le référentiel de paquet par défaut.

Pilotes ODBC

Vous pouvez télécharger les derniers pilotes ODBC avec les liens suivants :

Télécharger le pilote ODBC 32/64-bit pour SQL Server - la dernière version du pilote SQL Server ODBC qui prend en charge Windows, Mac OS X, Linux à la fois les versions 32 et 64-bit. Compatible avec SQL Server 2014\2012\2008 R2\ 2008\2005 (y compris la version Express), SQL Server 2000 (y compris MSDE), SQL Server 7, SQL Server Compact 4.0\3.5\3.1. Fonctionne sur toutes les version de Lazarus.

Télécharger le pilote ODBC 32/64-bit pour Oracle - Dernière version du pilote ODBC Oracle qui prend en charge Windows, Mac OS X, Linux à la fois les versions 32 et 64-bit. Compatible avec les serveurs Oracle : 12c, 11g, 10g, 9i, 8i, 8.0, y compris Oracle Express Edition 11g et 10g. Clients Oracle : 12c, 11g, 10g, 9i, 8i, 8.0. Fonctionne sur toutes les versions de Lazarus.

Télécharger le pilote ODBC 32/64 bit pour MySQL - Dernière version du pilote MySQL qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec le serveurs MySQL : 6.0, 5.6, 5.5, 5.1, 5.0, 4.1, 4.0, et 3.23. MariaDB 5.x. Fonctionne sur toutes les versions de Lazarus.

Télécharger le pilote ODBC 32/64 bit pour PostgreSQL - Dernière version du pilote ODBC pour PostgreSQL qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec les versions de serveur PostgreSQL depuis 7.1 jusqu'à 9.4. Fonctionne sur toutes les versions de Lazarus.

Télécharger le pilote ODBC 32/64-bit pour SQLite - Dernière version du pilote ODBC pour SQLite ODBC qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec les versions de SQLite depuis 3.0 et supérieur. Fonctionne sur toutes les versions de Lazarus.

Télécharger le pilote ODBC 32/64-bit pour Firebird - Dernière version du pilote ODBC pour Firebird qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec les versions 3, 2.x, 1.x de Firebird. Fonctionne sur toutes les versions de Lazarus.

Télécharger le pilote ODBC 32/64-bit pour Interbase - Dernière version du pilote ODBC pour Interbase qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec toutes les versions d'Interbase. Fonctionne sur toutes les versions de Lazarus.

Télécharger le pilote ODBC 32/64-bit pour SQL Azure - Dernière version du pilote ODBC pour SQL Azure qui prend en charge Windows, Mac OS X, Linux en versions 32 et 64-bit. Compatible avec toutes les versions de SQL Azure. Fonctionne sur toutes les versions de Lazarus.

Connexion à une source de données ODBC

Les paramètres de connexion à une source de données ODBC sont décrits à l'aide d'une chaîne de connexion. C'est une chaîne de la forme NAME=VALUE;NAME=VALUE. TODBCConnection fournit une enveloppe (wrapper) autour de cette chaîne de connexion. Certaines de ses propriétés correspondent à des paires nom-valeur dans la chaîne de connexion et des paramètres personnalisés peuvent être spécifiés dans la propriété Params (qui est une TStrings).

Avant d'aller plus en détail sur cette enveloppe, vous devez d'abord avoir une compréhension basique de comment une source de données ODBC est identifiée.

Connexions ODBC via DSN

Un gestionnaire de pilote ODBC fournit une manière alternative pour créer des raccourcis de DSN pour un jeu de paramètres :

  • DSN (DataSource Name soit Nom de Source de Données) : uns source de données utilisateur ou système, identifiée par un nom unique. Les DSNs peuvent être configurés en utilisant l'administrateur de sources de données d'OBDC ou manuellement en éditant le fichier odbc.ini (ou le registre)
  • Fichier DSN : un fichier qui contient des paramètres de connexion. Un administrateur de de source de données ODBC vous permet en général de créer un fichier de DSNs depuis une IHM.

Les paramètres dans un DSN ou un fichier DSN peuvent toujours être combinés avec des paramètres additionnels dans la chaîne de connexion, par exemple pour spécifier un mot de passe.

En configurant un DSN, les détails de la connexion peuvent être vérifiés fonctionnellement avec la boîte de dialogue de gestion, ensuite, le DSN nommé est tout ce qu'il faut pour utiliser la connexion plus tard. Les détails de connexion sont ainsi découplé de l'application, et seul le nom de DSN est utilisé dans votre logiciel - le DSN agissant comme un intermédiaire.

Un avantage dans l'utilisation d'un DSN nommé est que vous pouvez facilement basculer entre des bases de données en utilisant le gestionnaire ODBC sans modifier votre code. C'est utile dans un logiciel commercial pour tester des bugs en utilisant un nombre de jeux de données de votre client.

Sans DSN

Vous pouvez aussi vous connecter sans employer de DSN, simplement en fournissant tous les détails dans la chaîne de connexion que vous règleriez autrement dans un DSN (pilote, serveur, base de données, détails de la connexion). Cette méthode plus directe évite le besoin de configurer un DSN en installant votre applicaiton sur une nouvelle machine.

La spécification ODBC définit quelques paramètres qui peuvent être utilisés dans une chaîne de connexion :

  • Deux paramètres spéciaux, DSN et FILEDSN, qui permettent à quelqu'un de configurer des paramètres prédéfinis, comme décrit plus haut.
  • Le DRIVER spécifie quel pilote ODBC utiliser. Évidement, c'est un paramètre très important.
  • Les paramètres UID et PWD sont utilisés pour fournir un nom d'utilisateur et son mot de passe.

Tous les autres paramètres dépendent du pilote. Veuillez vous référer à la documentation spécifique du pilote pour apprendre plus au sujet des paramètres disponibles et leurs noms.

Propriétés TODBCConnection

La table suivante décrit la correspondance entre les propriétés de TODBCConnection et les paramètres de chaîne de connexion ODBC :

Propriété Type Paramètre de chaîne de connexion
Driver string DRIVER
DatabaseName string DSN, et non pas quelque chose comme DATABASENAME, qui ne fait pas partie de la norme ODBC.
FileDSN string FILEDSN
Password string PWD
UserName string UID
HostName string none ; Pas de paramètre correspondant dans la norme ODBC.
Params TStrings Utilisez ceci pour spécifier des paramètres personnalisés. Chaque article doit être de la forme NAME=VALUE.

Un paramètre important qui peut être utilisé est AUTOCOMMIT qui détermine si les ordres SQL sont directement exécutés (sans possibilité de Rollback) (règlage par défaut ou mettez-le explicitement en utilisant AUTOCOMMIT=1) ou si vous avez besoin d'appeler manuellement StartTransaction et Commit, CommitRetaining ou Rollback (réglez-le à AUTOCOMMIT=0)

Remarquez que TODBCConnection prendra soin d'échapper les valeurs de paramètres au besoin.

La propriété booléenne LoginPrompt n'est pas encore implémentée. Il faudrait trouver le bon handle de fenêtre, de sorte qu'un pilote peut afficher une boîte de dialogue GUI pour spécifier des paramètres. Notez que cela n'est pas contrôlé par la chaîne de connexion, mais plutôt par le dernier paramètre de la fonction de l'API ODBC SQLDriverConnect.

Exemples

Dans cette section, des exemples sont donnés pour se connecter à certains SGBD en utilisant leur pilote ODBC spécifique.

Connexion à Excel

Ne fonctionne sans doute que sur Windows.

Pour éviter des erreurs comme : Could not start transaction! ODBC error details: LastReturnCode: SQL_ERROR; Record 1: SqlState: HYC00; NativeError: 106; Message: [Microsoft][ODBC Excel Driver]Optional feature not implemented ;

... vous devrez activer l'autocommit, quelque chose comme

ODBCConnection1.Params.Add('AUTOCOMMIT=1');

Connexion à MySQL

Pour une référence sur les paramètres pris en charge par le pilote MyODBC, voyez [1].

De plus, vous pouvez contrôler ce guide de mysql connexion ODBC. Il donne une explication détaillée sur la manière de se connecter à MySQL en utilisant ODBC.

Le nom du pilote diffère un peu selon la plate-forme et la version de MyODBC ; des exemples :

 { properties of connection object, i.e. conn: TODBCConnection; }
 conn.Driver := 'MySQL'; // (Unix) 
 conn.Driver := 'MySQL ODBC 3.51 Driver';  // (Windows)
 conn.Driver := 'MySQL Connector/ODBC v5'; // (Windows)
 // note: driver name doesn't need {} like it does in SQL Connection Strings elsewhere

D'autres paramètres (en n'utilisant pas un DSN) :

 conn.UserName := 'myUsername';
 conn.Password := 'myPassword';
 // conn.Params (TStrings) set using .add method :
 conn.Params.Add('server=example.com');
 conn.Params.Add('port=3306');
 conn.Params.Add('database=myDatabase');
 conn.Params.Add('charset=utf8');

Connexion à MS Access

Veuillez voir MS Access.

Connexion à Microsoft SQL Server

Light bulb  Remarque: Les versions plus récentes que FPC 2.6.0 et Lazarus l'utilisant prennent en charge une connexion directe SQLdb vers MS SQL Server ; voir MSSQL

Utilisez ces exemples de connexion au pilote ODBC de MS SQL qui contiennent une tutoriel pas à pas et des chaînes des connexion.

Voir http://www.connectionstrings.com/sql-server#p7 pour plus de détails sur les chaînes de connexion.

Exemple de chaîne de connexion ODBC pour Microsoft SQL Server :

Server=<server name>; // or <server name>\<instance name>
Database=<database name>;

Connexion à Oracle

Utilisez ce guide de connexion ODBC à Oracle pour réaliser facilement et sans souffrance une connexion à Oracle.

Exemple de chaîne de connexion à Oracle :

Login Prompt=False;
Data Source=ORCL;
User ID=scott;
Password=tiger

Connexion à PosgreSQL

Utilisez ce postgresql guide de connexion ODBC à Postgresql pour réaliser facilement et sans souffrance une connexion à PostgreSQL.

Exemple de chaîne de connexion à PostgreSQL :

Login Prompt=False;
Data Source=localhost;
User ID=postgres;
Password=postgres;
Database=postgres;
Schema=public

Connexion à SQLite

Utilisez ce guide de connexion ODBC à SQLite pour réaliser facilement et sans souffrance une connexion à une base de données SQLite.

Exemple de chaîne de connexion à SQLite :

Login Prompt=False;
Database=c:\test.db3

Connexion à Firebird

Utilisez ce guide de connexion ODBC à Firebird pour réaliser facilement et sans souffrance une connexion à une base de données Firebird.

Exemple de chaîne de connexion à Firebird :

Data Source=127.0.0.1;
User ID=sysdba;
Password=masterkey;
Client Library=fbclient.dll;
Database=c:\fbd.fdb

DSN nommé

Sur Windows, vous pouvez utiliser quelque chose comme ceci avec un DSN nommé existant :

 { properties of connection object, i.e. conn: TODBCConnection; }
 conn.DatabaseName := '<Your_DSN_Name>';
 { Leave all other conn. properties empty }

Sans DSN

Ceci devient :

 { properties of connection object, i.e. conn: TODBCConnection; }
 conn.Driver := 'SQL Server';
 // note: driver name doesn't need {} like it does in SQL Connection Strings elsewhere
 { Leave Hostname and DatabaseName properties empty }
 { set conn.Params (TStrings) : }
 conn.Params.Add('Database=<yourdatabasename>');
 conn.Params.Add('Server=.\SQLEXPRESS');
 conn.Params.Add('Trusted_Connection=Yes'); // or 'Integrated Security=SSPI'

Note : Dans cet exemple, nos nous connectons à la machine locale (server=.), à l('instance SQLEXPRESS. Vous pouvez utiliser un nom d'hôte (hostname) à la place et vous pouvez omettre l'instance pour vous connecter à l'instance par défaut. Voyez la documentation MS pour les détails.

Utiliser une connexion de confiance (trusted, aussi connue comme sécurité intégrée ou SSPI) signifie que vous vous connectez en utilisant vos pièces d'identité (credentials) d'utilisateur Windows. Vous pouvez omettre la ligne Trusted_Connection, mais vous devez alors spécifier l'ID utilisateur (Uid=...) et le mot de passe (Pwd=...).

Exemple DSN

L'exemple de code du dessous sélectionne les lignes depuis une table de MS SQL Server appelée 'journal_entries' et affiche toutes les valeurs de la colonne 'journal_entry' dans un contrôle TMemo nommé Memo1.

// uses  ODBCConn, sqldb;
procedure TForm1.Button1Click(Sender: TObject);
var
  S: String;
  conn : TODBCConnection; // uses ODBCConn
  query: TSQLQuery;       // uses sqldb
  transaction: TSQLTransaction;   // uses sqldb

begin
  conn := TODBCCOnnection.Create(nil);
  query := TSQLQuery.Create(nil);
  transaction := TSQLTransaction.Create(nil);
  try
    try
      conn.DatabaseName := 'sqlserverdsn'; {replace this with your DSN, if you use any}
      conn.UserName:= 'sa'; //replace with your user name
      conn.Password:= 'thepassword'; //replace with your password
      // You can override the properties defined in the DSN, e.g.
      //conn.Params.Add('Database=some_other_db');

      conn.Transaction := transaction;
      query.DataBase := conn;
      { To avoid "could not retrieve primary key metadata":
      - either use query.UsePrimaryKeyAsKey:=false
      or (preferred)
      - query.PacketRecords to -1
      If you are using SQL Server, you could alternatively enable MARS in your SQL Native Client ODBC driver.
      See http://bugs.freepascal.org/view.php?id=13241 }
      query.PacketRecords:=-1; //retrieve all data at once
      query.SQL.Text := 'select journal_entry from journal_entries';
      query.Open;
      S := '';
      while not query.EOF do
      begin
        S := S + query.FieldByName('journal_entry').AsString + #13#10;
        query.Next;
      end;
    finally
      query.Free;
      conn.Free;
      transaction.Free;
    end;
  except
    on E: Exception do
      ShowMessage(E.message);
  end;
  Memo1.Text:= S;
end;

En fait il est possible d'utiliser conn.Params pour toutes les parties de la chaîne de connexion, si vous modifiez ce qui précède - cette fois, en montrant la version de SQL Server dans un message pop-up :

  conn.Params.Add('Driver=SQL Server');
  conn.Params.Add('Server=OURBIGSERVER');
  conn.Params.Add('Database=TestDataBase');
  conn.Params.Add('Integrated Security=SSPI'); // use Windows logon credentials
  // no other conn. properties set, apart from conn.Transaction := transaction;

  query.DataBase := conn;
  query.SQL.Text := 'select @@version';
  query.Open;
  showmessage(query.Fields[0].AsString); // Fields are numbered starting from 0

Les fonctions sont prises en charge - p.ex. 'SELECT * FROM MyTestFunc()' - mais il peut y avoir des problèmes avec les procédures stockées qui retourne des ensembles d'enregistrements. Par exemple, si 'EXEC MyStoredProcedure' retourne des lignes de données (vérifié dans le SQL Server Management Studio ou avec la commande DOS : C:\>sqlcmd -S MyServer -E -d MyDataBase -Q "exec MySP") alors query.open nous donnera une erreur : "Cannot open a non-select statement" (cela pourrait être corrigé après FPC 2.6).

Pour appeler une procédure stockées ou pour émettre d'autres ordres SQL qui ne retourne pas d'ensemble de données (CREATE,INSERT,UPDATE,DELETE), utilisez query.ExecSQL au lieu de query.Open.

Les paramètres de procédure stockées fonctionnent, p.ex. 'EXEC MySP @param1=23'.

L'emploi de Paramètres est recommandé pour éviter des vulnérabilités par injection SQL. Dans ce cas, l'ordre SQL n'est pas construit directement avec des valeurs, mais des marques substitutives nommées (named placeholder) sont utilisées à la place - et ensuite les paramètres sont spécifiées séparément. Avec cette méthode, il est impossible d'injecter du code SQL malicieux dans les champs variables pour altérer la base de données ; le serveur sait alors distinguer les instructions des valeurs. Par exemple, au lieu de construire une clause WHERE contenant la valeur 95 ('... WHERE field2>95'), vous utilisez un paramètre nommé tel que 'testval' -

 query.SQL.Text := 'select * from mytable where field2=:testval';
 query.Params.ParamByName('testval').AsString := '95';
 query.open;

Débogage d'ODBC & erreurs

Problèmes avec des transactions

Dans Lazarus 1.2.4 (FPC 2.6.4), le comportement de transaction ODBC a changé. Cela peut rendre du code qui marchait avant en code qui ne marche plus.

Pour une solution, voyez User_Changes_2.6.4#TODBCConnection_.28odbcconn.29_No_longer_autocommit.

Messages d'erreur

Chaque appel à l'API ODBC retourne aussi un code de succès ; s'il y a une erreur, plus d'informations peut être obtenue en faisant des appels à SQLGetDiagRec. Dans un souci d'exhaustivité : les enregistrements de diagnostic sont également disponibles lorsqu'un appel d'API renvoie SQL_SUCCES_WITH_INFO .

TODBCConnection vérifie le code de retour de chaque appel ODBC et construit une EODBCException. Le message de cette exception consiste en :

  • un message identifiant ce que le TODBCConnectionfaisait quand l'erreur s'est produite.
  • Le code de retour de l'appel à l'API ODBC (p.ex. SQL_ERROR)
  • un nombre d'enregistrements de diagnostic (obtenus en utilisant SQLGetDiagRec) ; chaque enregistrement consiste en trois champs :
    • un code d'erreur sur 5 caractères identifiant l'erreur
    • Un "code d'erreur natif"
    • un message décrivant l'erreur

Erreur de fonction séquence

Si vous obtenez une 'Function sequence error' dans la section 'finalization' de l'unité ODBCConn, il s'agit probablement que vous n'avez pas nettoyer correctement toutes vos requêtes et vos connexions.

Le Rollback ne fonctionne pas

Si vous émettez des instructions

TSQLTransaction.Rollback

mais que votre SQL est validé malgré tout, votre connexion est probablement en mode AUTOCOMMIT ; voyez les remarques sur le paramètre de connexion AUTOCOMMIT pour savoir comment corriger ceci.

Tracage

Most ODBC managers have a tracing option in which all ODBC API calls are logged to a trace log. This can be very useful for debugging an ODBC application. The ODBC Data Source Administration GUI of both Windows and unixODBC have a tab where you can configure the tracing option.

Of course the trace log is mainly useful for developers that are familiar with the ODBC API, but it can help to identify the problem. Also, you can attach a trace log if you report a problem to the bug tracker.

Voir aussi

  • MS Access Utilisation de ODBC pour accéder aux bases de données Microsoft Access.