Introduction▲
Nous allons voir comment se connecter à des bases de données en utilisant les composants installés par défaut avec Lazarus.
Dans la palette de composant se trouve l'onglet SqlDb :
De gauche à droite, vous trouvez :
- TSQLQuery : Composant contenant les requêtes SQL à exécuter
- TSQLTransaction : Composant offrant la possibilité de déclarer une transaction (pas encore opérationnel à 100%)
- TSQLScript : Composant permettant d'exécuter directement des scripts SQL
- TSQLConnector : Composant permettant de rendre une application indépendante de la base de données
- TPQConnection : Composant de connexion à PostGreSql
- TOracleConnection : Composant de connexion à Oracle
- TODBCConnection : Composant de connexion via un driver ODBC
- TSQLite3Connection : Composant de connexion à Sqlite 3
- TMySQL50Connection : Composant de connexion à Mysql 5
- TIBConnection : Composant de connexion à Interbase
Nous allons utiliser une connexion à Oracle pour notre exemple, mais le principe est exactement le même pour les autres accès.
J'expliquerai au fur et à mesure les différences entre les modes d'accès.
Utilisation d'Oracle via la SQLdb▲
Dans Lazarus :
- ouvrez un nouveau projet Application ;
- sur la Form, déposez un objet TOracleConnection, TSQLTransaction, TSQLQuery, TDatasource et enfin TDBGrid.
Cela devrait donc ressembler a l'exemple ci-dessus.
Maintenant, nous allons configurer TOracleConnection.
Saisissez dans l'ordre suivant :
- DatabaseName = Nom de la base de données à laquelle on souhaite accéder. XE dans notre cas (voir le tutoriel Oracle). Dans notre cas il s'agit du TnsName.ora
- HostName = Adresse du serveur (Adresse IP ou nom logique) (127.0.0.1 ou localhost par exemple)
- UserName = Nom du compte utilisateur
- Password = Mot de passe défini pour ce compte utilisateur
Maintenant, nous allons configurer TSQLTransaction.
Saisissez :
- Database := OracleConnection1.
À présent, nous allons configurer TSQLQuery.
Saisissez dans l'ordre suivant :
- Database := OracleConnection1
- SQL := Select * From TableTest
- Transaction := SqlTransaction1
- Active := True
Maintenant, nous allons configurer TDatasource.
- Dataset := SqlQuery1.
C'est au tour de TDBGrid.
- DataSource:= DataSource1.
Mettez la propriété du TsqlQuery.active à true et votre DbGrid devrait se remplir comme ci-dessus.
Lancez votre code et on voit bien les enregistrements que nous avons saisis dans notre table lors de sa création.
Notes▲
Pour saisir directement dans la grille et enregistrer les données, il faut appeler la fonction applyUpdate du composant TSQLQuery. L'idéal étant de le faire automatiquement dans l'événement After Post du TSQLQuery.
Pour les requêtes de type Select, Show, Pragma, etc., il faut utiliser la procédure OPEN du TsqlQuery.
Pour les requêtes de type Create, Alter, Delete, Update, Insert, Exec, etc., il faut utiliser la procédure EXEC du TsqlQuery.
Il est préférable de créer un compte utilisateur propre à l'application qui doit se connecter. En effet, certains SGBD ne tolèrent pas un accès distant en mode administrateur (root dans le cas de MySql).
Pensez à configurer le serveur pour qu'il accepte les connexions distantes.
Vérifier les autorisations du firewall.
Voir aussi▲
Exemple▲
with
SQLQuery1 do
begin
//Sélection de données
SQL.Clear;
SQL.Add('select * from matable'
);
Open;
//Insertion, Modification, Suppression de données
SQL.Clear;
SQL.Add('insert into matable.......'
);
OU
SQL.Add('update matable set .......'
);
OU
SQL.Add('delete from matable where.......'
);
ExecSQL;
ApplyUpdates;
end
;
Requêtes paramétrées
Exemple : dans une table on a un champ 'NOM' de type Text et un champ de type datetime :
with
SQLQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * from matable where nom = :nom and date_creation = :date_creation'
);
Params.ParamByName('nom'
).asString := 'mavaleur'
;
Params.ParamByName('date_creation'
).AsDate := now;
Open;
end
;
Le texte précédé des ':' est un paramètre (:valeur et :date_creation).
Cela permet de ne pas avoir à réécrire la requête à chaque fois si on l'utilise plusieurs fois.
Exemple : pour une utilisation à un autre endroit, écrivez le code suivant pour rechercher une autre valeur avec la même date :
with
SQLQuery1 do
begin
Close;
Params.ParamByName('nom'
).asString := 'autrevaleur'
;
Open;
end
;