📱

Tournez votre téléphone

Tournez votre appareil pour une meilleure expérience.

SQL dans Delphi

Article publié le Lundi 20 octobre 2025 , lu 16 fois

Illustration : SQL dans Delphi

Introduction

Delphi (Embarcadero) combine l’IDE RAD et le langage Object Pascal pour construire des applications natives. Pour l’accès aux données relationnelles, Delphi fournit FireDAC, une couche d’accès universelle et performante qui supporte SQLite, MySQL, PostgreSQL, SQL Server, Oracle, etc.

Rôle du SQL dans Delphi

Le SQL est utilisé pour :

Dans Delphi, on exécute ces instructions via les composants FireDAC et on peut lier facilement les résultats à des contrôles visuels (DBGrid, DBEdit, TChart...).

Composants FireDAC essentiels

ComposantRôle
TFDConnectionGère la connexion (driver, params, connexion/déconnexion).
TFDQueryExécute du SQL (SELECT / ExecSQL) et retourne des jeux de résultats.
TDataSourceRelie un TDataSet (TFDQuery) à des composants visuels.
TFDTableAccès direct à une table (CRUD simple).

Connexion basique (ex. SQLite)

// Configuration minimale
FDConnection1.DriverName := 'SQLite';
FDConnection1.Params.Database := 'C:\Data\app.db';
FDConnection1.LoginPrompt := False;
FDConnection1.Connected := True;
Pascal

Remarque : FireDAC peut créer un fichier SQLite si le chemin est un fichier .db inexistant.

Requêtes : SELECT, INSERT, UPDATE, DELETE

SELECT (lecture)

FDQuery1.SQL.Text := 'SELECT * FROM transactions WHERE category = :cat';
FDQuery1.ParamByName('cat').AsString := 'Alimentation';
FDQuery1.Open; // retourne un jeu de résultats
Pascal

INSERT (écriture)

FDQuery1.SQL.Text :=
'INSERT INTO transactions (date_op, category, description, amount) ' +
	'VALUES (:date_op, :category, :description, :amount)';
		FDQuery1.ParamByName('date_op').AsString := '2025-11-07';
		FDQuery1.ParamByName('category').AsString := 'Transport';
		FDQuery1.ParamByName('description').AsString := 'Essence';
		FDQuery1.ParamByName('amount').AsFloat := -65.5;
		FDQuery1.ExecSQL;
Pascal

UPDATE

FDQuery1.SQL.Text := 'UPDATE transactions SET category = :newCat WHERE id = :id';
FDQuery1.ParamByName('newCat').AsString := 'Divers';
FDQuery1.ParamByName('id').AsInteger := 5;
FDQuery1.ExecSQL;
Pascal

DELETE

FDQuery1.SQL.Text := 'DELETE FROM transactions WHERE id = :id';
FDQuery1.ParamByName('id').AsInteger := 5;
FDQuery1.ExecSQL;
Pascal

Transactions SQL

Pour garantir la cohérence sur plusieurs opérations :

FDConnection1.StartTransaction;
try
FDQuery1.ExecSQL('UPDATE comptes SET solde = solde - 100 WHERE id = 1');
FDQuery1.ExecSQL('UPDATE comptes SET solde = solde + 100 WHERE id = 2');
FDConnection1.Commit;
except
	FDConnection1.Rollback;
	raise;
end;
Pascal

Paramétrage et sécurité

Utilise systématiquement des requêtes paramétrées (:nomParam) pour :

Bonnes pratiques

  1. Utiliser des transactions pour les opérations multiples.
  2. Fermer les jeux de résultats (Close) quand ils ne sont plus nécessaires.
  3. Utiliser des index sur les colonnes filtrées fréquemment (WHERE, JOIN).
  4. Paginer les requêtes lourdes (LIMIT / OFFSET ou techniques spécifiques au SGBD).
  5. Loguer les erreurs et exceptions SQL côté serveur ou application.

Cas d’usage

Delphi + SQL est adapté pour :

Exemple complet : création et insertion (SQLite)

procedure TDataModule.InitDatabase;
begin
FDConnection1.DriverName := 'SQLite';
FDConnection1.Params.Database := 'budget.db';
FDConnection1.LoginPrompt := False;
FDConnection1.Connected := True;

FDConnection1.ExecSQL(
	'CREATE TABLE IF NOT EXISTS transactions (' +
		'id INTEGER PRIMARY KEY AUTOINCREMENT, ' +
		'date_op TEXT, category TEXT, description TEXT, amount REAL)'
);

FDQuery1.SQL.Text :=
'INSERT INTO transactions (date_op, category, description, amount) VALUES (:d,:c,:desc,:a)';
FDQuery1.Params.ParamByName('d').AsString := '2025-11-07';
FDQuery1.Params.ParamByName('c').AsString := 'Salaire';
FDQuery1.Params.ParamByName('desc').AsString := 'Salaire novembre';
FDQuery1.Params.ParamByName('a').AsFloat := 2500;
FDQuery1.ExecSQL;
end;
Pascal

Résumé

FireDAC rend l’usage du SQL dans Delphi simple, portable et performant. Que tu travailles avec un fichier SQLite local ou avec une base distante (PostgreSQL, MySQL, SQL Server), la logique d’accès reste la même : configurer la connexion, préparer des requêtes paramétrées, utiliser des transactions et lier les résultats aux composants visuels.