ODBC Component Documentation

Le composant Gambas ODBC utilise l’API fournie par le pilote manager unixODBC ; avoir unixODBC installé et opérationnel est un prérequis à l’utilisation des fonctions ODBC dans une application Gambas. Le composant ODBC Gambas s’appuie sur la configuration faite dans le unixODBC pilote manager, aussi, avant de se connecter a une base de données vous devez configurer le pilote de base de données et la source de donnée selon la base de données avec laquelle vous voulez vous connecter. La configuration est faite via la GUI du pilote manager unixODBC ou en éditant le fichier odbc.ini avec un éditeur de texte. Vous trouverez des exemples des deux méthodes de configuration plus avant dans ce document.

Habituellement les distributions Linux n’installent pas le paquetage unixODBC lors de la procédure standard d’installation, vous devez le chercher dans la liste d’applications puis l’installer manuellement. Par exemple dans la distribution OpenSuse le paquetage unixODBC est divisé en deux parties, le paquetage basique unixODBC qui fournit toutes les librairies et les fonctionnalités basiques (mais ca ne fournit pas la partie GUI), et le paquetage qui contient la partie GUI (il vous faut rechercher et installer la partie GUI comme un paquetage séparé). Si vous préférez compiler le paquetage unixODBC vous-même vous pouvez télécharger le code source depuis le site web unixODBC http://www.unixodbc.org et suivre les instructions de compilation et d’installation qui accompagnent le paquetage.

Pour activer le composant Gambas ODBC, vous devez compiler Gambas après l’installation du paquetage unixODBC. Si vous avez compilé Gambas avant l’installation du paquetage unixODBC, vous devrez le recompiler à nouveau. A la fin de la compilation vous verrez tous les modules qui sont configurés et activés dans l’environnement Gambas, si tout marche bien le composant ODBC doit être activé et installé.

Configuration unixODBC

Après l’installation d’unixODBC il vous faut ajouter, dans le gestionnaire de données, un pilote pour chaque base de données à laquelle vous voulez vous connecter. Certaines procédures d’installation de pilote ajoutent le pilote dans la configuration unixODBC automatiquement, d’autres non, vous devez les ajouter manuellement. Dans l’image suivante vous verrez le GUI ODBCConfig qui montre, dans l’onglet Pilotes, deux différents pilotes, l’un est employé pour se connecter avec le système i DB2 et l’autre pour se connecter a la base de données MySQL.

The unixODBC Configuration Gui

Vous pouvez utiliser le bouton Add pour ajouter un nouveau pilote pour une base de données spécifique. Dans le panneau de configuration vous devez spécifier le nom du pilote, la description et le chemin pour, à la fois, la librairie partagée du pilote et la librairie partagée de configuration DSN du pilote. La première librairie partagée est utilisée pour se connecter à la base de données, la deuxième est utilisée lors de la configuration de nom de la source de données (DSN = data source name). Dans l’image suivante vous pouvez voir le pilote ODBC pour la configuration Système i DB2.

Driver Properties

Une fois configuré le pilote que vous voulez utiliser, vous devez ajouter une Source de Données. Dans l’onglet " Data Source " vous devez spécifier tous les paramètres nécessaires pour se connecter à la base de données, tous les paramètres sont spécifiques à la base de données et beaucoup varient d’une base à l’autre. L’image suivante montre l’onglet DSN avec deux sources de données configurées.

Donnée Sources
Comme vous pouvez le voir dans les deux images qui suivent les configurations de deux DSN sont différentes car les paramètres nécessaires sont spécifiques à la base de données, le premier concerne une base de données MySQL (qui tourne en local), la deuxième concerne le Système i DB2 tournant sur un serveur distant.

DSN pour MySQL DSN pour System i DB2

Vous devez avoir un pilote de base de données configuré pour chaque type de base de données et une source de donnée pour chaque base de données que vous voulez utiliser. Par exemple, si vous avez deux MySQL DB tournant l’une sur un système distant A et l’autre sur le système distant B, vous n’aurez qu’un pilote de base de données configuré (MySQL driver) mais deux sources de données différentes : une source de données décrira la connexion (et tous les paramètres relatifs) au système A, et une source de données décrira la connexion (et tous les paramètres relatifs) au système B.

Exemples de Configuration unixODBC

Exemple de odbcinst.ini situé dans le répertoire /etc. Ce fichier contient tous les pilotes de configuration et les options configuration du Pilote Manager.

Exemples

odbcinst.ini


[iSeries Access ODBC Driver]
Description		= iSeries Access pour Linux ODBC Driver
Driver			= /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup			= /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
NOTE1			= If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2			= the following Driver64/Setup64 keywords will provide that support.
Driver64		= /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup64		        = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading		= 2
DontDLClose		= 1
UsageCount		= 1

[MySQL]
Description		=
Driver			= /usr/lib/odbc/libmyodbc.so
Driver64		= /usr/lib
Setup			= /usr/lib/odbc/libodbcdrvcfg1S.so
Setup64		        = /usr/lib
UsageCount		= 1
CPTimeout		=
CPReuse		        =

[ODBC]
Trace			= No
TraceFile		= /tmp/sql.log
ForceTrace		= No
Pooling			= No

[Firebird]
Description		=
Driver			= /usr/lib/firebird/libOdbcFb32.so
Driver64		= /usr/lib/firebird/libOdbcFb32.so
Setup			= /usr/lib/firebird/libOdbcFb32.so
Setup64		        = /usr/lib/firebird/libOdbcFb32.so
UsageCount		= 1
CPTimeout		=
CPReuse		        =

odbc.ini

Système wide odbc.ini situé dans le répertoire /etc

Exemples

odbc.ini

[MySQL_DB_test]
Description			= MySQL
Driver				= MySQL
Host				= localhost
Database			= TestDB
Port				=

[Numeric_DB]
Description			= Firebird
Driver				= firebird
Dbname			        = localhost:
Client				=
User				= User_ID
Password			= Password
Role				=
CharacterSet			= NONE
ReadOnly			= No
NoWait				= No
Dialect				= 3
QuotedIdentifier		= Yes
SensitiveIdentifier		= No
AutoQuotedIdentifier		= No
UseSchemaIdentifier		= 0 - Set null field SCHEMA
LockTimeoutWaitTransactions	= 0
SafeThread			= Yes

.odbc.ini

Configuration utilisateur ODBC situé dans le répertoire home de l’utilisateur .odbc.ini

Exemples

.odbc.ini

[System_i]
Description		= iSeries Access ODBC Driver
Driver			= iSeries Access ODBC Driver
System			= 9.71.196.44
UserID			=
Password		=
Naming			= 0
DefaultLibraries        = QGPL,qiws
Database		=
ConnectionType	        = 0
CommitMode		= 2
ExtendedDynamic   	= 1
DefaultPkgLibrary	= QGPL
DefaultPackage		= A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression	= 1
MaxFieldLength	        = 32
BlockFetch		= 1
BlockSizeKB		= 128
ExtendedColInfo	        = 0
LibraryView		= 0
AllowUnsupportedChar	= 0
ForceTranslation	= 0
Trace			= 0

[mySQL_test]
Description		= MySQL
Driver			= MySQL
Host			= localhost
Database		= BlobDB
Port			=

[NumericFB]
Description			= fbtest
Driver				= firebird
Dbname			        = localhost:/home/bortolan/fbtest/fbtest.fbd
Client				=
User				= bortolan
Password			= Password
Role				=
CharacterSet			= NONE
ReadOnly			= No
NoWait				= No
Dialect				= 3
QuotedIdentifier		= Yes
SensitiveIdentifier		= No
AutoQuotedIdentifier		= No
UseSchemaIdentifier		= 0 - Set null field SCHEMA
LockTimeoutWaitTransactions	= 0
SafeThread			= Yes

Exemple Gambas

Gambas contient quantité d’exemples d’applications, l’exemple base de données peut être utilisé pour se connecter à une base de données utilisant également un pilote ODBC. Il vous faut d’abord configurer un DSN dans le Pilote Manager. Choisissez l’exemple application de Base de données, lancez l’application et remplissez les champs requis pour vous connecter à la base de données.

Gambas

Sélectionnez le type de la base de données dans la liste, choisissez odbc, dans le nom d’hôte insérez le DSN configuré dans le pilote manager unixODBC. Le champ base de données n’est pas utilisé pour la connexion ODBC. Fournissez le nom de l’utilisateur et le mot de passe nécessaires à se connecter à la base de données. Vous êtes prêt à vous connecter !

Exemple d’application Base de données
Après la connexion vous pouvez lancer n’importes quelle commande SQL.

Exemple Blob

Dans ce qui suit, je vais commenter un exemple de programme que j’ai que j’ai utilisé pour insérer des fichiers image dans le champ Blob

' Fichier classe \Gambas

PRIVATE $hConn AS Connection

PUBLIC SUB Form_Open()
 $hConn = NEW Connection
END

Le bouton Connect lance cette fonction:
PUBLIC SUB btConnect_Click()

  WITH $hConn
    .Type = "odbc"			<<< Le type de base de données ODBC
    .Host = tbDatasource.Text		<<< Text Box avec les noms des  données source
    .Login = tbUser.Text		<<< Nom d’utilisateur employé pour la connexion
    .Password = tbPassword.Text	<<< Mot de passe utilisateur
    .Name = ""				<<< N’est pas utilisé dans la connexion ODBC
  END WITH

  $hConn.Open
  IF ($hConn.Opened = FALSE) THEN
	Message.Error("Erreur à l’ouverture de connexion")
	PRINT $hconn.Error
  ELSE

    ...

  ENDIF

END
Cette fonction est appelée par un bouton. Elle montre une boîte de dialog pour sélection de fichier puis insère dans le champ blob de la table le contenu du fichier
PUBLIC SUB select_and_insert_into_blob_field_a_file()

  DIM hFile AS File
  DIM sLine AS String
  DIM outs AS blob
  DIM path AS String
  DIM hResult AS Result

  Dialog.Filter = ["*", "All Files"]
  Dialog.Title = "Choisissez le fichier à insérer dans le champ BLOB "

  IF Dialog.OpenFile() THEN RETURN
  path = Dialog.path
  sLine = File.Load(Dialog.Path)

  IF NOT $hConn.Opened THEN $hConn.Open

  hResult = DB.Create("table")	' nom de la table
  hResult!blob = sLine		' blob est le nom du champ BLOB dans la table
  hResult!filename = path       ' filename  est un champ string dans la table
  hResult.Update

  $hConn.Commit
  $hConn.Close
...

END