Bonjour,
Je voudrais votre avis sur la méthode que vous utilisez pour placer le code source SQL des requêtes. Il faut savoir que je travaille uniquement en SQL et que les query sont créés dynamiquement lors de l'utilisation de l'unité concernée.
Mes outils sont Firebird 2. 14 et Delphi 7 ou Delphi 2010 (en rodage).
J'ai fait de nombreux essais, mais aucun ne me donne entière satisfaction.
Actuellement, je mets mes sources SQL dans chacune des unités où elles sont utilisées. Ces sources des requêtes sont les dernières lignes de l'unité.
Pour en assurer la gestion, j'ai écrit la fonction suivante dans chaque unité.
Cette approche me donne satisfaction, mais elle présente quelques inconvénients.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 function TfrmSaisirFactEcrit.f_LireSql(pReqStr: string): string; const kEcriture_W01 = // Insérer une écriture - Rapprochement toujours à 0 'INSERT INTO ECRITURE (BANQ_ID, OPERAT_ID, ECRIT_DATE, ECRIT_LIB, ECRIT_D_C, ECRIT_VALEUR) ' + 'VALUES(:pBanqId, :pOperat, :pDate, :pLib, :pEcrit, :pValeur) RETURNING ECRIT_ID '; kLiaison_W01 = // Créer liaison entre la facture et l'opération financière ECRITURE <=> FACTURE 'INSERT INTO ENCAISSER (BANQ_ID, ECRIT_ID, FACT_ID) VALUES(:pBanqId, :pEcritId, :pFactId) '; kEcriture_M01 = // Modifier une écriture - Elle ne doit pas être comptabilisée 'UPDATE ECRITURE SET BANQ_ID = :pBanqId, OPERAT_ID = :pOperat, ECRIT_DATE = :pDate, ECRIT_LIB = :pLib, ECRIT_D_C = :pEcrit, ECRIT_VALEUR = :pValeur ' + 'WHERE ECRIT_ID = :pEcritId '; kFacture_M01 = // Modifier la date d'échéance de la facture pour la mettre en corrélation avec l'encaissement prévisionnel 'UPDATE FACTURE SET FACT_ECH = :pDate WHERE FACT_ID = :pFactId '; begin case AnsiIndexStr(pReqStr, ['kEcriture_W01', 'kLiaison_W01', 'kEcriture_M01', 'kFacture_M01']) of 0: Result := kEcriture_W01; 1: Result := kLiaison_W01; 2: Result := kEcriture_M01; 3: Result := kFacture_M01; end; end;
- Répétition de certaines requêtes dans plusieurs unités ;
- Augmentation du volume des sources ;
- Toute correction nécessite une recompilation.
J'ai fait des essais avec un fichier xml, mais il faut mettre en place une mécanique qui peut se bloquer lorsque nous travaillons en réseau, sauf à mettre un fichier xml sur chaque poste. Dans cette situation, il faut gérer les mises à jour.
Ma dernière idée serait de mettre l'ensemble des requêtes dans une table spécifique de la base de données et d'en faire une lecture complète à l'ouverture du programme dans un TClientDataSet. Elle serait stockée en mémoire pendant l'utilisation de l'application.
Merci de me donner votre avis sur cette approche et éventuellement me dire la méthode que vous utilisez, sachant que je veux que les sources des requêtes soient regroupées.
D'avance merci de vos remarques et suggestions.
Partager