Sign in Join
Wiki copytemporary

ODBCConn/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11L'unité **ODBCConn** implémente une connexion SQLdb pour ouvrir des sources de données Open Database Connectivity (ODBC).
22
33## Vue d'ensemble
44
55### ODBC
66
77ODBC (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.
88
99Il 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 \[<http://msdn.microsoft.com/en-us/library/ms710252(VS.85>).aspx site ODBC de MSDN\].
1010
1111### TODBCConnection
1212
1313FreePascal est livré avec des en-têtes ODBC; Ils se trouvent dans les unités `odbcsql` et `odbcsqldyn`.
1414
1515[[TODBCConnection]] est un descendant de [[TSQLConnection/fr|TSQLConnection]] fournissant une enveloppe POO sympa pour ODBC en utilisant le framework SQLdb.
1616
1717Dans 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.
1818
19-<figure>
20-<img src="sqldbcomponents.png" title="sqldbcomponents.png" />
21-<figcaption>sqldbcomponents.png</figcaption>
22-</figure>
19+![](/wiki-images/c/cc/Sqldbcomponents.png)
2320
2421Ce qui a été implémenté :
2522
2623- Exécution des requêtes et récupération des ensembles résultats.
2724- la plupart des types de champ, y compris les BLOB.
2825- Les paramètres de requêtes (types string et integer).
2926- La préparation des requêtes.
3027- UpdateIndexDefs (vous pouvez aussi utiliser ApplyUpdates).
3128
3229Ce qui reste à implémenter :
3330
3431- Support approprié aux transactions; Actuellement, chaque connexion correspond à une transaction.
3532- Quelques types de champ :
3633 - SQL_TYPE_UTC* (ceux-ci sont mentionnés dans les doc ODBC, mais en semble pas utilisées dans les implémentions).
3734 - SQL_INTERVAL_* (quel pourrait être le TFieldType correspondant ?)
3835 - SQL_GUID (TGUIDField n'était pas implémenté, jusqu'à récemment).
3936
4037### Pourquoi utiliser ODBC?
4138
4239Free 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.
4340
4441Pour les bases de données manquantes à la liste, comme [[MS Access/fr|MS Access]] et peut-être Microsoft SQL Server, Microsoft SQL Server, EDBC est une solution acceptable et bien établie.
4542
4643(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)
4744
4845Le 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](http://www.mysql.com/company/legal/licensing/foss-exception.html).
4946
5047## Installation d'ODBC des des pilotes ODBC
5148
5249Avant de pouvoir vous connecter à votre base de données en utilisant ODBC, vous avez besoin d'installer :
5350
5451- un gestionnaire de pilotes ODBC
5552- un ilote spécifique au SGBD auquel vous voulez vous connecter.
5653
5754Cette 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.
5855
5956### Le gestionnaire de pilotes ODBC
6057
6158#### Windows
6259
6360windows 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*").
6461
6562Vous pouvez, bien sûr, créer un raccourci de bureau vers la boîte de dialogue si vous pensez l'utiliser régulièrement.
6663
67-<figure>
68-<img src="WinXPODBCDataSourceAdministratorDrivers.png" title="WinXPODBCDataSourceAdministratorDrivers.png" />
69-<figcaption>WinXPODBCDataSourceAdministratorDrivers.png</figcaption>
70-</figure>
64+![](/wiki-images/3/39/WinXPODBCDataSourceAdministratorDrivers.png)
7165
7266#### Unix-s
7367
7468Deux gestionnaires de pilotes ODBC populaires dans les paltes-formes sont [unixODBC](http://www.unixodbc.org) et [iODBC](http://www.iodbc.org). `ODBCConn` est connu pour fonctionner avec unixODBC ; La compatibilité iODBC doit encore être testée.
7569
7670##### Debian
7771
7872Pour Debian, vous pouvez installer le paquet *unixodbc* :1
7973
8074``` bash
8175aptitude install unixodbc
8276aptitude install unixodbc-bin # if you want some GUI tools
8377```
8478
8579L'unité `odbcsqldyn` et par conséquent `odbcconn`, vont chercher un fichier appelé `libodbc.so`.
8680
8781Elle 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 :
8882
8983- créer le lien vous-même : `ln -s libodbc.so.1 /usr/lib/libodbc.so`, ou
9084- installer le paquet *unixodbc-dev*, qui crée le lien symbolique.
9185
9286Si vous avez installé le paquet *unixodbc-bin*, vous pouvez exécuter le programme `ODBCConfig` pour configurer les pilotes ODBC et les DSNs.
9387
94-<figure>
95-<img src="ODBCDataSourceAdministratorAbout.PNG" title="ODBCDataSourceAdministratorAbout.PNG" />
96-<figcaption>ODBCDataSourceAdministratorAbout.PNG</figcaption>
97-</figure>
88+![](/wiki-images/b/bf/ODBCDataSourceAdministratorAbout.PNG)
9889
9990##### Ubuntu
10091
10192Pour 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.
10293
10394### Pilotes ODBC
10495
10596Vous pouvez télécharger les derniers pilotes ODBC avec les liens suivants :
10697
10798[Télécharger le pilote ODBC 32/64-bit pour SQL Server](https://www.devart.com/odbc/sqlserver/download.html) - 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.
10899
109100[Télécharger le pilote ODBC 32/64-bit pour Oracle](https://www.devart.com/odbc/oracle/download.html) - 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.
110101
111102[Télécharger le pilote ODBC 32/64 bit pour MySQL](https://www.devart.com/odbc/mysql/download.html) - 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.
112103
113104[Télécharger le pilote ODBC 32/64 bit pour PostgreSQL](https://www.devart.com/odbc/postgresql/download.html) - 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.
114105
115106[Télécharger le pilote ODBC 32/64-bit pour SQLite](https://www.devart.com/odbc/postgresql/download.html) - 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.
116107
117108[Télécharger le pilote ODBC 32/64-bit pour Firebird](https://www.devart.com/odbc/firebird/download.html) - 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.
118109
119110[Télécharger le pilote ODBC 32/64-bit pour Interbase](https://www.devart.com/odbc/interbase/download.html) - 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.
120111
121112[Télécharger le pilote ODBC 32/64-bit pour SQL Azure](https://www.devart.com/odbc/sqlazure/download.html) - 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.
122113
123114## Connexion à une source de données ODBC
124115
125116Les 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`).
126117
127118Avant 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.
128119
129120### Connexions ODBC via DSN
130121
131122Un gestionnaire de pilote ODBC fournit une manière alternative pour créer des raccourcis de DSN pour un jeu de paramètres :
132123
133124- 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 `odbc.ini` (ou le registre)
134125- 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.
135126
136127Les 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.
137128
138129En 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.
139130
140131Un 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.
141132
142133### Sans DSN
143134
144135Vous 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.
145136
146137La spécification ODBC définit quelques paramètres qui peuvent être utilisés dans une chaîne de connexion :
147138
148139- 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.
149140- Le `DRIVER` spécifie quel pilote ODBC utiliser. Évidement, c'est un paramètre très important.
150141- Les paramètres `UID` et `PWD` sont utilisés pour fournir un nom d'utilisateur et son mot de passe.
151142
152143Tous 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.
153144
154145### Propriétés TODBCConnection
155146
156147La table suivante décrit la correspondance entre les propriétés de `TODBCConnection` et les paramètres de chaîne de connexion ODBC :
157148
158-<table>
159-<thead>
160-<tr>
161-<th><p>Propriété</p></th>
162-<th><p>Type</p></th>
163-<th><p>Paramètre de chaîne de connexion</p></th>
164-</tr>
165-</thead>
166-<tbody>
167-<tr>
168-<td><p><code>Driver</code></p></td>
169-<td><p><code>string</code></p></td>
170-<td><p><code>DRIVER</code></p></td>
171-</tr>
172-<tr>
173-<td><p><code>DatabaseName</code></p></td>
174-<td><p><code>string</code></p></td>
175-<td><p><code>DSN</code>, et <em>non</em> pas quelque chose comme <code>DATABASENAME</code>, qui ne fait pas partie de la norme ODBC.</p></td>
176-</tr>
177-<tr>
178-<td><p><code>FileDSN</code></p></td>
179-<td><p><code>string</code></p></td>
180-<td><p><code>FILEDSN</code></p></td>
181-</tr>
182-<tr>
183-<td><p><code>Password</code></p></td>
184-<td><p><code>string</code></p></td>
185-<td><p><code>PWD</code></p></td>
186-</tr>
187-<tr>
188-<td><p><code>UserName</code></p></td>
189-<td><p><code>string</code></p></td>
190-<td><p><code>UID</code></p></td>
191-</tr>
192-<tr>
193-<td><p><code>HostName</code></p></td>
194-<td><p><code>string</code></p></td>
195-<td><p><em>none</em> ; Pas de paramètre correspondant dans la norme ODBC.</p></td>
196-</tr>
197-<tr>
198-<td><p><code>Params</code></p></td>
199-<td><p><code>TStrings</code></p></td>
200-<td><p>Utilisez ceci pour spécifier des paramètres personnalisés. Chaque article doit être de la forme <code>NAME=VALUE</code>.</p>
201-<p>Un paramètre important qui peut être utilisé est <strong><code>AUTOCOMMIT</code></strong> 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>)</p></td>
202-</tr>
203-</tbody>
204-</table>
149+**Propriété**
205150
151+**Type**
152+
153+**Paramètre de chaîne de connexion**
154+
155+`Driver`
156+
157+`string`
158+
159+`DRIVER`
160+
161+`DatabaseName`
162+
163+`string`
164+
165+`DSN`, et *non* pas quelque chose comme `DATABASENAME`, qui ne fait pas partie de la norme ODBC.
166+
167+`FileDSN`
168+
169+`string`
170+
171+`FILEDSN`
172+
173+`Password`
174+
175+`string`
176+
177+`PWD`
178+
179+`UserName`
180+
181+`string`
182+
183+`UID`
184+
185+`HostName`
186+
187+`string`
188+
189+*none* ; Pas de paramètre correspondant dans la norme ODBC.
190+
191+`Params`
192+
193+`TStrings`
194+
195+Utilisez ceci pour spécifier des paramètres personnalisés. Chaque article doit être de la forme `NAME=VALUE`.
196+
197+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`)
198+
206199Remarquez que `TODBCConnection` prendra soin d'échapper les valeurs de paramètres au besoin.
207200
208201La 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`.
209202
210203## Exemples
211204
212205Dans cette section, des exemples sont donnés pour se connecter à certains SGBD en utilisant leur pilote ODBC spécifique.
213206
214207### Connexion à Excel
215208
216209Ne fonctionne sans doute que sur Windows.
217210
218211Pour é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 ;
219212
220213... vous devrez activer l'autocommit, quelque chose comme
221214
222215``` pascal
223216ODBCConnection1.Params.Add('AUTOCOMMIT=1');
224217```
225218
226219### Connexion à MySQL
227220
228221Pour une référence sur les paramètres pris en charge par le pilote MyODBC, voyez [1](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html).
229222
230223De plus, vous pouvez contrôler ce guide de [mysql connexion ODBC](https://www.devart.com/odbc/mysql/docs/using_odbc_driver.htm). Il donne une explication détaillée sur la manière de se connecter à MySQL en utilisant ODBC.
231224
232225Le nom du pilote diffère un peu selon la plate-forme et la version de MyODBC ; des exemples :
233226
234227``` pascal
235228 { properties of connection object, i.e. conn: TODBCConnection; }
236229 conn.Driver := 'MySQL'; // (Unix)
237230 conn.Driver := 'MySQL ODBC 3.51 Driver'; // (Windows)
238231 conn.Driver := 'MySQL Connector/ODBC v5'; // (Windows)
239232 // note: driver name doesn't need {} like it does in SQL Connection Strings elsewhere
240233```
241234
242235D'autres paramètres (en n'utilisant pas un DSN) :
243236
244237``` pascal
245238 conn.UserName := 'myUsername';
246239 conn.Password := 'myPassword';
247240 // conn.Params (TStrings) set using .add method :
248241 conn.Params.Add('server=example.com');
249242 conn.Params.Add('port=3306');
250243 conn.Params.Add('database=myDatabase');
251244 conn.Params.Add('charset=utf8');
252245```
253246
254247### Connexion à MS Access
255248
256249Veuillez voir [[MS Access/fr|MS Access]].
257250
258251### Connexion à Microsoft SQL Server
259252
260253> **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|MSSQL]]
261254
262255Utilisez ces exemples de [connexion au pilote ODBC de MS SQL](https://www.devart.com/odbc/sqlserver/docs/using_odbc_driver.htm) qui contiennent une tutoriel pas à pas et des chaînes des connexion.
263256
264257Voir <http://www.connectionstrings.com/sql-server#p7> pour plus de détails sur les chaînes de connexion.
265258
266259Exemple de chaîne de connexion ODBC pour Microsoft SQL Server :
267260
268261``` pascal
269262Server=<server name>; // or <server name>\<instance name>
270263Database=<database name>;
271264```
272265
273266### Connexion à Oracle
274267
275268Utilisez ce guide de [connexion ODBC à Oracle](https://www.devart.com/odbc/oracle/docs/using_odbc_driver.htm) pour réaliser facilement et sans souffrance une connexion à Oracle.
276269
277270Exemple de chaîne de connexion à Oracle :
278271
279272``` pascal
280273Login Prompt=False;
281274Data Source=ORCL;
282275User ID=scott;
283276Password=tiger
284277```
285278
286279### Connexion à PosgreSQL
287280
288281Utilisez ce [postgresql guide de connexion ODBC à Postgresql](https://www.devart.com/odbc/postgresql/docs/using_odbc_driver.htm) pour réaliser facilement et sans souffrance une connexion à PostgreSQL.
289282
290283Exemple de chaîne de connexion à PostgreSQL :
291284
292285``` pascal
293286Login Prompt=False;
294287Data Source=localhost;
295288User ID=postgres;
296289Password=postgres;
297290Database=postgres;
298291Schema=public
299292```
300293
301294### Connexion à SQLite
302295
303296Utilisez ce guide de [connexion ODBC à SQLite](https://www.devart.com/odbc/sqlite/docs/using_odbc_driver.htm) pour réaliser facilement et sans souffrance une connexion à une base de données SQLite.
304297
305298Exemple de chaîne de connexion à SQLite :
306299
307300``` pascal
308301Login Prompt=False;
309302Database=c:\test.db3
310303```
311304
312305### Connexion à Firebird
313306
314307Utilisez ce guide de [connexion ODBC à Firebird](https://www.devart.com/odbc/firebird/docs/using_odbc_driver.htm) pour réaliser facilement et sans souffrance une connexion à une base de données Firebird.
315308
316309Exemple de chaîne de connexion à Firebird :
317310
318311``` pascal
319312Data Source=127.0.0.1;
320313User ID=sysdba;
321314Password=masterkey;
322315Client Library=fbclient.dll;
323316Database=c:\fbd.fdb
324317```
325318
326319### DSN nommé
327320
328321Sur Windows, vous pouvez utiliser quelque chose comme ceci avec un DSN nommé existant :
329322
330323``` pascal
331324 { properties of connection object, i.e. conn: TODBCConnection; }
332325 conn.DatabaseName := '<Your_DSN_Name>';
333326 { Leave all other conn. properties empty }
334327```
335328
336329### Sans DSN
337330
338331Ceci devient :
339332
340333``` pascal
341334 { properties of connection object, i.e. conn: TODBCConnection; }
342335 conn.Driver := 'SQL Server';
343336 // note: driver name doesn't need {} like it does in SQL Connection Strings elsewhere
344337 { Leave Hostname and DatabaseName properties empty }
345338 { set conn.Params (TStrings) : }
346339 conn.Params.Add('Database=<yourdatabasename>');
347340 conn.Params.Add('Server=.\SQLEXPRESS');
348341 conn.Params.Add('Trusted_Connection=Yes'); // or 'Integrated Security=SSPI'
349342```
350343
351344Note : 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.
352345
353346Utiliser 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=...).
354347
355348### Exemple DSN
356349
357350L'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.
358351
359352``` pascal
360353// uses ODBCConn, sqldb;
361354procedure TForm1.Button1Click(Sender: TObject);
362355var
363356 S: String;
364357 conn : TODBCConnection; // uses ODBCConn
365358 query: TSQLQuery; // uses sqldb
366359 transaction: TSQLTransaction; // uses sqldb
367360
368361begin
369362 conn := TODBCCOnnection.Create(nil);
370363 query := TSQLQuery.Create(nil);
371364 transaction := TSQLTransaction.Create(nil);
372365 try
373366 try
374367 conn.DatabaseName := 'sqlserverdsn'; {replace this with your DSN, if you use any}
375368 conn.UserName:= 'sa'; //replace with your user name
376369 conn.Password:= 'thepassword'; //replace with your password
377370 // You can override the properties defined in the DSN, e.g.
378371 //conn.Params.Add('Database=some_other_db');
379372
380373 conn.Transaction := transaction;
381374 query.DataBase := conn;
382375 { To avoid "could not retrieve primary key metadata":
383376 - either use query.UsePrimaryKeyAsKey:=false
384377 or (preferred)
385378 - query.PacketRecords to -1
386379 If you are using SQL Server, you could alternatively enable MARS in your SQL Native Client ODBC driver.
387380 See http://bugs.freepascal.org/view.php?id=13241 }
388381 query.PacketRecords:=-1; //retrieve all data at once
389382 query.SQL.Text := 'select journal_entry from journal_entries';
390383 query.Open;
391384 S := '';
392385 while not query.EOF do
393386 begin
394387 S := S + query.FieldByName('journal_entry').AsString + #13#10;
395388 query.Next;
396389 end;
397390 finally
398391 query.Free;
399392 conn.Free;
400393 transaction.Free;
401394 end;
402395 except
403396 on E: Exception do
404397 ShowMessage(E.message);
405398 end;
406399 Memo1.Text:= S;
407400end;
408401```
409402
410403En 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 :
411404
412405``` pascal
413406 conn.Params.Add('Driver=SQL Server');
414407 conn.Params.Add('Server=OURBIGSERVER');
415408 conn.Params.Add('Database=TestDataBase');
416409 conn.Params.Add('Integrated Security=SSPI'); // use Windows logon credentials
417410 // no other conn. properties set, apart from conn.Transaction := transaction;
418411
419412 query.DataBase := conn;
420413 query.SQL.Text := 'select @@version';
421414 query.Open;
422415 showmessage(query.Fields[0].AsString); // Fields are numbered starting from 0
423416```
424417
425418Les 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).
426419
427420Pour 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`.
428421
429422Les paramètres de procédure stockées fonctionnent, p.ex. '`EXEC MySP @param1=23`'.
430423
431424L'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' -
432425
433426``` pascal
434427 query.SQL.Text := 'select * from mytable where field2=:testval';
435428 query.Params.ParamByName('testval').AsString := '95';
436429 query.open;
437430```
438431
439432## Débogage d'ODBC & erreurs
440433
441434### Problèmes avec des transactions
442435
443436Dans 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.
444437
445438Pour une solution, voyez [[User Changes 2.6.4|User_Changes_2.6.4#TODBCConnection_.28odbcconn.29_No_longer_autocommit]].
446439
447440### Messages d'erreur
448441
449442Chaque 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`.
450443
451444`TODBCConnection` vérifie le code de retour de chaque appel ODBC et construit une `EODBCException`. Le `message` de cette exception consiste en :
452445
453446- un message identifiant ce que le `TODBCConnection`faisait quand l'erreur s'est produite.
454447- Le code de retour de l'appel à l'API ODBC (p.ex. `SQL_ERROR`)
455448- un nombre d'enregistrements de diagnostic (obtenus en utilisant `SQLGetDiagRec`) ; chaque enregistrement consiste en trois champs :
456449 - un code d'erreur sur 5 caractères identifiant l'erreur
457450 - Un "code d'erreur natif"
458451 - un message décrivant l'erreur
459452
460453#### Erreur de fonction séquence
461454
462455Si 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.
463456
464457#### Le Rollback ne fonctionne pas
465458
466459Si vous émettez des instructions
467460
468461``` pascal
469462TSQLTransaction.Rollback
470463```
471464
472465mais que votre SQL est validé malgré tout, votre connexion est probablement en mode AUTOCOMMIT ; voyez [[ODBCConn/fr|les remarques sur le paramètre de connexion AUTOCOMMIT]] pour savoir comment corriger ceci.
473466
474467### Tracage
475468
476469Most 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.
477470
478471Of 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.
479472
480473## Voir aussi
481474
482475- [[MS Access/fr|MS Access]] Utilisation de ODBC pour accéder aux bases de données Microsoft Access.
483-
484-\
485476
486477---
487478*From the Free Pascal wiki, page "ODBCConn/fr", as it stood on 2020-02-21 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history