Je vais tenter d'expliquer pourquoi je trouve les query plus pratiques à utiliser dans un projet orienté base de données.
Premièrement, qu'on se rassure pas besoin d'être un expert avec le SQL évidemment cela peut être un avantage et pas des moindres mais avec des requêtes très simples on peut s'en tirer aisément. Dans la majorité des projets que j'ai réalisé, 99% des requêtes étaient de l'odre du "select * from matable where quelquechose"
On va fixer en premier lieu les composants que l'on va utiliser. Supposons que l'on ne fait que du 2-tiers et que l'on désires travailler ADO. Tout naturellement on va utiliser le TADOQuery et certainement un voire plusieurs TADOConnexion.
Nous allons devoir maintenant choisir la façon d'utiliser ces composants.
- Soit utiliser les composants en les plaçant sur la fiche
- Soit les créer dynamiquement au runtime.
Là encore je privilégie la seconde solution qui reste de loin la plus économe pour les ressources qui seront allouées.
1. La chaîne de connection.
Il faut savoir la construire dynamiquement puisque nous créons nos composants à la volée. Pour cela je conseille une QR de la FAQ http://delphi.developpez.com/faq/?pa...nnexionruntime
Il est donc important de créer une classe qui va gérer toute l'intendance dès qu'il s'agit de la connexion. Ce sera bien plus pratique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| TPJconnexion = class(TObject)
private
FconnexionSTR: string;
procedure SetconnexionSTR(const Value: string);
...
public
property connexionSTR:string read FconnexionSTR write SetconnexionSTR;
...
end;
implementation
procedure TPJconnexion.SetconnexionSTR(const Value: string);
begin
FconnexionSTR := Value;
end; |
PJConnexion.connexionSTR := buildConnexionString('SQLSERVER','MaBaseName','UserName','MotDePasse');
Dans le cas d'une connexion vers sqlServer.
2. Interroger les tables
A chaque fois que l'on désire lire des valeurs dans les tables effectuer une recherche on peut procéder ainsi: (et pour reprendre ton exemple)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function TmaClasse.mafonction:variant;
begin
Result := true;
with TADOQuery.Create(Self) do
try
ConnectionString := PJConnexion.connexionSTR ;
SQL.Text := 'select * from articles';
try
Open;
if not Locate('Art_code', IdEdit.Text, [loPartialKey])
then Messagedlg('Unknown ID. Please, check it again', mtwarning, [mbok], 0)
else NameEdit.Text:= Lookup('Art_code', IdEdit.Text, 'art_lib');
except
raise;
Result := false;
end;
finally
free;
end;
end; |
ou récupérer la valeur d'un champ que l'on filtre (valeur de type numérique)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function TMaClasse.mafonction(tableName, fieldName, filtreFieldName, filtreValue : string):variant;
begin
with TADOQuery.Create(Self) do
try
ConnectionString := PJConnexion.connexionSTR
SQL.Text := 'select * from '+tableName+' where '+filtreFieldName+'='+filtreValue ;
try
Open;
Result := fieldByName(fieldName).Value;
except
//raise; exception silencieuse
Result := null;
end;
finally
free;
end;
end; |
La même que la précédente avec cette fois un filtre de type string.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function TMaClasse.mafonction(tableName, fieldName, filtreFieldName, filtreValue : string):variant;
begin
with TADOQuery.Create(Self) do
try
ConnectionString := PJConnexion.connexionSTR
SQL.Text := 'select * from '+tableName+' where '+filtreFieldName+'='+quotedStr(filtreValue);
try
Open;
Result := fieldByName(fieldName).Value;
except
//raise; exception silencieuse
Result := null;
end;
finally
free;
end;
end; |
3. Ecrire dans les tables une valeur de type string
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function TForm1.mafonction(tableName, fieldName, filtreFieldName, filtreValue : string; fieldValue : value):variant;
begin
Result := true;
with TADOQuery.Create(Self) do
try
ConnectionString := PJConnexion.connexionSTR
SQL.Text := 'select * from '+tableName+' where '+filtreFieldName+'='+quotedStr(filtreValue);
try
Open;
Edit
fieldByName(fieldName).Value := Value;
Post;
except
//raise; exception silencieuse
Result := false;
end;
finally
free;
end;
end; |
Je ne vais pas multiplier les exemples à l'infini, mais on s'aperçois que la mécanique à mettre en place reste pratiquement toujours la même. Ces procédures sont des procédures de bases. Maintenant, il est important de savoir toutes les opérations que l'on désire faire de mettre en place les procédures dont on aura besoin. Mais là ce n'est pas une nouveauté et tout le monde le sait déjà.
Une fois toutes ces procédures recencées dans une classe, on se trouve ainsi dédouané pendant tout le reste du projet de l'accés aux données avec la base.
J'espère seuleument que cette entrée en matière bien que succinte te persuade que l'utilisation des query peut s'avérer simple, souple et pratique quand les projets devienent important.
Partager