Répertoire

Soyez le premier à donner votre avis sur cette source.

Vue 7 479 fois - Téléchargée 1 921 fois

Description

Répertoire utilisant quelques rquêtes SQL basiques et access

Conclusion :


A améliorer tous les commentaires sont les bien venus

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
10
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
26 mars 2007

L'idéal est de lire la doc delphi :)

Pour les requêtes normales, voici un exemple (je le rédige sans un delphi sous la main donc ptet des erreurs). Si tu as besoin d'explications, après avoir cherché par toi-même, n'hésite pas à demander.

Function ExempleQueryNormale(UneRequete:String;UneDatabase:TIBDataBase):Boolean;
Var UneQuery : TIBQuery;
IBTransaction : TIBTransaction;
RequeteModif : Boolean;
LaRequete : String;
Begin
Result := False;
LaRequete := Trim(UneRequete);
If LaRequete = '' Then Exit;
UneQuery := Nil;
IBTransaction := Nil;
RequeteModif := (Pos('INSERT',AnsiUpperCase(LaRequete)=1)
Or (Pos('UPDATE',AnsiUpperCase(LaRequete)=1)
Or (Pos('DELETE',AnsiUpperCase(LaRequete)=1);
Try
UneQuery := TIbQuery.Create(Nil);
UneQuery.Database := UneDatabase;
UneQuery.Sql.Text := LaRequete;
If RequeteModif Then Begin
IBTransaction := TIBTransaction.Create(UneDatabase);
IBTransaction.DefaultDataBase := UneDatabase;
IBTransaction.Params.Text := 'read_committed'#13#10+'rec_version'#13#10+'nowait';
IBTransaction.DefaultAction := TARollback;
End;
Try
If RequeteModif Then Begin
IBTransaction.StartTransaction;
UneQuery.ExecSql;
Result := UneQuery.RowsAffected>0;
Else Begin
UneQuery.Open;
If Not UneQuery.IsEmpty Then Begin
Result := True;
While Not UneQuery.Eof Do Begin
{ Traitements éventuels sur les résultats de la requête }
{ ... }
UneQuery.Next;
End;
End;
End;
If RequeteModif Then IBTransaction.Commit;
Except
On E : Exception Do Begin
If RequeteModif Then IBTransaction.RollBack;
Raise Exception.Create('ERREUR. Exception dans le traitement de la requête, message: "'+E.Message+'", requête: "+LaRequete+'"');
End;
End;
Finally
FreeAndNil(UneQuery);
If RequeteModif Then FreeAndNil(IBTransaction);
End;
End;

Pour les requêtes paramétrées tu fais le Prepare après l'affection du Sql.Text et le UnPrepare dans le bloc Finally avant le FreeAndNil.

Voila, bonne lecture.
Messages postés
9
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
3 octobre 2009

Merci Qoprek pour ces quelques remarques , je suis débutant en SQL et il n'est pas facile de trouver de bons 'tuto' pour se perfectionner
Messages postés
10
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
26 mars 2007

Bonjour,

Je ne suis pas sur un poste avec Delphi pour répondre mais néanmoins un premier parcours rapide de ton code m'amène les remarques suivantes, attention je me base sur mes connaissances sur des TIbQuery et non des TAdoQuery donc peut etre me trompe-je:

With data.Query_repertoire do begin <------------- Tu peux garder ton With même pour la boucle plus bas
SQL.Clear;
SQL.ADD('select * from repertoire');
sql.Add('where nom ='+ QuotedStr(nom));
ExecSQL ; <--------- ExecSql est utile dans les requêtes modifiant la table (Insert/Update/Delete) mais pas dans des Select
Open; <---------- En plus tu fais 2 ouvertures (execsql et open)
If Not IsEmpty Then Begin <--------- Test si il y a des résultats avant de lancer ta boucle, ca évitera de faire une boucle de 10 itérations pour rien
for I:=2 to 11 do
With TEdit(FindComponent('Edit' + IntToStr(I+9))) Do Begin
if Fields.Fields[I].Value<>NULL then text:=Fields.Fields[I].Value;
End;
End;
end;

- Tu utilises une requête paramétrée pour l'insert, pense a faire un Prepare (optimisation) et un Unprepare (le Unprepare n'est pas fait automatiquement lors du Free donc il y a fuite possible de mémoire).

- Pense a encadrer ton code dans des Try Except ou Try Finally avec la fermeture des requêtes (je ne vois pas de Close des requêtes).

- Un effort de mise en forme serait le bienvenue, si tu as la flemme il existe plusieurs code beautyfier .. perso j'utilise celui de la JCL.


Voila, si cela peut t'aider.

Cdlt
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Est-ce possible de mettre un titre plus detaillé ? Ainsi qu'une réelle explication de la source, a qui est-elle destinée, à quoi sert-elle, plus de détails encore une fois.
Merci d'avance

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.