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