191
مقراطيـة الشعبيـةيـة الجزائريـة الدي الجمهورRépubliqueAlgérienneDémocratiqueetPopulaire علمــــيلـي والبحــث اللعـاتعليــم ا وزارة الMinistère de l’enseignement supérieur et de la recherche scientifique Mémoire de Master 2 ème année Option : Hydraulique urbaine THEME: Etudiant: Encadreur: BOUHENICHE Rida Dr: BDJAOUI ALI PROMOTION: 2016 حمـــد خيضر جـــامعة م- بسك ـــــــ رةلتكنولوجيـــــام و اعلــــــويـــــة ال كلـــة و الـــــريدسة المدني قســـم الهن/.......... المرجـــــع:2016 Université Mohamed khider Biskra Faculté des Sciences et de la Technologie Département de Génie civil et Hydraulique Référence :………/ 2016 Mise à jour de programme CRDEP.MMR

Bouheniche rida memoire final

Embed Size (px)

Citation preview

Page 1: Bouheniche rida memoire final

الجمهوريـة الجزائريـة الديمقراطيـة الشعبيـة

RépubliqueAlgérienneDémocratiqueetPopulaire

وزارة التعليــم العـالـي والبحــث العلمــــي

Ministère de l’enseignement supérieur et de la recherche scientifique

Mémoire de Master

2ème année

Option : Hydraulique urbaine

THEME:

Etudiant: Encadreur:

BOUHENICHE Rida Dr: BDJAOUI ALI

PROMOTION: 2016

رةـــــــبسك -جـــامعة محمـــد خيضر

كليـــــة العلــــــوم و التكنولوجيـــــا

قســـم الهندسة المدنيـــة و الـــــري

2016المرجـــــع: ........../

Université Mohamed khider – Biskra

Faculté des Sciences et de la Technologie

Département de Génie civil et Hydraulique

Référence :………/ 2016

Mise à jour de programme CRDEP.MMR

Page 2: Bouheniche rida memoire final

Remerciements

REMERCIEMENTS

Mes remerciements vont primordialement à (Allah) le tout puissant qui m'a donné la

force, la santé et l’opportunité de mener ce travail à terme.

Je remercie chaleureusement mon promoteur Mr « BEDJAOUI Ali » Pour m’avoir encadré

Je remercié également le chef de département de Génie civil et d’Hydraulique le Professeur

BOUZIANE M.T pour son soutien, pour ses précieux conseils et critiques toujours utiles, et

Mes remerciements les plus sincères à toutes les personnes qui ont contribué de près ou de

loin à l’élaboration de ce mémoire ainsi qu’au personnel administratif du département de

Génie civil et d’hydraulique en particulier les gens de la filière d’Hydraulique

Beaucoup de personnes méritent d’y figurer, alors je présente toutes mes excuses à ceux et

celles que j’ai malheureusement omis de citer.

Tous mes amis.

REDHA

Page 3: Bouheniche rida memoire final

ملخص :ال

االن،في معظم الدول وأغراض السقي،لقد تم استعمال تكنولوجيا تحويل المياه منذ القديم لتزويد المدن بالماء الشروب

الحيوية،المادة هذه تقام مشاريع ضخمة لتحويل المياه من المناطق ذات الوفرة المائية نحو المناطق التي تعاني نقصا من

الكيلومترات.على مسافات طويلة تقاس بمئات مهمةتعلق األمر بتحويالت وي

القنوات،تسير تدفق وجريان الماء في والنظريات التيإن مشاريع التحويالت المائية تتطلب تحكما وإلماما بالقوانين

ونقل لشبكات توزيع الهيدروليكية وتعتبر النمذجة القديمة،تطور بشكل مستمر منذ الحضارات يالعلم هذااألسباب ظل لهذه

تكنولوجية يعرفها مسلسل تطور هذه العلوم. آخر المياه

تحصيل على يعتبر مشكل حساب شبكات توزيع المياه مشكل معقد جدا، لذلك تبقى الخوارزميات التقليدية غير قادرة

الحلول المطلوبة.

تبقى طريقة هاردي التوزيع،وحساب شبكات االلي تعتبر األداة السريعة والفعالة لتصميم اإلعالمان استعمال برامج

لحساب شبكات توزيع المياه، لكن طريقة التكرار المتبعة مملة نوعا كروس الطريقة االكثر استعمال في برامج االعالم االلي

ما لذلك نجد أنها نادرا ما تستخدم في التطبيق اليدوي.

حاسوب جديد لحساب ومحاكاة شبكات توزيع المياه، يسمح هذا المشروع بدراسة، تحليل، تصميم وبرمجة برنامج

المضطرب طريقة النموذج الخشن استخدام عالقات وصيغ وب عة، وذلك استنادا على برامج سابقعقدية كانت ام متفر

(MMR).

ABSTRACT

The technology of the transfer of water was mobilized for a long time, dice antiquity, for

the adduction drinking water to the cities and for projects of irrigation.

In the majority of the countries, transfers of water were carried out, from the wet areas

towards the areas which are to it less. they are important transfers at long distances of which

the Unit of Account is the hundred kilometres, the projects of transfer of water require a control

and a knowledge of the laws which govern the water run-off and of the transport theories

hydraulic.

For these reasons which this science did not cease developing since antiquity. The

modelling of the networks of water supply is last technology in this process of advance

The problem of water distribution networks waterpower calculation has become more and

more complicated; the traditional algorithm has been already unable to satisfy the need of

solving.

The use of software is the fastest and effective tool for the design of distribution networks.

the Hardy Cross procedure is most widely used in computer programs for analysis of water

distribution systems but its tedious arithmetic iterations ensures that it is seldom employed for

manual application

Page 4: Bouheniche rida memoire final

Our project allows the study, design, analysis and implementation of a new program of the

calculation and simulation of the distribution networks, Looped and ramified network, on the

basis of the l previous programs and method of the rough model of reference (MMR).

RÉSUMÉ

La technologie du transfert d’eau a été mobilisée depuis longtemps, dès l’antiquité, pour

l’adduction des villes en eau et pour des projets d’irrigation.

Dans la plupart des pays, des transferts d’eau ont été réalisés, des régions humides vers

les régions qui le sont moins .il s’agit de transferts importants sur grandes distances dont l’unité

de compte est la centaine de kilomètres, Les projets de transfert d’eau nécessitent une maîtrise

et une connaissance des lois qui régissent l’écoulement de l’eau et des théories du transport

hydraulique.

Pour ces raisons que cette science n’a cessé de se développer depuis l’antiquité. La

modélisation des réseaux d'alimentation en eau est la dernière technologie dans ce processus

d'avancement

Le problème de calcul des réseaux de distribution en charge est devenu de plus en plus

compliqué ; les algorithmes traditionnels ont déjà été incapables de satisfaire le besoin de

résoudre.

L’utilisation des programmes informatique c’est l’outil la plus rapide et efficace pour le

dimensionnement des réseaux de distribution. La méthode de Hardy Cross malgré ses

difficultés de convergence qui dépendent du choix des estimées initiales des débits dans les

conduits, reste très utilisée dans les programmes informatiques pour l’analyse et la conception

des réseaux de distribution d’eau.

Notre projet permet l’étude, la conception, l’analyse et la réalisation d’un nouveau

programme informatisé pour le calcul et la simulation des réseaux de distribution, maillés et

ramifiés, sur la base des relations de la méthode du model rugueux de référence (MMR).

Page 5: Bouheniche rida memoire final

S O M M A I R E

III

Remerciements ملخص ABSTRACT RÉSUMÉ Liste des symboles et Principales notations Sommaire Introduction générale

CHAPITRE I GENERALITES SUR LES RESEAUX

D’EAUX POTABLES

I.1 Introduction 03 I.2 Installations des réseaux d’AEP 04 I.2.1 Captage ou prise 04 I.2.2 Traitement des eaux 06 I.2.3 Conduite d'amenée 06 I.2.4 Accumulation 07 I.2.5 Réseau de distribution 08 I.2.5.1 Choix du matériau des conduite 09 I.2.5.1.1 Actions reçues par les conduites 09 I.2.6 Appareillages et accessoires hydrauliques 10 I.2.6.1 Les vannes de sectionnement 10 I.2.6.2 Les manchettes de traversée 10 I.2.6.3 Les raccords à brides major 11 I.2.6.4 Les coudes 11 I.2.6.5 Le cône de réduction à brides 11 I.2.6.6 Plaque pleine 11 I.2.6.7 Les Tés 12 I.2.6.8 Les poteaux d’incendie 12 I.2.6.9 Les ouvrages annexes 12 I.2.6.9.1 Regard de vidange 12 I.2.6.9.2 Regard de la ventouse 12 I.3 Types de fonctionnement du réseau 13 I.3.1 Système a contre réservoir 13 I.3.2 Système a réservoir de tête 15 I.4 Classification des réseaux d’A.E.P 16 I.4.1 Classification selon la disposition des réseaux dans l’agglomération 16 I.4.2 Classification selon la disposition des tronçons dans le réseau 16 I.4.2.1 Réseaux maillés 16 I.4.2.2 Réseaux ramifie 17 I.4.2.3 Réseaux étagés 17 I.5 Conception d'un réseau d’AEP 18 I.5.1 Critères de service des systèmes d’AEP 18 I.5.2 Facteurs qui ont une influence sur la conception du réseau 18 I.6 Conclusion 20

Page 6: Bouheniche rida memoire final

S O M M A I R E

IV

CHAPITRE II CALCUL DES RESEAUX DE DISTRIBUTION

II.1 Introduction 21

II.2 Conception et dimensionnement 21

II.2.1 Rappels hydrauliques 21

II.2.2 Notions principales dans un réseau de distribution 22

II.2.3 Critères de conception d’un système De distribution 23

II.2.3.1 Besoins en eau 23

II.2.3.1.1 Dotation 23

II.2.3.1.2 Accroissement de la population 24

II.2.3.1.3 Evaluation de la consommation 24

II.2.3.1.4 Débit moyen 25

II.2.3.1.5 Débit de pointe journalier 25

II.2.3.1.6 Débit de pointe horaire 25

II.2.3.2. Conduites de distribution 26

II.2.3.2.1 Les pertes de charge 26

II.2.3.2.1.1 Pertes de charge linéaire 26

II.2.3.2.1.2 Pertes de charge singulière 28

II.3 Modélisation des réseaux de distribution 29

II.3.1 Les méthodes d’analyse des réseaux de distribution 29

II.3.1.1 Approche théorique d’analyse de réseaux 29

II.3.1.2 Approche numérique 32

II.3.2 Les objectifs de la modélisation 32

II.3.3 Les Application des modèles des réseaux d'alimentation en eau potable 33

II.3.4 Les Processus de la modélisation 33

II.3.5 Dimensionnement des réseaux par la simulation hydraulique 34

II.3.6 Outils nécessaires pour établir un model hydraulique 35

II.3.7 Les logiciels de modélisation des réseaux d’AEP 37

II.3.7.1 Les algorithmes utilisent dans la modélisation hydraulique 37

II.3.7.2 Quelques logiciels de simulation des réseaux 38

II.4. Conclusion 42

CHAPITRE III MISE A JOUR DE PROGRAMME CRDEP.MMR

III.1 Introduction 44 III.2. Outil de développement DELPHI RAD Studio Seattle (RAD (& IDE) 47 III.2.1 Multi système FireUI 47 III.2.2 Leader du développement d'applications IoT 48 III.3 Système de Gestion de Bases de Données 50 III.4. Principe de calcul du programme CRDEP.MMR (2014) 53 III.4.1 Rappel des relations utilisées par les programmes CRDEP.MMR 2014 et 53

Page 7: Bouheniche rida memoire final

S O M M A I R E

V

SRD.MMR 2015 III.4.2 Etapes de calcul proposé 53 III.4.3 Données à introduire 58 III.4.4 Résultats obtenus 58 III.5. Interfaces de CRDEP.MMR2016 59 III.5.1 Utilisation du programme CRDEP.MMR2016 60 III.5.2 Dimensionnement d’un nouveau réseau 61 III.5.3 Interface principale 62 III.5.3.1 La barre de menu 62 III.5.4 Fenêtre de choix de type de réseau 63 III.5.5 L’introduction des données 63 III.5.6 Choix de diamètre normalisé 64 III.5.7 Affichage des résultats 65 III.5.8 Impression des résultats 66 III.5.9 Interface pour Smartphone 67 III.6 Espace de développement de programme sur WEB 67 III.6.1 Les forges de développement 70 III.6.1.1 Définition 70 III.6.1.2 Objectifs 70 III.6.1.3 Les forges internationales 71 III.7 Application 72 III.7.1. Cas de dimensionnement 72 III.7.2 Cas de la simulation 76 III.8 Conclusion 80

Conclusion générale Références bibliographiques Annexes

Page 8: Bouheniche rida memoire final

Liste des tableaux

Liste des tableaux

Tableau II.1 : Différentes unités de dotations en fonction du type de consommateur ............ 24

Tableau II.2 : : Pertes de charge linéaire en cm/m conduites PVC (M. Agoussine) .............. 28

Tableau III.1 : Dictionnaire des données ............................................................................... 51

Tableau III.2 : Paramètres du réseau à étudier pour le réseau maillé ................................... 73

Tableau III.3: Résultats du calcul hydraulique du réseau maillé par le programme

CRDEP.MMR 2016 ................................................................................................................. 74

Tableau III.4 : Valeur de ∆� et Sommes des pertes de charge pour les rois mailles ............. 74

Tableau III.5 Comparaison des pressions supposées et obtenues .......................................... 75

Tableau III.6 : Paramètres du réseau à étudier pour le réseau maillé ................................... 76

Tableau III.7 : Résultats du calcul hydraulique (simulation) du réseau maillé para le

programme CRDEP.MMR ...................................................................................................... 77

Tableau III.8 : Comparaison des pressions supposées et obtenues ....................................... 78

Page 9: Bouheniche rida memoire final

Liste des figures

LISTE DES FIGURES

Figure.I.1 : Schema general de reseau d’aep ............................................................................ 3

Figure.I.2 : Types de captage ..................................................................................................... 5

Figure.I.3 : Eau ferrugineuse ..................................................................................................... 6

Figure.I.4 : Eau brunATRE ........................................................................................................ 6

Figure.I.5 : Salle de pompage .................................................................................................... 7

Figure.I.6 : Ballon anti-belier .................................................................................................... 7

Figure.I.7 : Reservoir d’eau ....................................................................................................... 8

Figure.I.8 : Chateau d’eau (libourne, france) ........................................................................... 8

Figure.I.9 : Vanne de sectionnement ....................................................................................... 10

Figure.I.10 : Manchettes de traversee ..................................................................................... 10

Figure.I.11 : Raccord a brides major ...................................................................................... 11

Figure.I.12 : Coudes a differents angles .................................................................................. 11

Figure.I.13 : Cone de reduction a brides ................................................................................. 11

Figure.I.14 : Plaque pleine ...................................................................................................... 11

Figure.I.15 : Te ........................................................................................................................ 12

Figure.I.16 : Schema d'un systeme a contre reservoir ............................................................ 13

Figure.I.17 : Systeme a contre reservoir cas de transite ......................................................... 14

Figure.I.18 : Systeme a contre reservoir cas de pointe ............................................................ 14

Figure.I.19 : Systeme a contre reservoir (cas de la pompe a l'arret) ...................................... 15

Figure.I.20 : Schema d'un systeme a reservoir de tete ............................................................ 15

Figure.I.21 : Schéma d’un réseau maille ................................................................................. 16

Figure.I.22 : Schéma d’un réseau ramifie ............................................................................... 17

Figure.I.22 : Etapes relatives a l'étude de la distribution d'eau potable dans une

agglomération ........................................................................................................................... 19

Figure.II.22 : Représentation de la charge totale entre 2 sections .......................................... 22

Figure.II.22 : Interface d'un logiciel et schéma d'un modèle ................................................... 35

Figure.III.1 : Presentation generale du programme crdep.mmr 2016 .................................... 45

Figure.III.2 : Diagramme de classe ......................................................................................... 46

Figure.III.3 : Previsualisation en cours de conception avec fireui ......................................... 47

Figure.III.4 : multisysteme fireui ............................................................................................. 48

Figure.III.5 : leader du developpement d'applications iot. ...................................................... 49

Figure.III.6 : Caractéristique de Delphi RAD.. ....................................................................... 49

Figure.III.7 : L’interface de SQlite... ....................................................................................... 51

Figure.III.8 : Exemple d’un code de calcul.. ........................................................................... 59

Figure.III.9 : Les interface disponible.. ................................................................................... 60

Figure.III.10 : Fenêtre du choix du type de fonction désirée.. ................................................ 61

Figure.III.11 : Fenêtre de création d’un nouveau fichier ou le rappel d’un fichier existant.. 61

Figure.III.12 : Fenêtre principale.. .......................................................................................... 62

Figure.III.13 : Barre de menu.. ................................................................................................ 63

Page 10: Bouheniche rida memoire final

Liste des figures

Figure.III.14 : Fenêtre de choix de type de réseau.. ................................................................ 63

Figure.III.15 : Fenêtre d’introduction des données.. ............................................................... 64

Figure.III.16 : Fenêtre du choix de type de conduite avec le tableau des diamètres

disponibles.. .............................................................................................................................. 65

Figure.III.17 : Fenêtre d’affichage des résultats.. ................................................................... 66

Figure.III.18 : Fenêtre d’impression ou de sauvegarde des résultats.. ................................... 66

Figure.III.19 : Interface du programme CRDEP.MMR 2016 pour les smart phones.. ........... 67

Figure.III.20 : L’interface de site web.. ................................................................................... 68

Figure.III.21 : L’interface de site web.. ................................................................................... 69

Figure.III.22 : Fenêtre d’affichage pour l’application du tableau III.3.. ................................ 79

Figure.III.23 : Fenêtre d’affichage pour l’application du tableau III.8.. ................................ 79

Page 11: Bouheniche rida memoire final

Symboles et notations

D Diamètre hydraulique d’un profil circulaire (m)

Q Débit volume (m3/s)

J Gradient de la perte de charge linéaire (-)

R Nombre de Reynolds (-)

ε Rugosité absolue (m)

f Coefficient de frottement (-)

v Viscosité cinématique (m2/s)

� Facteur de correction de la dimension linéaire (-)

A Aire de la section mouillée du modèle rugueux (m2)

P Périmètre mouillé du modèle rugueux (m)

�� Rayon hydraulique (m)

������ Diamètre hydraulique du modèle rugueux (m)

Rugosité absolue de la paroi du modèle rugueux (m)

J Gradient de la perte de charge linéaire dans le modèle rugueux (-)

Q Débit volume écoulé par le modèle rugueux (m3/s)

f Coefficient de frottement du modèle rugueux (� = 1 16⁄ ) (-)

�� Nombre de Reynolds du modèle rugueux (-)

g Accélération de la pesanteur (m/s2)

Page 12: Bouheniche rida memoire final

Introduction générale

Page 13: Bouheniche rida memoire final

INTODUCTION GENERALE

1

INTODUCTION GENERALE

Le calcul des réseaux de distribution c’est un problème rencontré en hydraulique ce

calcul qui fait appel soit à des abaques et tableaux pour le choix des diamètres soit à

l’utilisation de programmes et logiciels.

L’objectif du calcul d’un réseau de distribution est la détermination des paramètres

géométriques et hydrauliques des canalisations formant le réseau. Un très bon calcul avec une

bonne réalisation facilitent largement la taches aux gérants des réseaux et font satisfaction aux

abonnés.

La solution informatique est un outil de calcul et de dimensionnement rapide et efficace,

ces derniers sont basés sur des relations et formules où l’estimation et le choix de certains

coefficients s’avère difficile et imprécise tel que le coefficient de Williams-Hazen utilisé par

les programmes LOOP et n Epanet etc… qui remplace la rugosité absolue de la conduite, ce

coefficient beaucoup utilisé dans certains pays anglo-saxon pour l’évaluation du gradient

hydraulique donc la perte de charge.

Le logiciel de modélisation est constitué d’un moteur de calcul permettant la résolution

des équations, d’un module de saisie des données et, le plus souvent, d’un module graphique

permettant de visualiser les éléments modélisés et les résultats de simulation. Les logiciels de

modélisation sont développés depuis les années 70

Actuellement il existe plusieurs logiciels pour la modélisation et la gestion des eaux, tel

que : EPANET, WATERCAD, H2ONet , Kanet…etc., ces dernier utilisent plusieurs

méthodes et algorithmes de calcul, Parmi celles-ci, il y a des méthodes anciennes tels que la

méthode de Hardy Cross malgré ses difficultés de convergence qui dépendent du choix des

débits estimées initialement dans les conduits, reste très utilisée par les bureaux d'étude dans

l’analyse et la conception des réseaux de distribution d’eau. Son avantage réside

probablement dans la facilité qu’elle offre pour la programmation ainsi que par son aptitude à

être appliquée manuellement. D'autres méthodes peuvent être utilisées comme les méthodes

Page 14: Bouheniche rida memoire final

INTODUCTION GENERALE

2

graphiques, les méthodes utilisant l'analogie avec les circuits électriques et les méthodes

basées sur la transformation du réseau en réseau ramifié équivalent. Suite au développement

des ordinateurs et des méthodes numériques, d'autres méthodes, plus modernes et surtout plus

rapides, sont proposées (exemple: la méthode de Newton Raphson, la méthode Wood

Charles).

Le travail, présenté dans ce mémoire, a pour objectif de faire une mise à jour de

programme CRDEP.MMR. Le programme proposé présente des anomalies telles que

l’impression, la sauvegarde, la possibilité de modifier des données précédentes d’un réseau

calculé auparavant. Rappelons que le programme CRDEP.MMR était élaboré par

A.DAHMANE en 2014 dans le cadre de préparation d’un mémoire de Master proposé et

encadré par BEDJAOUI A, ce programme est basé essentiellement dans sa conception sur les

relations de ma méthode du modèle rugueux de référence pour le calcul des écoulements en

charge.

Un deuxième objectif outre que la mise à jour est de faire un espace de développement

des logiciels basés sur la MMR, qui permet aux étudiants au futur de faire des

développements et modification à la base des versions précédentes en donnant une licence

GPL open source.

Le présent mémoire est composé de trois chapitres, dans le premier chapitre, nous avons

mis la lumière sur tous les éléments spécifiques d’un système d’alimentation en eau potable,

ainsi que les installations, les équipements, le fonctionnent et conceptions des réseaux.

Un second chapitre qui est consacré au calcul des réseaux de distribution ou une

exposition des notions sur la modélisation a été faite.

Le dernier chapitre est consacré à la mise à jour du programme CRDEP.MMR de 2014.

Page 15: Bouheniche rida memoire final

Chapitre I :

Généralité sur les réseaux

d’eaux potables

Page 16: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

3

Chapitre I.

Généralités sur les réseaux d’AEP

I.1.Introduction

L’alimentation en eau potable (AEP) désigne l’ensemble du système permettant de

fournir aux usagers une eau propre à la consommation directement à domicile.

L’alimentation en eau potable d’une population se fait par l’utilisation de conduites qui

construits les réseaux. Ces réseaux peuvent être maillés ou bien ramifiées…etc. On peut dire

que les conduites prennent différents diamètres, longueurs et matière première à savoir les

conditions du terrain et l’économie du projet.

Elle s’organise en plusieurs étapes :

Le prélèvement des eaux de surface ou souterraines dans le milieu naturel,

L’acheminement par des conduites d’adduction,

Le stockage dans des réservoirs,

Le traitement, qui s’effectue par des stations de potabilisation et/ou par

injection de chlore directement dans le réseau,

La distribution aux usagers par des canalisations enterrées.

L’alimentation en eau potable est encadrée par une réglementation stricte, notamment

concernant les normes de potabilité à respecter afin que l’eau ne présente aucun risque

sanitaire.

En général l’Alimentation en eau potable d’une agglomération quelconque comporte les

éléments suivants (figure I.1):

Page 17: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

4

Figure.I.1 : Schéma général de réseau d’AEP

I.2. Installations des réseaux d’AEP

I.2.1.Captage ou prise

C’est l’ensemble des ouvrages qui permettent de capter de l’eau (au niveau de la

ressource en eau) et qui peut être :

D'origine superficielle : lac, barrage, oued, mer ...

D'origine souterraine : nappe, source ...

Il permet de recueillir l’eau naturelle, cette eau peut être d’origine superficielle ou bien

Souterraine.

Il y cinq grands types de captages existants (figure I.2):

Les prises en rivière qui sont peu fréquentes dans la région. Elles sont

particulièrement sensibles aux pollutions car elles ne bénéficient pas du rôle de filtre

joué par le sol ;

Les captages de plan d’eau qui sont minoritaires mais qui fournissent souvent des

gros débits

Les puits qui sont présents surtout dans l’Aude, le Gard et l’Hérault ;

Les forages qui se rencontrent surtout dans l’Hérault ;

Les captages de source qui captent un mélange complexe d’eau de surface et d’eau

profonde. Ils sont majoritaires dans la région. La Lozère est le département qui en

possède le plus. Les résurgences karstiques sont inclues dans cette catégorie.

Page 18: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

5

(a) Puits (b) Forage

(c) : Impluvium (d) : Prise en rivière

Figure.I.2 : Types de captage

Page 19: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

6

I.2.2.Traitement des eaux

Ensemble des ouvrages qui permettent de traiter (rendre potable) une eau naturelle qui

vient d’être captée.

Le traitement peut être:

Très simple, par exemple pour le cas d’une eau de profondeur;

Ou éventuellement complexe, et c’est le cas d’une eau de surface (cours de

traitement des eaux potables).

Les principales opérations de traitement (figure I.3 et 4) sont :

■ Clarification

■ Désinfection

■ Mise à l’équilibre calco-carbonique

■ Traitement spécifique : dé-ferrisation, dé-manganisation

Figure.I.3 : Eau ferrugineuse Figure.I.4 : Eau brunâtre (manganèse)

I.2.3.Conduite d'amenée

Ensemble des conduites, ouvrages et appareillages permettant le transport de l’eau

captée, jusqu’à son lieu de stockage au niveau de la ville. Elle peut être :

Gravitaire, lorsque la cote de captage de l’eau est largement supérieure à celle du

stockage (au niveau du village). Par suite, l’eau coule dans des conduites sous pression et non

à surface libre.

Adduction par refoulement (c’est à dire non gravitaire), et dans ce dernier cas, il

faudra installer une station de pompage. La dite station de pompage se compose de :

Page 20: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

7

L’ensemble des pompes (figure I.5) qui donnent l’énergie de pression nécessaire à

l’eau pour être refoulée.

L’ensemble des moteurs qui font fonctionner (tourner) les pompes.

Les accessoires nécessaires à la station de pompage tel que tableau de commande,

anti-bélier (figure I.6), …

Le bâtiment qui abrite l’ensemble de ces appareils et pièces de rechange.

Figure.I.5 : Salle de pompage Figure.I.6 : Ballon anti-bélier

I.2.4.Accumulation

L'accumulation des eaux (ou stockage) s'effectue dans des réservoirs (figures I.7 et 8)

pour assurer la régularité du débit capté et pour avoir des réserves d'eau en cas

d'indisponibilité de la conduite d'amenée.

Le stockage est l’ensemble des ouvrages de génie civil qui assurent principalement

l’emmagasinement de l’eau dans le (ou les) réservoir(s).

Pour assurer la régularité du débit capté et pour avoir des réserves d’eau en cas

d’indisponibilité de la conduite d'amenée La mise en pression de cette eau.

Page 21: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

8

Figure.I.7 : Réservoir d’eau Figure.I.8 : Château d’eau (Libourne, France)

I.2.5.Réseau de distribution

C’est un ensemble des conduites et appareillages permettant la distribution de l’eau

stockée aux abonnés.

L'écoulement de l'eau dans les conduites de distribution se fait le plus souvent par

gravité. Le réseau de distribution peut être soit:

Ramifié,

Maillé,

Mixte (les deux à la fois), et sans oublier le cas des réseaux en étage.

La distribution de l'eau potable jusqu'au consommateur s'effectue par un réseau

souterrain de canalisations.

On distingue les canalisations d'adduction (destinées au transport des gros débits) et le

réseau de distribution (assurant la desserte vers tous les utilisateurs).

Les matériaux les plus couramment utilisés sont la fonte, le PVC, le polyéthylène,

l'acier, le béton.

Les diamètres varient de 20 mm pour les branchements jusqu'à plus de 2 mètres pour les

canalisations d'adduction des très grands centres urbains. Un réseau bien entretenu est un

réseau fiable

Page 22: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

9

I.2.5.1. Choix du matériau des conduite

Le choix du matériau utilisé est en fonction de la pression supportée, de l’agressivité du

sol et de l’ordre économique (coût et disponibilité sur le marché) ainsi que la bonne jonction

de la conduite avec les équipements auxiliaires (joints, coudes, vannes…etc.).

Par mis les matériaux utilisés on peut citer : l’acier, la fonte , le PEHD et le PVC

a) Tuyaux en fonte

Présentent plusieurs avantages :

Bonne résistance aux forces internes.

Bonne résistance à la corrosion.

Très rigides et solides

L’inconvénient est que les tuyaux en fonte sont très lourds, très chers et ne sont pas disponible

sur le marché.

b) Tuyaux en acier

Les tuyaux en acier sont plus légers que les tuyaux en fonte, d’où l’économie sur le

transport et la pose

Bonne résistance aux contraintes (choc et écrasement)

Leur inconvénient est la corrosion.

c) Tuyaux en PVC (Polychlorure de vinyle non plastifié)

Bonne résistance à la corrosion

Disponible sur le marché

Une pose de canalisation facile

Leur inconvénient est le risque de rupture

I.2.5.1.1.Actions reçues par les conduites

Les conduites enterrées sont soumises à des actions qui sont les suivantes :

La pression verticale due au remblai

La pression résultant des charges roulantes

Page 23: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

10

La pression résultant des charges permanentes de surface

La pression hydrostatique extérieure due à la présence éventuelle d'une nappe

phréatique

Le poids propre de l'eau véhiculée

Le tassement différentiel du terrain

Les chocs lors de la mise en œuvre

Action des racines des arbres

I.2.6.Appareillages et accessoires hydrauliques

Il entre sous la dénomination d’accessoire toute pièce montée sur le réseau des

conduites : les coudes, les tés, les vannes. Ceux-ci sont généralement identifiés par deux

éléments : le DN et la PN.

I.2.6.1. Les vannes de sectionnement

Appelées aussi robinet-vanne (figure I.9),

elles servent à isoler les différents tronçons du

réseau lors d'une réparation sur l'un d'entre eux,

en tournant une vis qui abaisse ou élève

verticalement, une sorte de lentille.

Son symbole est : RV DN X

X étant le diamètre nominal de la vanne

Figure.I.9 : Vanne de sectionnement

I.2.6.2. Les manchettes de traversée

C’est un accessoire en fonte qui a comme

rôle de supporter le poids du béton formant

le mur du regard et de protéger la conduite

en plastique lors de la traversée de ce mur.

Figure I.10. Figure.I.10 : manchettes de traversée

Page 24: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

11

I.2.6.3. Les raccords à brides major

C’est un organe monté avant l’entrée et après la

sortie de chaque regard, il s’attache à la conduite en

plastique pour lui permettre de se lier aux accessoires

en fonte, Figure.I.11.

Son symbole s’écrit comme : RBM DN X/Y

Avec : X est le diamètre nominal avant le BRM

Et : Y est le diamètre nominal après le RBM Figure.I.11 : Raccord à brides major

I.2.6.4. Les coudes

Ce sont des accessoires de déviation (Figure.I.12) de la

direction de circulation des eaux, ils existent en différents

angles.

Figure.I.12 : Coudes à différents angles

I.2.6.5. Le cône de réduction à brides

Ce sont des organes de raccordements (Figure.I.13) en cas

de changement de diamètre, du grand au petit et inversement. Son

symbole est CRB DN X/Y .

Avec : X est le diamètre nominal d’entrée au cône.

et : Y le diamètre nominal de sortie du cône Figure.I.13 : Cône de réduction à

brides

I.2.6.6. Plaque pleine

C’est un bouchon qu’on monte à l’extrémité d’une conduite

antenne pour arrêter la circulation des eaux (Figure.I.14). Dans les

tuyaux attachés à ces plaques on aura souvent une stagnation des eaux,

c’est ce qui nous mène à les éviter chaque fois qu’il est possible.

Figure.I.14 : Plaque pleine

Page 25: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

12

I.2.6.7. Les Tés

Accessoire en forme de ‘’T’’ utilisé pour les raccordements des

canalisations secondaires aux canalisations principales (Figure.I.15),

son symbole est : Té DN X/Y.

Avec : X est le DN de la conduite principale.

Y est le DN de la conduite secondaire

Figure.I.15 : Té

I.2.6.8. Les poteaux d’incendie

Ces appareils sont raccordés directement sur les canalisations de distribution. Les prises

d'incendie peuvent être souterraines (bouches d'incendie) ou en surface (poteaux d'incendie).

Les poteaux d'incendie peuvent comporter plusieurs prises (possibilité de branchement de

plusieurs lances d'incendie) et servir également à l'arrosage des plantations et au lavage des

voies et caniveaux

I.2.6.9. Les ouvrages annexes

Il s’agit d’ouvrages assurant le fonctionnement performant du réseau.

I.2.6.9.1. Regard de vidange

C’est une sorte de vanne associée à une conduite versant dans un regard maçonné,

monté sur le réseau dans les points les plus bas.

Ils servent à vidanger les conduites, et sont constituées d’une canalisation piquée sur le

réseau et aboutissant à un regard maçonné qui sera le siège provisoire des eaux de vidange.

Le point de piquage doit être au-dessous de la conduite du réseau pour garantir la non

remontée de l’eau.

I.2.6.9.2. Regard de la ventouse

La ventouse est appareil mis en place aux points les plus hauts, et qui sert à évacuer l’air

emprisonné dans les tuyaux pour contourner les pannes dévastatrices liées à l’air compressé.

Page 26: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

13

Cet appareil peut aussi injecter de l’air dans les conduites lors de la séance de vidange dans le

but d’éviter toute déformation des tuyaux.

I.3. Types de fonctionnement du réseau

Selon les conditions topographiques de l'agglomération et la disposition de la source

d'alimentation en eau, on peut rencontrer deux types de fonctionnement du réseau de

distribution.

I.3.1.Système a contre réservoir

Ce système est appelé aussi système à injection directe vue que la pompe refoule

directement dans le réseau (Figure.I.16).

Figure.I.16 : Schéma d'un système à contre réservoir [1]

a) cas de transite

Le débit pompé (Qp) est supérieur à celui consommé. Donc le débit pompé (Qp) est

égal au débit consommé (Qc) plus le débit transité vers le château (Qch).

Qp =Qc+Qch

Pompe

Qp Qch

Château d’eau

Réseau

Page 27: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

14

Figure.I.17 : Système à contre réservoir cas de transite

b) Cas de pointe (ou de pointe plus incendie)

Le débit consommé est supérieur à celui pompé, donc pour ce cas l'équation va s'écrire

comme suit : Qc = Qp+Qch

Figure.I.18 : Système à contre réservoir cas de pointe

c) Cas de la pompe à l'arrêt

Dans ce cas la pompe ne refoule pas, c'est à dire que Qp =0, donc le débit consommé est

assuré par le château

Qc= Qch

Ligne de charge

Qch Agglomération

Qp

Station de

H

ST

R

Ligne de charge (cas de pointe)

Ligne de charge (cas de pointe plus inc)

Qp Qch

Page 28: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

15

Figure.I.19 : Système à contre réservoir (Cas de la pompe à l'arrêt)

* Avantages du système à contre réservoir

- Réduction de la capacité et de la hauteur du château d'eau

- Continuité de la distribution en cas de panne ou d'arrêt de la pompe

* Inconvénient du système à contre réservoir

L'inconvénient majeur de ce système est le risque de la fatigue prématuré des

canalisations à cause de fortes variations de pression surtout entre l'heure de transite et l'heure

où la station est à l'arrêt.

I.3.2.Système a réservoir de tête

Dans ce cas, le réseau (Figure.I.20) est alimenté seulement par un réservoir (ou château

d'eau) car ce dernier se situe entre la source et l'agglomération, (voir schéma suivant).

Figure.I.20 : Schéma d'un système à réservoir de tête

Ligne de charge

R

Agglomeration

H

Qp

Qch = Qc

Ligne de charge

Qp

Station de pompage

Page 29: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

16

I.4.Classification des réseaux d’A.E.P

Les deux principales classifications des réseaux sont :

I.4.1. Classification selon la disposition des réseaux dans l’agglomération

a) Réseau unique

Dans le cas d’un relief plat ou moyennement accidenté on peut utiliser juste un seul réseau

et avoir de bonnes conditions techniques (pressions).

b) Réseau en zones étagées

Dans le cas d’un relief accidenté la différence de niveau entre les points les plus hauts et

les plus bas est remarquablement élevés, c’est à dire, lorsqu’une pression minimale est

assurée pour les points de l’amont les points de l’aval se retrouvent sous de très

importantes pressions. Dans ce cas la solution du réseau en zones étagées s’impose.

I.4.2. Classification selon la disposition des tronçons dans le réseau

I.4.2.1. Réseaux maillés

Pour la distribution en eau des agglomérations de moyenne et de grande importance, ils

présentent une solution plus adéquate grâce à leur sécurité et leur souplesse d’utilisation.

Ils sont utilisés en général dans les zones urbaines, et tend à se généraliser dans les

agglomérations rurales sous forme associée aux réseaux ramifiés (limitation de nombres de

mailles en conservant certaines ramifications).

Les réseaux maillés (Figure.I.21) sont constitués principalement d’une série de

canalisation disposée de telle manière qu’il soit possible de décrire des boucles fermées ou

maillées.

R

Figure .I.21 : schéma d’un réseau maillé

Le réseau

Page 30: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

17

I.4.2.2. Réseaux ramifie

On les appelle ainsi grâce à leur structure arborisant fréquemment utilisés dans les

petites agglomérations rurales leur inconvénient, c’est que dans les conduites il n’y a qu’un

seul cheminement possible, en cas d’incident sur la conduite principale, toute la partie avale

sera privée d’eau.

I.4.2.3. Réseaux étagés

Lors de l’étude d’un projet d’alimentation d’une ville en eau potable, il arrive que cette

ville présente des différences de niveau importantes.

La distribution par le réservoir projeté donne de fortes pressions aux points bas (normes

des pressions ne sont pas respectées).

L’installation d’un réservoir intermédiaire alimente par le premier, régularisé la pression

dans le réseau.

R

Figure.I.22 : schéma d’un réseau ramifié

Q1

P1

Q2

P2

a

b

Page 31: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

18

Remarque

Pour une meilleure distribution, le réseau maillé présente des avantages suivants :

L’alimentation de retour.

Isoler le tronçon accidenté par un simple manœuvre robinet

I.5.Conception d'un réseau d’AEP

I.5.1. Critères de service des systèmes d’AEP

- Disponibilité de l’eau en quantité suffisante et à une pression min bien définie

À tout moment

En toute saison

- Eau de qualité

Eau distribuée de nature à préserver la santé des consommateurs

Protéger les équipements

- Coût minimal de l’eau pour l’usager

- Ouverture du système de manière à supporter les modifications ultérieures et l’extension

I.5.2. Facteurs qui ont une influence sur la conception du réseau

L’emplacement des quartiers.

L’emplacement des consommateurs principaux.

Le relief.

Le souci d’assure un service souple et régulier.

La conception d'un réseau de distribution d'eau comporte de nombreuses étapes qu'il

faut franchir avant de satisfaire les besoins en eau d'une agglomération. La figure I.23 décrit

brièvement ces étapes.

Page 32: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

19

Figure.I.23 : Etapes relatives à l'étude de la distribution d'eau potable dans une

agglomération.

Etude du milieu physique et identification des

besoins actuels et à venir :

- Topographie

- Géologie

- Sources d'eau

- Plan d'urbanisation

- Démographie

- Types de population

- Réglementation municipale

- Consommation d'eau

Choix

final

Recensement des services existants :

- Réseau d'égouts

- Réseau de distribution d'eau

- Réseau de distribution d'électricité

- Réseau de distribution de gaz

- Réseau de distribution de téléphone

Obtention du

mandat

Identification des choix

possibles et étude économique

Page 33: Bouheniche rida memoire final

Chapitre I. Généralités sur les réseaux d’AEP

20

I.6 Conclusion Dans ce premier chapitre, nous exposé et décrit d’une manière générale le réseau

d’alimentation en eau potable, ses installations et composantes ainsi que les différents types

de réseau.

Un système moderne de distribution d’eau devrait essentiellement inclure des facilités

pour le captage et le stockage, le transport, le pompage, le traitement et la distribution. Le

captage et le stockage nécessitent le développement de lignes de partage des eaux, de barrages

ou digues, de réservoirs, d’adductions, de galeries et de sources d’infiltration. Le transport

inclut les canalisations, les aqueducs et les canalisations de pompage pour transporter l’eau

des réservoirs de stockage au consommateur. Le pompage inclut les pompes et autres unités

auxiliaires permettant son pompage. Le traitement inclut l’aération, la projection, la

sédimentation, la filtration et la désinfection. La distribution inclut l’acheminement et la

bonne répartition des réservoirs, des conduites, des valves etc.

Nous avons également exposé les critères de conception et facteurs qui ont une

influence sur la conception du réseau. Le second chapitre sera consacré au calcul des réseaux

de distribution.

Page 34: Bouheniche rida memoire final

Chapitre II :

Calcul des réseaux de

Distribution

Page 35: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

21

Chapitre II.

Calcul des réseaux de distribution

II.1. Introduction

Par définition, un réseau de distribution est un ensemble de conduites et d'organes

hydrauliques qui permettent de distribuer l'eau en quantité suffisante pour satisfaire les

besoins actuels et futurs des usagers, et même des besoins en eau nécessaire pour lutter contre

les incendies. Avant de parler des méthodes de calcul de ces réseaux de distribution, nous

donnerons quelques définitions sur les réseaux eux-mêmes.

À partir du réservoir, l’eau est distribuée dans une canalisation sur laquelle des

branchements seront piqués en vue de l’alimentation des abonnés.

Les canalisations devront en conséquence présenter un diamètre suffisant de façon à

assurer le débit maximal afin de satisfaire tous les besoins en eau des consommateurs

Le présent chapitre s’intéresse au calcul des réseaux de distribution om des méthodes et

relations seront exposées ultérieurement.

Le dimensionnement ou bien le calcul d’un réseau de distribution revient à déterminer ses

paramètres géométriques en fonction de certains paramètres hydrauliques (débit) et

géométriques (rugosité) et de vérifier en fin les pressions obtenues qui varient généralement

entre 10 mce et 40 mce. La fiabilité d’un réseau est mesurée par le degré d’un bon calcul

(économique).

II.2. Conception et dimensionnement

II.2.1. Rappels hydrauliques

L'hydraulique étudie les lois des écoulements des liquides ainsi que leurs applications.

Elle est basée sur les principes de la mécanique des fluides surtout la célèbre équation de

Bernoulli.

Page 36: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

22

En effet, l’énergie d’un écoulement d’eau dans une conduite circulaire est exprimée

sous la forme d’une charge. Cette charge correspondant au poids d’une colonne d’eau ayant la

même énergie est donnée par l’équation de Bernoulli (ESHA 2005) :

H = h + P +V�

2g

Avec H : la charge totale m

h : l’altitude de la section de mesure par rapport à une référence m

P : la pression dans la section de mesure m

V : la vitesse de l’eau m/s

g : L’accélération de la pesanteur m/s²

La charge totale en un point est la somme algébrique de l’énergie potentielle h, de

l’énergie de la pression P et de l’énergie cinétique V²/2g. Dans notre cas, on négligera

l’énergie cinétique dans les calculs car la vitesse de circulation des eaux dans les réseaux

d’AEP comprise entre 0,5 et 1,5 m/s, donc elle n’aura pas une grande influence sur la charge

totale même si on l’introduit dans les calculs.

Lors de son passage dans une conduite circulaire entre deux sections 1 et 2, (figure II.1)

l’eau perd une quantité de sa charge à cause du frottement contre les parois internes de la

conduite

Figure II.1 : Représentation de la charge totale entre 2 sections (ONEP, 2005)

H� = H� + ∆H

H1: charge totale à la Section 1

H2: charge totale à la Section 2

ΔH: pertes de Charge

Page 37: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

23

II.2.2. Notions principales dans un réseau de distribution

Pression nominale: elle correspond à la pression de service admissible dans une conduite,

en bar, pour le transport de l’eau à 20 °C.

Diamètre nominale: c’est le diamètre extérieur de la conduite pour les conduites en

plastique, et le diamètre intérieur pour les conduites en fonte. Son unité est le mm.

Débit : C'est la quantité d'eau qui s'écoule à travers la section interne de la conduite

pendant une unité de temps. Contrairement à la pression, le débit qui entre dans un nœud est

le même qui sort de celui-ci, son unité est le m3/s.

Vitesse : c'est la longueur de tuyaux parcourue par l’eau dans un temps donné, son unité est

le m/s. Cette vitesse peut être déterminée par l'utilisation de la formule de calcul du débit

II.2.3. Critères de conception d’un système De distribution

Un système d’AEP est constitué essentiellement de 5 principales composantes :

La source d’eau.

Le système de pompage.

Les conduites d’adduction.

Le réservoir.

Les conduites de distribution.

II.2.3.1. Besoins en eau

II.2.3.1.1. Dotation

L'estimation des besoins en eau est délicate, car ceux-ci peuvent varier d'une région à

l'autre, ou même au sein de la même agglomération en fonction du temps (heure de pointe,

jour de pointe,) Cette estimation en eau dépend de plusieurs facteurs (l'augmentation de la

population, équipements sanitaires, niveau de vie de la population...).

En effet, les spécialistes du domaine on essaye d'évaluer la consommation journalière

moyenne d'un Homme pour chaque type d'agglomération c'est ce qu'on appelle aujourd'hui la

dotation. Celle-ci n'est pas attribué seulement à l'être humain mais aussi aux animaux

domestiques (bovins, volailles,) et aux équipements de proximité (écoles, hôtels, hôpitaux,),

son unité est variable selon le consommateur (Tableau III.1) :

Page 38: Bouheniche rida memoire final

Chapitre II.

Tableau II.1 : Différentes

Consommateur

Domestique

Bovins

Hôpital

École

Mosquée

II.2.3.1.2. Accroissement de la population

L’évaluation du nombre d’habitant à un horizon futur se fait sur la base du taux

d’accroissement de la population actuelle, dans le cas où la population suit une loi d’une

progression géométrique, cette évaluat

Pf : Population future ;

Pa : Population actuelle ;

t : Taux d’accroissement de la population

n : Horizon futur ou durée de projet (généralement 30 ans

II.2.3.1.3. Evaluation de la consommation

Pour calculer la consommation totale d’un projet, on calcule la consommation de

chaque ménage et équipement en se référant aux dotations choisies pour chaque type de

consommateur cette consommation est estimée par la relation:

d : Dotation (l/j/type d’usagé).

Chapitre II. Calcul des réseaux de distribution

24

Différentes unités de dotations en fonction du type de consommateur

Consommateur Unité de la dotation

Domestique l/j/hab.

Bovins l/j/tête

Hôpital l/j/lit

École l/j/élève

Mosquée l/j/ha

Accroissement de la population

L’évaluation du nombre d’habitant à un horizon futur se fait sur la base du taux

population actuelle, dans le cas où la population suit une loi d’une

progression géométrique, cette évaluation se déduit d’une relation de la forme

Taux d’accroissement de la population ;

futur ou durée de projet (généralement 30 ans).

Evaluation de la consommation

Pour calculer la consommation totale d’un projet, on calcule la consommation de

ménage et équipement en se référant aux dotations choisies pour chaque type de

consommateur cette consommation est estimée par la relation:

: Dotation (l/j/type d’usagé).

Calcul des réseaux de distribution

consommateur

de la dotation

l/j/hab.

l/j/tête

l/j/lit

l/j/élève

l/j/ha

L’évaluation du nombre d’habitant à un horizon futur se fait sur la base du taux

population actuelle, dans le cas où la population suit une loi d’une

de la forme :

Pour calculer la consommation totale d’un projet, on calcule la consommation de

ménage et équipement en se référant aux dotations choisies pour chaque type de

Page 39: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

25

II.2.3.1.4. Débit moyen

Il exprime le débit moyen nécessaire pour un logement pour satisfaire ses besoins, son

unité est le : l/s, il se calcule comme suit (M. Agoussine) :

�� = ������������ (��/�) × 1000

24 × 3600

II.2.3.1.5. Débit de pointe journalier

Il reflète le débit satisfaisant les besoins d'un logement pendant le jour où la demande

est à son maximum. Pour calculer ce débit, on introduit la notion du coefficient de pointe

journalier, qui varie pour tenir en compte des gaspillages, des pertes, ainsi que des erreurs

d'estimations. Son unité est le : l/s, et sa formule est (M. Agoussine) :

��� = �� × ���

��� : Débit de pointe journalier en l/s.

�� : Débit moyen en l/s

���: Coefficient de pointe journalier.

II.2.3.1.6. Débit de pointe horaire

Il définit le débit contentant les besoins en eau d'un logement pendant l'heure la plus

chargée, il fait intervenir à son tour un coefficient de pointe horaire qui varie lui aussi pour les

mêmes raisons. Son unité est le : l/s, et on utilise la formule suivante pour l'évaluer (M.

Agoussine) :

��� = �� × ���

���: Débit de pointe horaire en l/s : débit moyen en l/s

��� : Coefficient de pointe journalier.

Page 40: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

26

II.2.3.2. Conduites de distribution

Les conduites de distribution sont celles qui assurent le transport de l'eau stockée dans

le réservoir vers les foyers. Elles doivent être conçues pour être aptes à véhiculer le débit de

pointe horaire au contraire de celles d'adduction qui ne doivent supporter que le débit de

pointe journalier.

II.2.3.2.1. Les pertes de charge

II.2.3.2.1.1. Pertes de charge linéaire

Les pertes de charge linéaire sont dues d'une part, au frottement des filets d'eau en

mouvements les uns sur les autres, et d'autre part, a leurs contacts avec les parois internes tout

au long de la conduite.

Pour les évaluer, on a utilisé depuis un temps une multitude de formules plus ou moins

complexes. La plupart d'entre elles ont été abandonnées peu à peu à cause de la difficulté de

leur application. En revanche, d'autres auteurs ont essayé de les transformer en tables pour

faciliter leur utilisation, mais les plus connues restent les suivantes :

a) Formule de Williams-Hazen

C'est la plus utilisée aux Etats-Unis, et elle n'est applicable que pour les écoulements

d'eau. Son expression est la suivante (Générale des eaux, 2009) :

�� = 10.674. �. ��.���

��.�����.���

HL : perte de charge, en m

Q : débit, en m3/s

L : longueur du tuyau, en m

d : diamètre du tuyau, en m

C : coefficient de rugosité de Hazen williams

b) Formule de Darcy-Weisbach

La formule de Darcy-Weisbach est théoriquement la plus correcte et là plus largement

utilisée en Europe (Générale des eaux, 2009). Elle s'applique à tous les régimes d'écoulement

et a tous les liquides.

Page 41: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

27

� = 16Q�

2�����=

V�

2��

J : gradient de pertes de charges enm/km

V : vitesse de l'écoulement en m/s

g : accélération de la pesanteur g =9.81 m/s2

D : diamètre en m

: Coefficient de frottement.

1

√= −2log (

3.71. �+

2.51

��. √)

Après avoir calculé le gradient de pertes de charge il suffit de le multiplier par la

longueur de la conduite :

DH = J.L

DH : perte de charge en m

J : gradient de pertes de charge m/km

L : longueur de la conduite en km

c) Formule de Chézy-Manning

La formule de Chézy-Manning est généralement utilisée pour les écoulements dans les

canaux découverts (écoulement a surface libre) et pour les grands diamètres (Générale des

eaux, 2009).

�� =10.294 × �� × � × ��

��.��

HL = perte de charge, en m

Q = débit, en m3/s

L = longueur du tuyau, en m

d = diamètre du tuyau, en m

n = coefficient de rugosité de Manning

Page 42: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

28

d) Calcul par les tables de colébrook

Il existe plusieurs tables qui permettent de calculer les pertes de charge spécifique

chacune a un type de conduite, par exemple ce tableau qui montre celle du PVC :

Tableau II.2 : Pertes de charge linéaire en cm/m conduites PVC (M. Agoussine)

Débit Diamètre intérieur en mm m3/h

l/s 14.8 16.8 18.6 21 24 28 30 33.6 40 42 53 63.2 67.8 81 101 125 150

0.5 0.14 7 2.5 2 1.6 0.8 0.25 0.2 0.7 0.20 15 5.5 4 3 1.6 0.9 0.5 0.2 1 0.28 28 10 8 5.5 3 1.7 0.95 0.5 1.5 0.42 18 15 10 6 3 1.8 1 0.3 0.2 2 0.55 35 25 17 10 5.5 3 1.8 0.6 0.5 2.5 0.7 35 25 15 8.5 4.5 2.5 1.1 0.8 3 0.38 35 20 10 6.2 3.7 1.6 1.2 0.3 4 1.11 33 18 10 6 2.5 2 0.7 0.28 0.20 5 1.39 26 15 9 3.8 2.5 0.93 0.35 0.30 0.13 6 1.67 38 20 12 5.5 4 1.3 0.6 0.50 0.18 8 2.22 34 19 7.8 6 2 0.92 0.70 0.3 0.1 10 2.78 28 12 9.8 3 1.4 1 0.45 0.16 10 2.78 12 3.34 37 16 13 4.5 1.9 1.5 0.6 0.21 12 3.34 15 4.17 25 20 6.5 2.9 2 0.9 0.3 15 4.17 20 5.55 30 10 4.5 3.5 1.4 0.5 20 5.55 25 6.95 16 7 5 2 0.75 25 6.95 30 8.35 23 9 7 3 1 30 8.35 40 11.1 35 15 12 4.5 1.7 40 11.1 50 13.9 24 17 7 2.5 50 13.9 60 16.7 32 25 9.5 3.5 0.8 70 19.5 30 13 5 2 1.3 80 22.2 16 6 3.2 2.5 100 27.8 25 9 7 150 41.6

II.2.3.2.1.2. Pertes de charge singulière

Tous les accessoires montent dans le réseau (coudes, vannes, tes, cône de réduction,),

les déviations et les changements de diamètre sont à l‘origine des pertes de charge singulière.

Leur influence n'est plus comparée aux pertes de charge linéaire, et par conséquent on les

estime à 10% à 15% de celles-ci (M.Agoussine) :

DH � = (10 − 15)% DH �

DH � : Pertes de charge singulière

DH � : Pertes de charge linéaire

Page 43: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

29

II.3. Modélisation des réseaux de distribution

Un modèle hydraulique est une représentation mathématique du réseau de distribution

permettant la simulation de son fonctionnement hydraulique. Il regroupe les différents

éléments constitutifs d’un réseau : les conduites, certaines vannes et appareils de régulation,

les pompes, les réservoirs et les interconnexions.

Le modèle est basé sur une représentation schématique du réseau sous forme de

nœuds et de tronçons :

Un tronçon correspond à un élément de conduite de caractéristiques homogènes. Il a deux

nœuds d’extrémité ;

Un nœud pouvant joindre plusieurs tronçons correspond souvent à une ou plusieurs

connexions de conduites. Un nœud peut aussi correspondre à un changement de diamètre

ou plus généralement aux changements de caractéristiques d’une conduite.

Il peut être aussi intéressant de prévoir un nœud pour individualiser le branchement d’un

gros consommateur ou pour positionner un poteau d’incendie.

La consommation est généralement répartie géographiquement aux différents

nœuds au prorata des longueurs de tronçons.

II.3.1. Les méthodes d’analyse des réseaux de distribution

Au cours des quinze dernières années, la méthodologie du calcul des réseaux maillés de

distribution d'eau en état permanent a beaucoup évolué, en liaison avec les possibilités

nouvelles offertes par les ordinateurs. Vers le milieu des années soixante-dix, la Compagnie

Générale des Eaux a souhaité disposer de nouveaux programmes, car ceux qui étaient en

exploitation pré- sentaient quelques restrictions' qui n'étaient plus admises.

II.3.1.1 Approche théorique d’analyse de réseaux

Il peut aisément être montré que les équations descriptives de l’écoulement au sein d’un

réseau sont non linéaires.

Le nombre d’équations indépendantes disponibles étant généralement égal au nombre

de paramètres inconnus, une solution est possible. Cependant, il n’existe pas de méthode

directe pouvant résoudre ce type d’équations. Une procédure itérative est par conséquent

nécessaire.

Page 44: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

30

Quatre méthodes sont en pratique communément utilisées pour la résolution de ces

équations aboutissant à l’analyse des réseaux de distribution d’eau. Ce sont les méthodes de

Hardy Cross, de Newton-Raphson, de l’approche linéaire, et des éléments finis. Dans ce

travail, nous ne nous intéresserons qu’aux méthodes de Hardy Cross et de l’approche linéaire.

a) Méthode de Hardy Cross

Le Professeur Cross était probablement le premier à suggérer en 1936 une procédure

itérative systématique pour l’analyse de réseaux. L’approche qu’il proposa à l’origine est

basée sur les équations de correction du débit aux mailles.

Cette approche est aussi connue sous le nom de méthode d’équilibre des charges. Un

peu plus tard, le même principe fut appliqué aux équations de correction des charges aux

nœuds. Cette approche est connue comme la méthode d’équilibre des débits.

Chacune de ces approches est à présent connues sous le même nom de méthode

de Hardy Cross.

Le principe de la méthode se base sur la résolution des équations de correction du débit

aux mailles en considérant le réseau entier comme composé d’un nombre de mailles fermées.

Les débits estimés sont attribués à tous les conduits de telle façon que les équations de

conservation du débit soient satisfaites. En considérant les mailles une à une, les pertes de

charge sont calculées dans les conduits formant la maille. Les débits dans tous les conduits de

la maille subissent la correction :

b) Méthode de la théorie linéaire

Puisqu’aucune méthode directe n’est disponible pour la résolution des équations

impliquées dans l’analyse des réseaux qui sont non linéaires, une approche intéressante

consisterait d’abord à les linéaires pour ensuite les résoudre. La solution est naturellement

approchée, corrigée par l’application d’une procédure itérative.

c)La méthode de Newton-Raphson

La méthode de Newton-Raphson développe les termes non linéaires en séries de Taylor,

néglige les résidus au de la des deuxièmes termes et ne considère ainsi que les termes

Page 45: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

31

linéaires. En conséquence, cette méthode linéarise les équations à travers une différentiation

partielle. Elle est par conséquent générale et agit même quand les équations non linéaires sont

transcendantes contenant donc des termes exponentiels, trigonométriques, hyperboliques ou

logarithmiques. La non linéarité des équations décrivant un réseau de conduits est algébrique,

uniforme et simple.

Recherche de x tel que F(x)=0

Qi nouvelle valeur du débit calculée à partir de la fonction et de sa dérivée. La

convergence vers la solution finale est accélérée parce qu’elle est quadratique c’est-à-dire que

la diminution de l’erreur est proportionnelle au carré de l’erreur précédente. La méthode de

Newton-Raphson nécessite de faire une estimation des débits au départ de l’itération.

Un programme en C++ ouvrir avec MATLAB pour l’analyse de réseaux à l’aide de la

méthode de Newton-Raphson donné dans ANNEXE II

d) Méthode de linéarisation de Wood Charles

Après voir écrit la loi des nœuds et la loi des mailles, l’on procède à la linéarisation des

équations relatives aux pertes de charge pour accélérer la convergence vers la solution

DH � = ��(��)���� × �� = ���� Equation linéaire 1< n < 2

�� : Facteur d proportionnalité relative à la conduite i

(��)� : Débit estimé dans le tronçon i

(��) : Débit à calculer dans le tronçon i à partir du débit estimé

Après 3 itérations on reprendra (��)� =����� ����

Cette méthode accélère la convergence vers la solution. Les lois applicables restent

celles décrites dans la méthode de Hardy-Cross. Cette méthode a l’avantage de ne pas

nécessiter l’évaluation des débits initiaux avant de commencer l’itération. A la première

itération l’on suppose.

Page 46: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

32

�� = �′�

(��)� = 1

Elles permettent d’intégrer plus facilement plusieurs sources de pressions (réservoirs,

stations de pompage), d’introduire des vannes, et de simuler les ruptures de conduites.

e) La méthode des éliment fini

La méthode des éléments finis est une technique permettant de discrétiser l'espace et

d'approximer par sous domaine la solution recherchée. Elle est basée sur une formulation

intégrale du modèle mathématique à résoudre numériquement.

La consistance et la généralité qui sous-tendent la méthode des éléments finis

fournissent de nombreux avantages convenant particulièrement à cette recherche. Par

exemple, sa flexibilité géométrique mène à une définition efficace des caractéristiques

irrégulières communes aux canaux naturels.

II.3.1.2.Approche numérique

Parmi les méthodes présentées précédemment, celle dite de la théorie linéaire semble être

la plus appropriée à la résolution des équations décrivant les phénomènes se tenant au sein de

réseaux de conduits. Le logiciel de calcul se basera donc sur cette méthode. Néanmoins et

dans un but de comparaison, la méthode de Hardy Cross a aussi été développée.

II.3.2. Les objectifs de la modélisation

La modélisation est la représentation schématique d’une réalité souvent complexe.

L’objectif général de la modélisation des systèmes AFP est de comprendre ou de préciser les

effets d’un phénomène prévisible non observable.

Les objectifs spécifiques d’une modélisation peuvent être multiples

Détailler certaines fonctions du réseau (vitesse, pression) ;

Evaluer les capacités de stockage, de pompage ;

Simuler le fonctionnement des organes de régulation ;

Page 47: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

33

Simuler les scénarii de rupture de conduites sensibles ou le renforcement d’un

réseau afin d’examiner sa capacité à répondre à une nouvelle demande ;

Connaître l’état d’un réseau existant ;

Connaître la qualité de l’eau ;

II.3.3. Les Application des modèles des réseaux d'alimentation en eau potable

La plupart des modèles des réseaux d'AEP peut être utiliser pour analyser d'autre

systèmes de conduites sous pression, comme les systèmes de refroidissement industriels, les

oléoducs, ou tout réseau de conduites à pleines sections transportant un fluide incompressible,

monophasé,

newtonien.

Les modèles sont particulièrement importants pour les réseaux d'AEP vue leur topologie

complexe, l’extension et le changement fréquent.

Un réseau d'AEP alimente des centaines de milliers d'habitants (les grands réseaux

alimentent des millions), ainsi, l'impact potentiel d'une décision de la part de l'organisme de

gestion du réseau peut être énorme.

Des simulations de réseau d'AEP sont employées pour différents objectifs comme :

Planification à long terme en tenant compte du développement et de la réhabilitation

Études de la protection contre les incendies

Analyse de la qualité de l'eau

Gestion de l'énergie

Conception du réseau

Efficacités opérationnelles quotidiennes dû à la formation d'opérateurs, la réaction

aux

situations d'urgences, et la maintenance

II.3.4. Les Processus de la modélisation

La modélisation est un processus itératif, la première étape en entreprenant n'importe

quel projet de modélisation est de fixer les objectifs et les besoins pour lesquels le modèle

sera employé à court et à long terme.

La deuxième étape est le calibrage du modèle en précisant son exactitude.

La modélisation concerne une série d'abstraction :

Page 48: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

34

D'abord les conduites et les pompes réelles dans le réseau sont représentées sur des

cartes ; puis les cartes sont converties en modèle qui représentent les équipements du système

comme des arcs et des nœuds, une autre couche d'abstraction est introduite, c'est la

présentation mathématique des arcs et des nœuds ; les équations du modèle sont alors

résolues, et les solutions sont affichées sous forme de cartes et de graphes ou sous forme de

tableaux

La valeur d'un modèle provient du rôle de ces abstractions en facilitant la conception efficace

pour le développement du système, ou l'amélioration de son fonctionnement.

II.3.5. Dimensionnement des réseaux par la simulation hydraulique

Le terme simulation se rapporte généralement au processus d'imitation du

comportement d'un système, dans notre travail en considère la simulation comme le processus

de l'utilisation d'une représentation mathématique du système réel, cette représentation est

appelée "modèle".

La simulation d'un réseau de transfert ou de distribution qui reproduit le comportement

dynamique d'un système existant ou projeté, est généralement appliqué, surtout dans les cas

où on ne peut pas soumettre directement le système réel à l'expérimentation, ou afin d'évaluer

un

projet de système de distribution avant de le réaliser réellement.

Des simulations peuvent être utilisées pour prévoir les réactions du système sous un

éventail de conditions sans perturber le système en place,

En utilisant la simulation les problèmes peuvent être prévus dans un système de

transfert

existant ou projeté et les solutions peuvent être évaluées avant que le temps, l'argent et le

matériel ne soient investi dans un projet réel.

Par exemple, si une entreprise chargée de la gestion du réseau de distribution veut

vérifier si une nouvelle ramification destiner à fournir de l'eau avec un débit assez suffisant

pour lutter contre l'incendie sans compromettre à la pression de service destinée aux abonnés

existants, ce système peut être réalisé et testé directement sur le terrain, mais si un des

problèmes ou des

dysfonctionnements apparaissent, les dégâts, et le coût de la remise en état seraient énormes,

La simulation peut fournir des informations valables à l'ingénieur pour prendre des

décisions convenables, la simulation est un outil d'aide à la décision.

Page 49: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

35

La simulation peut être utilisée dans un état statique ou dynamique, la simulation à l'état

statique est utilisée pour déterminer le comportement d'opération du système à cet état ; ce

type d'analyse peut aider à déterminer l'effet à court terme du débit d'incendie ou de la

demande moyenne sur le système.

La simulation à l'état dynamique est utilisée pour évaluer les performances du

système avec le temps, ce type d'analyse permet à l'utilisateur de modeler le remplissage et le

vidange des réservoirs, régulariser l'ouverture et la fermeture des vannes, variations des

débits à travers le système en fonction de la variation des conditions de la demande et mettre

en

place une stratégie de contrôle automatique.

Les logiciels modernes de la simulation utilisent l'interface graphique, ce qui facilite

des modèles et la visualisation des résultats de la simulation.

Les anciennes générations de logiciel sont fondées sur la présentation des données et

des résultats sous forme de tableaux

Figure II.2 : Interface d'un logiciel et schéma d'un modèle

Page 50: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

36

II.3.6. Outils nécessaires pour établir un model hydraulique

a) La base de données

Elle s’articule autour de 2 types de données :

Les données statiques décrivant :

Le réseau : conduit (Longueur, Diamètre, Rugosité, …), altimétrie des nœuds ;

Les ouvrages : pompes, réservoirs, appareils de régulation ;

La répartition géographique de la consommation moyenne annuelle des nœuds.

Ces données constituent le modèle physique.

Les données dynamiques comprenant :

Les profils journaliers de consommation des différents usagers considérés

(domestiques, industriels, …)

Les règles de contrôle et d’asservissement des pompes, des réservoirs, des

appareils

de régulation, …

b) Le logiciel de calcul

Le logiciel de modélisation est constitué d’un moteur de calcul permettant la résolution

des équations aux mailles de Hardy-Cross, d’un module de saisie des données et, le plus

souvent, d’un module graphique permettant de visualiser les éléments modélisés et les

résultats de simulation.

Les logiciels de modélisation sont développés depuis les années 70. Ils ont connu une

évolution, qui a vu l’apparition de plusieurs types de logiciel, qui sont listés ci-dessous :

Les logiciels statiques calculant la répartition des débits et des pressions sur le

réseau à un instant donné. Développés dans les années 70, ils ont souvent été utilisés pour

le dimensionnement des extensions et des renforcements dans les conditions de

fonctionnement les plus critiques à savoir l’heure de pointe du jour de pointe.

Les logiciels statiques enchaînés, qui enchaînent des calculs statiques à un pas de

temps défini par l’utilisateur. Les résultats d’un calcul à un pas de temps deviennent

les hypothèses de calcul au pas de temps suivant. Ils n’intègrent pas les

asservissements et la description des ouvrages y est relativement succincte. Ils ont

Page 51: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

37

été utilisés principalement pour l’étude en temps différé du comportement du

réseau.

Les logiciels dynamiques qui fonctionnent sur le même principe d’enchaînement des

calculs que les logiciels statiques enchaînés. Mais ils sont capables de prendre en compte

toutes les consignes d’asservissement, d’affecter des variables de contrôle à chaque

groupe de pompage avec des niveaux de priorité, de calculer les coûts énergétiques, de

gérer plusieurs catégories de demande avec des profils différents. Certains logiciels

reprennent les calculs si des consignes d’asservissement interviennent au cours d’un pas

de temps, (comme consigne de pression d’arrêt atteinte ou de démarrage de pompe,

Niveau de vidange complète d’un réservoir, …). Ces outils permettent plus généralement

une meilleure prise en compte de la gestion du réseau et de ses ouvrages. Ils seront de ce

fait utilisés pour l’optimisation des systèmes et l’aide à la décision pour la gestion des

crises (rupture d’une conduite maîtresse, arrêt d’une unité de production, …).

Les logiciels dynamiques de dernière génération intègrent également des algorithmes de

propagation de substances réactives ou conservatrices permettant en théorie de suivre

leur évolution dans le temps dans le réseau. L’utilisation encore récente de ces

fonctionnalités a souvent pour objectif de diagnostiquer et d’optimiser les stratégies de

chloration.

II.3.7. Les logiciels de modélisation des réseaux d’AEP

De nos jours, les outils de modélisation sont devenus incontournables à la gestion des

réseaux d’eau potable. De plus en plus de gestionnaires de réseaux d’eau potable se dotent

d’outils de modélisation pour encore mieux concevoir, gérer et prévoir l’évolution des

ouvrages hydrauliques et la qualité de l’eau distribuée.,

II.3.7.1. Les algorithmes utilisent dans la modélisation hydraulique

Les programmes informatiques des modèles hydrauliques différents dans leur

formulation mathématique, deux méthodes sont généralement utilisées pour résoudre une des

quatre formulations des équations de continuité et de conservation d'énergie qui sont

nécessaire pour la mise en œuvre de logiciel de modélisation hydraulique :

Page 52: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

38

La méthode de Hardy Cross a permis la mise au point de plusieurs logiciels de calcul

d'écoulement dans les réseaux maillés en charge et qui sont disponibles actuellement

(exemple : LOOP).

D'autres méthodes peuvent être utilisées pour le calcul des réseaux maillés. Parmi

celles-ci, il y a des méthodes anciennes, qui ne sont plus utilisées actuellement, comme les

méthodes graphiques, les méthodes utilisant l'analogie avec les circuits électriques et les

méthodes basées sur la transformation du réseau en réseau ramifié équivalent. Suite au

développement des ordinateurs et des méthodes numériques, d'autres méthodes, plus

modernes et surtout plus rapides, sont proposées (exemple : la méthode de NewtonRaphson).

La méthode de Newton-Raphson (exemple: epanet).

La méthode de la théorie linéaire

II.3.7.2. Quelques logiciels de simulation des réseaux

Actuellement il existe plusieurs logiciels pour la modélisation et la gestion des eaux,

parmi ces logiciels on peut citer :

AQUIS

AQUIS (B. Coelho & A. Andrade-Campos, 2014) est un outil pour la modélisation et la

gestion de la distribution de l'eau, c’est un programme qui comprend non seulement la

simulation hydraulique mais également la conception et optimisation du réseau. Il intègre des

modules de calibrage, SCADA et SIG. Il a la capacité à travailler en temps réel et en ligne.

AQUIS a été développé par la société danoise Sept Technologies et est basé sur la technologie

de deux plates-formes établies - LICWATER et WATNET (www.7t.dk/aquis).

AQUADAPT,

Qui permet l'optimisation de l’énergie pour l'ensemble de réseau. Il intègre un module

SCADA; (www.derceto.com/Products-Services/Derceto-Aquadapt⟩;

EAU SYNERGEE

L'eau est le successeur Synergee Stoner à leur origine les services Workstation Stoner.

Eau Synergee est basé autour du produit de base Synergee développé pour le gaz et

Page 53: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

39

d'électricité et d'eau bien sûr. Stoner fait l'affirmation audacieuse que «Synergee est la famille

la plus avancée de la modélisation des réseaux et des applications de gestion des modules

disponibles dans le commerce". Offert en format modulaire, a Synergee modules pour

permettre de relier les systèmes d'information à la clientèle, SCADA reliant, à l'isolement et la

simplification du modèle principal (Http://www.advantica.biz).

ELYXAQUA

Elyx Aqua est une application logicielle de gestion cartographique des réseaux, dédiée

aux métiers de l'eau et de l'assainissement. Cette solution repose sur les modules de la suite

logicielle Elyx : Elyx Office, Elyx Web, Elyx Manager et Elyx Mobile. Elyx Aqua s'appuie

sur un modèle de données éprouvé, complet et adaptable afin d'intégrer toutes les données et

ainsi répondre aux besoins fonctionnels exprimés. Les logiciels du Groupe STAR-APIC sont

considérés comme les meilleures solutions SIG pour la gestion des réseaux d'eau et

d'assainissement et ce, depuis de nombreuses années. En France et à ailleurs, de très

nombreux gestionnaires de réseaux ont opté pour cette technologie. (http://www.star-

apic.com/)

EPANET

Le logiciel Epanet est né suite à une initiative du Congrès des Etats–Unis qui visait à

protéger les ressources naturelles du pays. Dès lors, l’EPA (US Environnemental Protection

Agency) a été chargée de développer des techniques permettant de mieux appréhender les

écoulements et les transformations de l’eau dans un réseau d’adduction d’eau potable

(www.epa.gov/ORD/NRMRL/wswrd/epanet.html).

FINESSE

FINESSE est un produit bien connu du SCP. FINESSE a été développé par l'eau

Software Systems WSS - Royaume-Uni. (www.eng.dmu.ac.uk/wssys/software.htm).

GANET

Ganet est un produit de simulation basé sur l'utilisation d’Epanet et des algorithmes

génétiques développés par l'Université d'Exeter en 1997

(http://www.ex.ac.uk/optimalsolutions)

Page 54: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

40

H2ONet

H2ONet est un package d'AutoCAD, composé d'une suite complète d'outils. Il a un fort

accent sur la vitesse, la facilité d'utilisation, et aussi un accent ferme sur la conception du

réseau et des modules offrant de réadaptation pour concepteur et le gestionnaire du réseau.

http://www.innovyze.com/products/

INFOWORKS

Est le successeur de Windows InfoWorks Wallingford Software, basée sur le moteur de

simulation WESNet. InfoWorks aussi est un module de simulation hydraulique et la qualité

des eaux. Il est fortement basé sur le moteur de simulation WESNet

KANET

KANET est un outil développé à Université de Karlsruhe les ingénieurs de l’IWG

comme nstrument de planification. Le logiciel KANET est basé sur la décomposition du

graphe du réseau et propose ainsi la possibilité de faire des simulations pour des parties du

réseau simplifiées et pour différents cas de demande. De plus, le temps nécessaire aux calculs

est réduit d’une manière efficace, ce qui est un facteur important lorsqu’il s’agit de traiter des

données en temps réel www.kanet-wasserversorgung.de

NETBASE

NetBase est développé par Crowder, une entreprise anglaise ( Crowder et co Ltd ), en

1985 au Royaume-Uni. NetBase est un système intégré de gestion de distribution d'eau et des

réseaux d’assainissement. Il fournit les outils pour surveiller les performances de plusieurs

façons, pour répondre aux exigences réglementaires, planifier, développer et exploiter des

réseaux afin de répondre à des stratégies particulières de l'utilisateur final. NetBase remplit un

concept simple mais puissant d'une seule base de données intégrée pour la gestion de la

distribution et les réseaux d’assainissement et les systèmes de drainage. Ses interfaces avec

les données et les applications en font à la fois souples et dynamique.

(http://www.crowderconsult.co.uk/lang/en/netbase/content_pages/)

Page 55: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

41

PORTEAU

Porteau est un logiciel de simulation hydraulique et de cinétique adapté aux réseaux

d’eau sous pression. Il est développé par le Cemagref de Bordeaux en 2001. Il permet : une

schématisation du réseau, la représentation de son fonctionnement en pointe, sur un horizon

de plusieurs heures ou jours, la modélisation de la qualité avec temps de séjour, cinétique et

traçage de provenances. Il est utile comme outil de gestion et d’aide au dimensionnement.

PICCOLO

Piccolo est un logiciel de modélisation des réseaux d’eau potable, développé par le

Safège en 1986. C’est un outil général de simulation des écoulements en charge dans les

réseaux maillés. A partir des données du réseau, Piccolo calcule les vitesses, les pressions, les

débits, l'évolution des niveaux de réservoirs…Les calculs peuvent concerner un régime

statique ou dynamique, c’est un outil puissant de modélisation des réseaux de fluides (eau

potable, eau surchauffée) (Pez G. et al., 1996)

RESODO

RESODO permet de modéliser les réseaux de tout type et de toute dimension : petits

réseaux ruraux, grands réseaux urbains, prise en compte d'une grande gamme d’équipements :

réservoirs, pompes, vannes régulatrices, etc. Il propose de nombreux outils d'aide à

l'utilisateur, parmi lesquels : calculs des pressions résiduelles, calculs de défense contre

l'incendie, estimation des fuites, calculs de bilans, etc. RESODO utilise le moteur de calcul

EPANET pour effectuer ses calculs hydrauliques et de qualité

StruMap

StruMap est une version de Geodesys pour la modélisation hydraulique du progiciel

SIG StruMap, en utilisant un moteur de simulation basée sur EPANET intégré au SIG. La

modélisation avec StruMap offre une gamme complète de fonctionnalités : modélisation de la

qualité de l'eau, évaluation des fuites, etc.

Page 56: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

42

Water CAD

Est une application conviviale qui permet de modéliser le comportement hydraulique et

la qualité de l’eau dans les réseaux de distribution. Pour gérer leurs infrastructures, de

nombreux services publics, services municipaux et bureaux d’étude font confiance à Water

CAD, un outil fiable et économique qui facilite la prise de décision. Du contrôle des systèmes

de lutte contre les incendies à l’analyse de l’eau, de la consommation énergique et à la gestion

des coûts, Water CAD aide à analyser, concevoir et optimiser les réseaux de distribution

d’eau

II.4. Conclusion

Le problème de calcul des réseaux de distribution en charge est devenu de plus en plus

compliqué ; ce calcul qui fait appel soit à des abaques ou à des tables pour le choix des

diamètres soit à l'utilisation de programme et logiciels, ces derniers sont basés sur des

relations et formules ou l'estimation et le choix de certains coefficients s'avère difficile et

imprécis tel que le coefficient de Williams-Hazen qui remplace la rugosité absolue de la

conduite, ce coefficient beaucoup utilisé dans certains pays Anglo-saxons pour l'évaluation du

gradient hydraulique,

les algorithmes traditionnels ont déjà été incapable de satisfaire le besoin de résoudre.

La méthode de Hardy Cross malgré ses difficultés de convergence qui dépendent du

choix des estimées initiales des débits dans les conduits, reste très utilisée par les bureaux

d'étude dans l’analyse et la conception des réseaux de distribution d’eau. Son avantage réside

probablement dans la facilité qu’elle offre pour la programmation ainsi que par son aptitude à

être appliquée manuellement.

La modélisation hydraulique n’est pas seulement un outil de calcul et de

dimensionnement

rapide et efficace, mais un moyen indispensable pour la conception, analyse, planification et

gestion rationnelle des réseaux.

La base d’un modèle hydraulique d’un système de transfert sous pression est la

formulation mathématique des lois et équations des écoulements en charge, ce modèle

Page 57: Bouheniche rida memoire final

Chapitre II. Calcul des réseaux de distribution

43

cherche à résoudre les équations de continuité et de conservation d’énergie, pour cela, nous

avons vu que tous les modèles utilisent les méthodes suivantes pour résoudre ces équations :

- Méthode de Hardy Cross

- Méthode de la théorie linéaire

- La méthode de Newton-Raphson

- Méthode de linéarisation de Wood Charles

- La méthode des éliment fini

Depuis une vingtaine d'années, les nouvelles possibilités offertes par l'informatique ont

permis la mise au point de nombreux logiciels de calcul d'écoulement dans les réseaux

maillés.

L’utilisation du logiciel informatique (EPANET, AutoCAD, Covadis) dans le calcul des

réseaux d’AEP à certainement changer la qualité des résultats qui sont basés auparavant sur

les applications numériques de diverses formules de calcul.

Le chapitre trois sera consacré à la mise à jour du programme CRDEP.MMR élaborer en

2014 par A. DAHMANE , la mise à jour consiste à rendre le programme plus souple

assurant les taches d’impression, de sauvegarde et lui ajouter une autre partie relative à la

simulation des réseaux existants .

Page 58: Bouheniche rida memoire final

Chapitre III :

Mise à jour de programme

CRDEP.MMR

Page 59: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

44

Chapitre III

Mise à jour de programme CRDEP.MMR.

III.1.Introduction

L’objectif principal du présent chapitre est de faire une mise à jour de programme

CRDEP.MMR. Version de (2014)

C’est un programme de calcul des réseaux de distribution basé sur les relations de la

méthode du model rugueux de référence MMR. Elaborée par ABDELAZIZ DAHMANE

pour l’obtenir de mémoire de master en hydraulique urbaine promotion de juin 2014.

Le programme proposé présente des anomalies telles que l’impression, la sauvegarde, la

possibilité de modifier des données précédentes d’un réseau calculé auparavant.

L’objectif est de porter des modifications sur l’ancien avec une licence GPL open

source.

Les modifications portent également sur l’insertion du programme SRD.MMR élaboré

en 2015 par et qui gère la simulation de réseaux existants (principalement la détermination

des débits en route dans un réseau existant).

Donc le nouveau programme CRDEP.MMR 2016 englobe deux programmes en même

temps le CRDEP.MMR 2014 pour le calcul d’un réseau à projeter et le SRD.MMR 2015 pour

la simulation d’un réseau existant (figure III.1) est de faire une multi-Platform compatible

avec des multi system d’exploitation :

Microsoft Windows XP, 7, 8, 8.1,10.

Linux

Unix

Apple macintosh

Smart phone (Android, IOS)

Page 60: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

45

Figure III.1 : Présentation générale du programme CRDEP.MMR 2016

Page 61: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

46

Figure III.2 : Le diagramme de calasses

Page 62: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

47

III.2 Outil de développement DELPHI RAD Studio Seattle (RAD (& IDE)

Delphi est l'EDI Object Pascal le plus puissant du marché, associé à une bibliothèque de

composants pour le développement natif multiplateforme, à des services cloud flexibles et à

une connectivité étendue à l'IoT. Delphi intègre de puissants contrôles VCL pour Windows 10

et prend en charge le développement FMX pour Windows, Mac et systèmes mobiles. Delphi

est la solution de référence pour accélérer les développements robustes d'entreprise

(Enterprise Strong Development™). Il prend en charge une mémoire étendue pour les projets

complexes et de multiples moniteurs et intègre un inspecteur d'objets amélioré et bien d'autres

nouveautés. Delphi est cinq fois plus rapide pour développer et déployer des applications sur

de multiples appareils bureautiques et mobiles, environnements cloud et bases de données (y

compris sous Windows 10 32 et 64 bits).

III.2.1.Multi système FireUI

RAD Studio intègre le concepteur multisystème FireUI et une trame d'interface

multiplateforme constituant la seule solution permettant de créer des applications natives

compilées pour différents appareils à partir d'une seule base de code source. La plupart des

autres éditeurs prenant en charge le développement natif multiplateforme exigent néanmoins

que des interfaces spécifiques soient codées sur chaque plateforme.

Figure III.3 : prévisualisation en cours de conception avec FireUI

Page 63: Bouheniche rida memoire final

Chapitre III.

RAD Studio est tout ce dont

d'applications mobiles. Le nouveau module de prévisualisation applicatif FireUI accélère le

développement en faisant gagner un temp

III.2.2.Leader du développement d'applications IoT

RAD Studio aide les développeurs à pleinement exploiter la puissance de l'Internet of

Things (IoT). Ajoutez de nouvelles fonctionnalités à des applications bur

existantes en leurs intégrants différents dispositifs

services cloud, etc.

L'écosystème de l'Internet des objets intègre quotidiennement toutes sortes de nouveaux

gadgets et dispositifs mobiles. Leurs interconnexions ouvrent aux utilisateurs de toutes

nouvelles perspectives d'expérience intégrant leur environnement physique.

avec une bibliothèque complète de dispositifs IoT.

Chapitre III. Mise à jour de programme CRDEP.MMR

48

RAD Studio est tout ce dont l’utilisateur a besoin pour se lancer dans le développement

d'applications mobiles. Le nouveau module de prévisualisation applicatif FireUI accélère le

développement en faisant gagner un temps considérable.

Figure III.4 : Multisystème FireUI

Leader du développement d'applications IoT

RAD Studio aide les développeurs à pleinement exploiter la puissance de l'Internet of

Things (IoT). Ajoutez de nouvelles fonctionnalités à des applications bureautiques et mobiles

leurs intégrants différents dispositifs, capteurs, systèmes de données d'entreprise,

L'écosystème de l'Internet des objets intègre quotidiennement toutes sortes de nouveaux

les. Leurs interconnexions ouvrent aux utilisateurs de toutes

nouvelles perspectives d'expérience intégrant leur environnement physique.

avec une bibliothèque complète de dispositifs IoT.

jour de programme CRDEP.MMR

lancer dans le développement

d'applications mobiles. Le nouveau module de prévisualisation applicatif FireUI accélère le

RAD Studio aide les développeurs à pleinement exploiter la puissance de l'Internet of

eautiques et mobiles

, capteurs, systèmes de données d'entreprise,

L'écosystème de l'Internet des objets intègre quotidiennement toutes sortes de nouveaux

les. Leurs interconnexions ouvrent aux utilisateurs de toutes

nouvelles perspectives d'expérience intégrant leur environnement physique. Delphi est livré

Page 64: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

49

Figure III.5 : Leader du développement d'applications IoT.

Figure III.6 : Caractéristique de Delphi RAD

Page 65: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

50

III.3. Système de Gestion de Bases de Données

Les applications utilisent évidement des données stockées dans une base de données.

Pour créer cette base et la gérer convenablement, un utilisateur a besoin de la gestion des

données en réseau.

SQLite comme système de gestion de bases de données puisqu’il est portable et on peut

déplacer les données facilement.

SQLite est une bibliothèque écrite en C qui propose un moteur de base de données

relationnelle accessible par le langage SQL. SQLite implémente en grande partie le standard

SQL-92 et des propriétés ACID.

Contrairement aux serveurs de bases de données traditionnels, comme MySQL ou

PostgreSQL, sa particularité est de ne pas reproduire le schéma habituel client-serveur mais

d'être directement intégrée aux programmes. L'intégralité de la base de données (déclarations,

tables, index et données) est stockée dans un fichier indépendant de la plateforme.

D. Richard Hipp, le créateur de SQLite, a choisi de mettre cette bibliothèque ainsi que

son code source dans le domaine public, ce qui permet son utilisation sans restriction aussi

bien dans les projets open source que dans les projets propriétaires. Le créateur ainsi qu'une

partie des développeurs principaux de SQLite sont employés par la société américaine

Hwaci2.

SQLite est le moteur de base de données le plus distribué au monde, grâce à son

utilisation dans de nombreux logiciels grand public comme Firefox, Skype, Google Gears,

dans certains produits d'Apple, d'Adobe et de McAfee et dans les bibliothèques standards de

nombreux langages comme PHP ou Python. De par son extrême légèreté (moins de 300

Kio3), il est également très populaire sur les systèmes embarqués, notamment sur la plupart

des smartphones modernes : l'iPhone ainsi que les systèmes d'exploitation mobiles Symbian et

Android l'utilisent comme base de données embarquée. Au total, on peut dénombrer plus d'un

milliard de copies connues et déclarées de la bibliothèque.

Page 66: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

51

Figure III.7 : L’interface de SQlite.

Tableau III.1 : Dictionnaire des données

Nom Abréviation Type Table

PVC PVC REAL Diamètres

PEHD PEHD REAL Diamètres

AMIANTE AMIANTE REAL Diamètres

FONTE FONTE REAL Diamètres

ACIER ACIER REAL Diamètres

Nom de projet ID_Project INTEGER DNTrancons

Numéro de tronçon NT INTEGER DNTrancons

Nœud amont NAmont nvarchar DNTrancons

Nœud aval Naval nvarchar DNTrancons

Diamètre calculé DC REAL DNTrancons

Type de conduite TC nvarchar DNTrancons

Diamètre normalisé DN REAL DNTrancons

Cote piézométrique amont CPAmont REAL DNTrancons

Cote piézométrique aval CPAval REAL DNTrancons

Pert de charge DHT REAL DNTrancons

Le gradient de pet de charge J1 REAL DNTrancons

Le D bar D REAL DNTrancons

Page 67: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

52

Le R bar R REAL DNTrancons

Le facteur de correction (Ѱ) : Psi REAL DNTrancons

Le coefficient de frottement F REAL DNTrancons

Pert de charge 2 J2 REAL DNTrancons

Pert de charge total PDCT REAL DNTrancons

Débit corrige QCorrige REAL DNTrancons

La vitesse V REAL DNTrancons

La cote piézométrique 2 CPAmont_Result REAL DNTrancons

Le diamètre normalisée intérieur DNint REAL DNTrancons

Pert de charge total 2 PDCT2 REAL DNTrancons

La vitesse calcule par Dcal Vcal REAL DNTrancons

Le mot de passe Password nvarchar Logins

Le nom de projet Project nvarchar Logins

Type de réseau Type nvarchar Logins

Statu de projet Status INTEGER Logins

Le numéro de projet ID_Project INTEGER Tançons

Le numéro de tronçon NT INTEGER Tançons

Maille principal MP INTEGER Tançons

Maille adjacent MA INTEGER Tançons

Nœud amont NAmont nvarchar Tançons

Nœud aval Naval nvarchar Tançons

Sens d’écoulements Sens nvarchar Tançons

Débit Q REAL Tançons

Cot terrain naturel amont CTNAmont REAL Tançons

Cot terrain naturel aval CTNAval REAL Tançons

Pression au sol amont PSAmont REAL Tançons

Pression au sol aval PSAval REAL Tançons

Longueur de tronçon Long REAL Tançons

Régusité abs Reguosite REAL Tançons

Le débit corrigé Q2 REAL Tançons

Page 68: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

53

III.4.Principe de calcul du programme CRDEP.MMR (2014)

Le logiciel se base dans le calcul du réseau maillé sur la méthode de HARDYCROSS

qui repose sur deux lois, à savoir la loi des nœuds qui affirme que le débit entrant dans un

nœud est quoiqu’il arrive égal au débit sortant de ce nœud quel que soit le nombre d’entrées et

de sorties dans ce nœud.

La loi des mailles dit quant à elle que la différence de charges ∆H (la charge égale à la

somme de la pression et de la cote au sol au point considéré) entre deux nœuds est égale à la

perte de charge entre ces deux nœuds (voir figure ci-après).

Ainsi, le programme utilise les relations de la méthode MMR pour le calcul des diamètres et

les pertes de charge en respectant la méthode de Hardy-Cross.

III.4.1.Rappel des relations utilisées par les programmes CRDEP.MMR 2014 et SRD.MMR

2015

Proposée par Achour (2007), Professeur au département d’Hydraulique de Biskra et

chef du laboratoire LARHYSS c’est une nouvelle méthode et approche pour le calcul de

l'écoulement turbulent dans une conduite. Elle repose d'une part sur les relations

universellement admises de Darcy-Weisbach et de Colebrook-White, et sur un modèle

rugueux de référence d'autre part. Les relations explicites proposées par cette méthode

donnent des résultats très acceptables. Elles s'appliquent dans toute la gamme de rugosités

relatives 0≤ /D≤5.10-2 et pour toute valeurs du nombre de Reynolds R>2300.

III.4.2.Etapes de calcul proposé

a) Cas du programme CRDEP.MMR 2014

En application de cette méthode les principales relations utilisées sont celles de la

théorie du modèle rugueux de référence d’une part et la relation de Darcy-Weisbach pour

l’évaluation des gradients des pertes de charge d’autre part.

Les étapes préconisées pour un tel calcul sont :

Proposition de pressions aux niveaux des nœuds (Pressions aux sols) variant entre 10 m.c.e

et 40 m.c.e et qu’il faut vérifier après le calcul hydraulique (choix du diamètre) ;

Page 69: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

54

Détermination du gradient hydraulique J pour chaque tronçon suivant la relation :

� =∆ℎ

�=

���� − ����

�=

��� − (��� − ��)

� , (�) (01)

Ps : Pression supposée au point considéré (m.c.e) ;

CTN : Cote du terrain naturelle du premier point reliant le réseau au réservoir(m) ;

CrR : Cote radié du réservoir (5m) ;

L : Longueur du tronçon (m) ;

Elaboration d’une réparation arbitraire des débits (cas des réseaux maillés)

Détermination du diamètre géométrique D pour chaque tronçon en fonction des débits des

tronçons et des gradients J en application de la relation (05) ou (06) ou (08).Cette

évaluation repose sur le calcul des paramètres � , �, , et �∗ du modèle rugueux de

référence. Selon la relation (02), le diamètre � est :

�=(2��)�/�� ���

���

�/�

(02)

Le nombre de Reynolds � est, en vertu de la relation (03) pour � = Q :

� =��

��� (03)

Les paramètres � �� �permettent d’évaluer le facteur selon la relation (04), soit :

� = 1.35 �− log ��/��

�.��+

�.�

����

��/�

(04)

Le diamètre D se calcule par la relation (05), soit,

� = �� (05)

Le nombre de Reynolds �∗ est donné par la relation :

�∗ = �� �⁄ � (06)

Le diamètre peut se calculé aussi par la relation (07), après avoir évalué le nombre de

Reynolds R en application de (08), soit :

Page 70: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

55

� = ��

��� (07)

�= �

��∗log �

�/��

�.�+

��.��

�∗ ���

(08)

Comme également, le diamètre D peut être déduit de la relation de Darcy après avoir

évalué le coefficient de frottement f, c'est-à-dire :

� =��

16 (09)

Ainsi, le diamètre D est :

� = �8���

�����

� �⁄

(10)

Après avoir déterminé le diamètre géométrique qui est un diamètre calculé on choisit un

diamètre normalisé ou commercialisé (qui diffère généralement de celui calculé) : �� =

�(�)

On vérifie avec le diamètre normalisé les paramètres suivants :

Le gradient de la perte de charge J selon la relation de Darcy :

� =����

����� (11)

Le coefficient de frottement sera déterminé par la relation (12), c'est-à-dire la relation :

� = �−2 log �

3.7D+

10.04

���

��

(12)

Où le nombre de Reynolds R sera évalué en application de da relation (13) :

� = 2� �− log �

�.��+

�.�

��.�����

(13)

Le nombre de Reynolds R sera obtenu à partir de la relation (13) :

� = 4�/( ���) (14)

L’évaluation de la perte de charge totale pour chaque tronçon est donnée par :

∆Ht = J.L (m). (15)

Page 71: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

56

En fin la vérification des pressions aux sols au niveau de chaque nœud et leurs

comparaisons avec les pressions supposées au début (première étape) :

�� = ��� − ∆�� (�. �. �) (16)

La correction Maille principale(CMP) :

CMP= - �∆��

��∆��

(17)

Le Débit corrigé Qcor :

Qcor= Q+CMP+CMA (18)

La cote piézométrique (CP)

CP=CTN-∆ht (19)

La pression de sol(PS) :

PS=CP-CTN (20)

b ) Cas du programme SREP.MMR 2015

En application de cette méthode les principales relations utilisées sont celles de la

théorie du modèle rugueux de référence d’une part et la relation de Dary-Weisbach pour

l’évaluation des gradients des pertes de charge d’autre part.

Les étapes préconisées pour un tel calcul sont :

Proposition de pressions aux niveaux des nœuds (Pressions aux sols) variant entre 10 m.c.e

et 40 m.c.e et qu’il faut vérifier après le calcul hydraulique (après avoir déterminé les

débits en route) ;

Détermination du gradient hydraulique J pour chaque tronçon suivant la relation :

� =∆ℎ

�=

���� − ����

�=

��� − (��� − ��)

� , (�) (21)

Ps : Pression supposée au point considéré (m.c.e) ;

CTN : Cote du terrain naturelle du premier point reliant le réseau au réservoir(m) ;

CrR : Cote radié du réservoir (5m) ;

Page 72: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

57

L : Longueur du tronçon (m) ;

Pour les valeurs données du diamètre géométrique D de chaque conduite, la rugosité

absolue , le gradient de la perte de charge unitaire J et la viscosité cinématique du

liquide véhiculé, nombre de Reynolds caractérisant l’écoulement dans le modèle rugueux

de référence R est calculé en application de la relation (18) , (Achour and Bedjaoui, 2013)

c’est à dire :

3

24gJD

R (22)

Les paramètres D, et Rpermettent d’évaluer le débit volume Q véhiculé par chaque

conduite (Achour and Bedjaoui ,2006 ; Achour, 2012 ; Achour and Bedjaoui ,2013) :

RDR

DRDQ

04.10

7.3log

84

1 (23)

On vérifie avec les valeurs du débit Q ainsi calculé et le diamètre D de la conduite le

gradient de la perte de charge unitaire obtenu dans l’étape 1 en appliquant la relation de

Darcy (1854):

52

28

Dg

fQJ

(24)

Le coefficient de frottement sera déterminé par la relation, (Achour and Bedjaoui ,2013) :

2

04,10

7,3log2

R

Df

(25)

En fin avec le diamètre D, le débit Q, la rugosité absolue de la conduite et la viscosité

cinématique du liquide qui sont connus, la vérification des pressions supposées au début

(première étape) peut faire l’objet d’une validation des résultats obtenus.

Page 73: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

58

III.4.3.Données à introduire

Les données nécessaires à introduire par l’utilisateur sont :

NT : Numéro de tronçons

N Amont : Numéro du nœud amont du tronçon.

N Aval : Numéro du nœud aval du tronçon.

CTN Amont (m) : la cote du terrain naturel du nœud amont du tronçon (m).

CTN Aval (m): la cote du terrain naturel du nœud aval du tronçon (m).

PS Amont : Pression imposée pour le nœud amont du tronçon en (m.c.e).

PS Aval : Pression imposée pour le nœud aval du tronçon en (m.c.e).

L (m) : Longueur du tronçon (m).

TC : Type de conduite (PEHD, PVC, Amiante, Fonte et Acier).

Sens : sens d’écoulement au niveau de chaque tronçon selon la maille principale ou

adjacente

Rugosité initiale de la conduite utilisée pour ce tronçon. Qui porte les valeurs

:(0,001/0,0001/0,00001).

Q : le débit de chaque tronçon (cas de dimensionnement)

D : le diamètre (cas de simulation)

III.4.4.Résultats obtenus

Les résultats obtenus sont :

Dcal : le diamètre calculé (m) ;

DN : le programme choisir un diamètre normalisé automatiquement à l’aide de

tableau ; des diamètres disponible et l’utilisateur peut le changer ;

V : la vitesse d’écoulement (m/s) ;

PDCT : perte de charge totale ;

La vérification des pressions ;

Q : Débit (cas de simulation de réseau) ;

PS : Les pression vérifiée

Page 74: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

59

Figure III.8 : Exemple d’un code de calcul

III.5. Interfaces de CRDEP.MMR2016

L’interface du programme est disponible en 3 langues (arabe, français, anglais). Il est

composé de 06 unit et disponible aussi pour multi system d’exploitation (bureautique ou

Smartphone) Figure III.9.

Page 75: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

60

Figure III.9 : Les interface disponible

III.5.1.Utilisation du programme CRDEP.MMR2016

Le présent programme après mise à jour est doté de deux fonctions principales (Figure

III.10) qui sont

1- La première fonction est celle du dimensionnement d’un nouveau réseau pour calculer

les diamètres, les vitesses au niveau des tronçons et la vérification des pressions aux

nœuds.

2- La deuxième fonction est celle de la simulation d’un réseau existant pour vérifier les

débits repartis dans les tronçons en fonction des pressions réelles de service.

Unit

Les interface pour

Muli système

d’exploitation

(boutique et

smartphone)

Page 76: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

61

Figure III.10 : Fenêtre du choix du type de fonction désirée

III.5.2. Dimensionnement d’un nouveau réseau

En confirmant le choix qui porte sur le calcul d’un nouveau réseau, l’utilisateur avant de

commence par introduire les données au menu de l’application. Il devra saisir un nom

d’utilisateur, le mot de passe pour protéger ses données et pour pouvoir rappeler le fichier

crée pour d’éventuelles modifications sur les données ou rectifications (Figure III.11).

Le système vérifie le nom d’utilisateur et le mot de passe. Si les informations ne sont

pas correctes le système affiche un message d’erreur sinon le système affiche le menu

principal.

Figure III.11 : Fenêtre de création d’un nouveau fichier ou le rappel d’un fichier existant

Page 77: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

62

III.5.3. Interface principale

C’est la fenêtre principale du programme, (figure III.12) qui représente l’interface

typique du programme. On remarque que l’application est composée d’une seule interface

mais qui contient plusieurs pages (onglets) qui permettent de naviguer entre les services

offerts par l’application.

La forme de menu principal contient la barre de menu qui permet d’accéder aux

différents formulaires.

Figure III.12 : Fenêtre principale

III.5.3.1.La barre de menu

La figure III.13 représente l’affichage de la barre de menu de programme. Elle se situe

en haut de fenêtre qui s’ouvre à l’exécution de programme, c’est l’élément d’interface

graphique qui permet d’accéder aux fonctions de programme elle est constituée des fonctions

suivantes : (Figure III.13)

Page 78: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

63

Figure III.13 : Barre de menu

III.5.4.Fenêtre de choix de type de réseau

Une fois l’utilisateur a décidé de faire me calcul d’un nouveau réseau et après avoir

validé ce choix par confirmation, une fenêtre s’affiche (Figure III.14) où, il pourra faire un

autre choix entre le type de réseau à dimensionner (maillé ou bien ramifié) selon le besoin.

Figure III.14 : Fenêtre de choix de type de réseau

III.5.5.L’introduction des données

Si l’utilisateur opte vers le choix nouveau projet, il commence par introduire les

données de chaque tronçon, commençant par la conduite de distribution principale (première

ligne. Pour le premier tableau dans la même fenêtre, l’utilisateur doit d’abord initialiser les

données et introduire :

Le nombre total des tronçons

Le nombre total des nœuds

Page 79: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

64

Après la saisie des deux valeurs chacune dans sa case, l’utilisateur clique sur l’icône

OK, le deuxième tableau sera modifié et des lignes seront créés automatiquement.

En fin, après l’introduction des données précédentes pour chaque tronçon, l’exécution

du programme se fera cliquant sur l’icône calculer, le programme en une première étape va

calculer le diamètre de chaque tronçon (DC). Figure III.15

Figure III.15 : Fenêtre d’introduction des données

III.5.6. Choix de diamètre normalisé

Dans cette fenêtre, trois colonnes s’affichent, la colonne des diamètres calculés (DC) en

fonction des débits véhiculés par chaque tronçon et le gradient hydraulique engendré, dans la

colonne (TC) l’utilisateur peut choisir le type de conduite, dans la base de données du

programme on trouve des conduites en PVC, PEHD, Amiante, Fonte et Acier.

Si l’utilisateur choisit un type de conduite la colonne (DN) se remplira automatiquement

et s’affichera un diamètre convenable grâce à une autre base de données intégrée dans le

Page 80: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

65

programme (diamètres disponibles sur le marché national en fonction du type du matériau

sélectionné par l’utilisateur).

Le programme offre la possibilité à l’utilisateur de confirmer ces diamètres

automatiquement ou bien de les réintroduire manuellement.

Après ce le choix des diamètres normalisés en cliquant sur l’icône calcul, le programme

exécute la première itération dans le cas de réseau maille en respectant les deux lois de Hardy-

Cross.

Figure III.16 : Fenêtre du choix de type de conduite avec le tableau des diamètres

disponibles

III.5.7. Affichage des résultats

C’est la dernière fenêtre (Figure III.17) qui s’affichée après l’exécution du programme,

deux cas qui se présentent

Si l’équilibre des mailles n’est pas atteint, l’utilisateur peut choisir une deuxième

itération en cliquant sur l’icône Nouvelle itération et ainsi de suite jusqu’à à avoir la somme

des pertes de charge dans toutes les mailles est nulle. Cette opération permet une infinité

d’itération.

Dans le cas du réseau ramifié une seule fenêtre qui s’affiche .

L’icône rétablir le calcul, permet à l’utilisateur de rectifier les données introduites sur

un tronçon quelconque.

Page 81: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

66

Figure III.17 : Fenêtre d’affichage des résultats

III.5.8.Impression des résultats

C’est une nouvelle fonction ajoutée au programme de 2014, l’impression se déclenche

en cliquant sur l’icône imprimer, également cette fonction permet à l’utilisateur d’enregistrer

son travail si l’impression n’est pas effectuée (Figure III.18).

Figure III.18 : Fenêtre d’impression ou de sauvegarde des résultats

Page 82: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

67

III.6. Interface pour Smartphone

Pour une utilisation simple et rapide dans les chantiers une version compatible avec les

Smartphone est offerte et disponible on Google store et Appel store.

Figure III.19 : Interface du programme CRDEP.MMR 2016 pour les smart phones

III.6. Espace de développement de programme sur WEB

On a créé un site web pour faire un espace de développement rapide et libre pour les

étudiants des autres promotions et pour les gens intéressés par la programmation en

hydraulique. Cet espace permet aux internautes de télécharger le programme dans sa versions

2016 et de proposer des aidées pour le développement du programme.

Le site (Figures. III.20 et III.21) est disponible avec deux interfaces arabes et françaises sur.

(http://www.mmr-soft.ml).

Page 83: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

68

Figure III.20: L’interface de site web

Page 84: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

69

Figure III.21 : L’interface de site web

Page 85: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

70

III.6.1.Les forges de développement

III.6.1.1.Définition

En informatique, une forge désigne un système de gestion de développement

collaboratif de logiciel.

III.6.1.2.Objectifs

L'objectif d'une forge est de permettre à plusieurs développeurs de participer ensemble

au développement d'un ou plusieurs logiciels, le plus souvent à travers le réseau Internet. De

fait, une forge permet de rassembler des projets et des développeurs. Mais la plupart des

forges permettent aussi à des personnes ne pratiquant pas la programmation de participer,

comme par exemple les traducteurs ou les graphistes, ou les utilisateurs qui s'entraident dans

des forums ou soumettent des rapports de bogues. Une forge permet donc de rassembler tous

ces gens autour du développement de projets de logiciel. Les forges représentent donc un bon

moyen d'assurer la transparence du développement d'un projet et de trouver des contributeurs

afin que le projet soit actif.

Les outils offerts par une forge sont principalement :

- Système de gestion des versions (via Subversion ou CVS, par exemple)

- Gestionnaire de listes de discussion (et/ou de forums)

- Outil de suivi des bugs

- Gestionnaire documentation (souvent sur le principe du wiki)

- Gestion des tâches

- Traduction en ligne

L'avantage d'une forge est de rassembler tous ces outils en un seul ensemble intégré et

cohérent, et de les mettre à disposition de plusieurs personnes afin qu'elles puissent

développer ensemble leurs projets. En effet, avant l'apparition des forges, les développeurs

souhaitant collaborer pour le développement d'un projet devaient installer chaque application

séparément, ce qui demande bien plus de travail et de temps.

Page 86: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

71

III.6.1.3.Les forges internationales

Il existe plusieurs forges actuellement disponibles sur le Web dans lesquelles des

développeurs peuvent faire héberger gratuitement leurs projets. Souvent, ces forges sont

dédiées à l'hébergement de projets de développement de logiciel libre, parfois elles acceptent

des projets développant des logiciels non-libres (mais dont les sources sont accessibles). On

peut par exemple citer SourceForge, qui est la première forge (historiquement) à proposer ce

type de service à grande échelle sur le site sourceforge.net. Des forges comme GNU Savanah

sont dédiées à l'hébergement exclusif de projets de logiciels libres. »

On a publié le coude source avec une licence GPL sur les forges suivantes :

GitHub (exploité sous le nom de GitHub, Inc.) est un service web d'hébergement et de

gestion de développement de logiciels, utilisant le logiciel de gestion de versions Git. Ce site

est développé en Ruby on Rails et Erlang par Chris Wanstrath, PJ Hyett et Tom Preston-

Werner. GitHub propose des comptes professionnels payants, ainsi que des comptes gratuits

pour les projets de logiciels libres.

Le nom GitHub est composé du mot « git » faisant référence à un système de contrôle

de version open-source et le mot « hub » faisant référence au réseau social bâti autour du

système Git.

http://github.com/redareda440/CRDEP.MMR

SourceForge.net est une forge logicielle, c'est-à-dire un site web hébergeant la gestion

du développement de logiciels majoritairement libres, opéré par Geeknet (anciennement «

SourceForge, Inc. ») et qui utilise une version du logiciel TeamForge (anciennement «

SourceForge »).

http://sourceforge.net/redareda440/CRDEP.MMR

Google Code est un site web destiné aux développeurs intéressés par le développement

relatif à Google. L'entreprise y diffuse des codes sous licence libre. La liste des API Google y

était proposée, avant d'avoir migré sur le nouvel espace "Google Developers".

http://code.google.com/redareda440/CRDEP.MMR

Page 87: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

72

BerliOS est une forge pour logiciel libre originellement dépendante du Fraunhofer

Institute. Depuis 2011, la forge n'est plus dépendante du centre de recherche, et est géré par

une fondation sans but lucratif.

http:// berlios.de/redareda440/CRDEP.MMR

GNU Savannah est un site de la Free Software Foundation hébergeant des projets

collaboratifs, principalement de développement de logiciels libres.

http://savannah.gnu.org/redareda440/CRDEP.MMR

III.7.Application

III.7.1.Cas de dimensionnement

Soit à dimensionner un réseau de distribution de type maillé dont les données sont

représentées dans le tableau III.2

Figure III.22 : Réseau à étudier

Page 88: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

73

Tableau III.2 : Paramètres du réseau à étudier pour le réseau maillé

MA MP Tronçon Sens Qp

(��/�)

(m)

L

(m)

CTN (m) PS

(m.c.e)

R-1 1 0.171 0.0001 111 99.3 80 0 19.14

I

II 1-2 1 0.05639 0.0001 186 80 62.4 19.14 36.2

1-5 -1 0.03938 0.0001 170 80 79 19.14 19.89

5-4 -1 0.02438 0.0001 355 79 56.8 19.89 41.87

4-2 -1 0.00338 0.0001 25 56.8 62.4 41.87 36.2

II

1-6 -1 0.04923 0.0001 300 80 62 19.14 36.46

6-7 1 0.03223 0.0001 125 62 60 36.46 38.34

III 7-2 1 0.00817 0.0001 357 60 62.4 38.34 36.2

I 1-2 -1 0.05639 0.0001 186 80 62.4 19.14 36.2

III

7-8 1 0.01040 0.0001 270 60 58.5 38.34 33.76

II 7-2 1 0.00817 0.0001 357 60 62.4 38.34 36.2

2-3 -1 0.02560 0.0001 107 62.4 56.6 36.2 41.34

3-8 -1 0.01060 0.0001 242.5 56.6 58.5 41.34 33.76

Apres application du programme CRDEP.MMR 2016 les résultats obtenus sont portés dans

les tableaux III.3 et III.4

Page 89: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

74

Tableau III.3: Résultats du calcul hydraulique du réseau maillé par le programme CRDEP.MMR 2016

Conduite de distribution principale

NAm NAv Qp

(��/�)

DC

(m)

DN

(m) TC

V

(m/s)

PDCT

(m)

CPR

(m)

CP1

(m)

PSAm

(m.c.e)

PSAv

(m.c.e)

R 1 0.171 0.524 0.5 PVC 1.169 4.021 55 50.979 0 19.095

Réseau maillé

MP MA NAm NAv Qp

(��/�)

DC

(m)

DN

(m) TC

V

(m/s)

PDCT

(m)

CPAm

(m)

CPAv

(m)

PSAm

(m.c.e)

PSAv

(m.c.e)

I

0 1 2 0.05639 0.276 0.285 PVC 0.903 0.476 99.095 98.620 19.095 36.220

II 1 5 0.03938 0.275 0.285 PVC 0.661 -0.241 99.095 98.854 19.095 19.854

0 5 4 0.02438 0.274 0.285 PVC 0.426 -0.0221 98.854 98.634 19.854 41.834

0 4 2 0.00338 0.096 0.1808 PVC 0.240 -0.009 98.634 98.620 41.834 36.220

II

0 1 6 0.04923 0.275 0.285 PVC 0.709 0.486 99.095 98.609 19.095 36.609

0 6 7 0.03223 0.278 0.285 PVC 0.443 0.084 98.609 98.526 36.609 38.526

II 7 2 0.00817 0.176 0.285 PVC 0.266 -0.093 98.526 98.620 38.526 36.220

I 1 2 0.05639 0.276 0.285 PVC 0.903 -0.476 99.095 98.620 19.095 36.220

III

0 7 8 0.01040 0.097 0.1808 PVC 0.592 0.544 98.526 97.985 38.526 39.485

II 7 2 0.00817 0.176 0.285 PVC 0.266 0.093 98.526 98.620 38.526 36.220

0 2 3 0.02560 0.176 0.1808 PVC 0.810 -0.389 98.620 98.231 36.220 41.631

0 3 8 0.01060 0.097 0.1446 PVC 0.353 -0.245 98.231 97.985 41.631 39.485

Tableau III.4 : Valeur de ∆� et Sommes des pertes de charge pour les rois mailles

NumMaille Somme ∆�

(m)

Som ∆�/� ∆�(�3

/�)

1 0.004648 23.633 -0.0000983

2 0.001124 27.428 -0.0000205

3 0.002266 102.318 -0.0000111

Page 90: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

75

Tableau III.5 Comparaison des pressions supposées et obtenues

Tronçons

PS

Supposées

(m.c.e)

PS

Calculées

(m.c.e)

R-1 0 19.14 0 19.979

1-2 19.14 36.2 19.095 36.220

1-5 19.14 19.89 19.095 19.854

5-4 19.89 41.87 19.854 41.834

4-2 41.87 36.2 41.834 36.220

1-6 19.14 36.46 19.095 36.609

6-7 36.46 38.34 36.609 38.526

7-2 38.34 36.2 38.526 36.220

1-2 19.14 36.2 19.095 36.220

7-8 38.34 33.76 38.526 33.485

7-2 38.34 36.2 38.526 36.220

2-3 36.2 41.34 36.220 41.631

3-8 41.34 33.76 41.631 33.485

Page 91: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

76

III.7.2 Cas de la simulation

Tableau III.6 : Paramètres du réseau à étudier pour le réseau maillé

MA MP Tronçon Sens D(m) L

(m)

CTN (m) PS

(m.c.e)

R-1 1 0.4000 500 110 80 0 25.5

I

II 1-2 1 0.2500 500 80 76.5 25.50 24.37

1-5 -1 0.2500 300 80 79.5 25.50 24.01

5-4 -1 0.2000 500 79.5 78.5 24.04 23.69

4-2 -1 0.200 500 78.5 76.5 23.69 24.37

II

1-6 -1 0.2500 300 80 79 25.50 24.95

6-7 1 0.2000 500 79 77 24.95 23.62

III 7-2 1 0.1500 300 77 76.5 23.62 24.37

I 1-2 -1 0.2500 500 80 76.5 25.50 27.37

III

7-8 1 01500 800 77 75 23.62 23.84

II 7-2 1 0.1500 300 77 76.5 23.62 24.37

2-3 -1 0.1500 800 76.5 76 24.37 23.15

3-8 -1 0.1500 300 76 75 2315 23.84

Page 92: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

77

Tableau III.7 : Résultats du calcul hydraulique (simulation) du réseau maillé para le

programme CRDEP.MMR

NAm NAv Qp

(��/�)

DC

(m)

DN

(m)

TC V

(m/s)

PDCT

(m)

CPR

(m)

CP1

(m)

PSAm

(m.c.e)

PSAv

(m.c.e)

R 1 0.171 0.524 0.5 PVC 1.169 4.021 55 50.979 0.00 25.50

MP MA NAm NAv L(m) TC D

(m)

Qr

(��/�)

V

(m/s)

PDCT

(m)

Qc

(��

/�)

CPAm

(m)

CPAv

(m)

PSAm

(m.c.e)

PSAv

(m.c.e)

I

0 1 2 500 PVC 0.2500 0.080 1.62 4.63 0.080 105.50 100.88 25.50 24.38

II 1 5 300 PVC 0.2500 0.067 1.37 -1.99 0.067 105.50 103.52 25.50 24.02

0 5 4 500 PVC 0.2000 0.023 0.37 -1.32 0.023 103.52 105.20 24.02 23.70

0 4 2 500 PVC 0.200 0.023 0.37 -1.32 0.023 102.20 100.88 23.70 24.38

II

0 1 6 300 PVC 0.2500 0.059 1.20 1.55 0.059 105.50 103.96 25.50 24.96

0 6 7 500 PVC 0.2000 0.037 1.19 3.33 0.037 103.96 100.63 24.96 23.63

II 7 2 300 PVC 0.1500 0.006 0.33 -0.25 0.006 100.63 100.88 23.63 24.38

I 1 2 500 PVC 0.2500 0.080 1.62 -4.63 0.080 100.88 100.88 25.50 24.38

III

0 7 8 800 PVC 01500 0.10 0.55 1.78 0.10 98.85 98.85 23.63 23.85

II 7 2 300 PVC 0.1500 0.006 0.33 0.25 0.006 100.63 100.88 23.63 24.38

0 2 3 800 PVC 0.1500 0.010 0.54 -1.72 0.010 100.88 99.16 24.38 23.16

0 3 8 300 PVC 0.1500 0.006 0.37 -0.31 0.006 99.16 98.85 23.16 23.85

Page 93: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

78

Tableau III.8 Comparaison des pressions supposées et obtenues

Tronçons

PS

Supposées

(m.c.e)

PS

Calculées

(m.c.e)

R-1 0 25.5 0.00 25.50

1-2 25.50 24.37 25.50 24.38

1-5 25.50 24.01 25.50 24.02

5-4 24.04 23.69 24.02 23.70

4-2 23.69 24.37 23.70 24.38

1-6 25.50 24.95 25.50 24.96

6-7 24.95 23.62 24.96 23.63

7-2 23.62 24.37 23.63 24.38

1-2 25.50 27.37 25.50 27.38

7-8 23.62 23.84 23.63 23.85

7-2 23.62 24.37 23.63 24.38

2-3 24.37 23.15 24.38 23.16

3-8 2315 23.84 23.16 23.85

Page 94: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

79

Figure : III.22 : Fenêtre d’affichage pour l’application du tableau III.2

Figure : III.23 : Fenêtre d’affichage pour l’application du tableau III.5

Page 95: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

80

III.8.Conclusion

L’objectif principal de ce présent chapitre était de l’élaboration d’un nouveau

programme de dimensionnement et simulation d’un réseau de distribution de type mallé ou

ramifié a laide sur des version précédente basé sur les relation de la méthode du modèle

rugueux de référence qui se permet de déterminer le diamètre des conduite une fois les

gradients et les débit sont connues et aussi permettent l’évaluation des débits en

route(distribution finale des débits) une fois les gradients des pertes de charge et les diamètres

sont connus.

Le projet s’est déroulé selon trois axes principaux afin de passer par les étapes

essentielles de tout projet : l’analyse, la conception et la réalisation.

Pour la conception de notre application, nous avons eu recours à la méthodologie UML.

Cette approche nous a permis de bien comprendre la problématique et de bien modéliser les

objectifs à atteindre. Ce qui nous a donné la possibilité de réaliser un système stable et

évolutif.

Pour la réalisation, nous avons utilisé Delphi RAD 2016 c’est l’IDE objet de Pascal

comme langage de programmation, RAD Studio intègre le concepteur multisystème FireUI et

une trame d'interface multiplateforme constituant la seule solution permettant de créer des

applications natives compilées pour différents appareils à partir d'une seule base de code

source. et Sqlite comme système de gestion des base des données.

On a donné le programme CRDEP.MMR une licence GPL Open source pour faire un

espace de développement simple et libre pour les autres promotions.et on a partagé le coude

source sur des multi forge de développement international. (GitHub, SourceForge.net, Google

Code, BerliOS, GNU Savannah).

On a créé un site web pour la publication et le développement de programme

(www.mmr.sof.ml).

Le programme CRDEP.MMR permet à l’utilisateur de choisir entre de type d’étude

soit le dimensionnement d’un nouveau projet ou la simulation d’un projet existant.

Le programme CRDEP.MMR permet à l’utilisateur de faire une simulation d’un réseau

existant avec une seule et unique itération pour l’évaluation des débits en route.

Page 96: Bouheniche rida memoire final

Chapitre III. Mise à jour de programme CRDEP.MMR

81

Le programme CRDEP.MMR permet à l’utilisateur de crée un nouveau fichier protégé

par un mot de passe, ou rappelé un fichier existant.

Le programme CRDEP.MMR permet à l’utilisateur de choisir le diamètre normalisé

automatiquement à l’aide du tableau des diamètres disponible sur le marché national si

l’utilisateur choisit le type de canalisations (PEHD, PVC, Amiante, Fonte et Acier).

Le programme CRDEPMMR est destiné au calcul ramifié est le réseau maillé, peut être

utilisé comme un outil pédagogique ou professionnel selon le besoin

Le programme CRDEPMMR donne une vérification des pressions supposées au début

peut faire l’objet d’une validation des résultats obtenus.

Le programme CRDEP.MMR permet à l’utilisateur de sauvegarder ou imprimer les

résultats obtenus.

Le programme CRDEP.MMR est disponible sur multi système d’exploitation est

disponible aussi sur les Smartphone pour une utilisation simple dans les chantiers.

Page 97: Bouheniche rida memoire final

Conclusion générale

Page 98: Bouheniche rida memoire final

CONCLUSION GENERALE

82

CONCLUSION GENERALE

La modélisation en hydraulique n’est pas seulement un outil de calcul et de

dimensionnement rapide et efficace, mais un moyen indispensable pour la conception,

analyse, planification et gestion rationnelle des réseaux.

La méthode de Hardy Cross malgré ses difficultés de convergence qui dépendent du

choix des débits initiaux dans les conduites, reste très utilisée par les bureaux d'étude dans

l’analyse et la conception des réseaux de distribution d’eau.

Depuis une vingtaine d'années, les nouvelles possibilités offertes par l'informatique ont

permis la mise au point de nombreux logiciels de calcul d'écoulement dans les réseaux maillés

sous-pression.

L’objectif principal du présent travail était de faire une mise à jour de programme

CRDEP.MMR qui a était élaboré en 2014 par A.DAHMANE, le programme dimensionne les

réseaux maillées et ramifiée dont les relations utilisées pour le calcul sont celles issues de la

méthode du modèle rugueux de référence initiée par B. Achour directeur de laboratoire

LARHYSS et enseignant au département d’hydraulique de l’université de Biskra.

La mise à jour concerne l’impression, la sauvegarde, le rappel de fichiers existants pour

une éventuelle modification et le jumelage de ce programme avec un autre programme le

SRDEP.MMR (Simulation d’un Réseau de Distribution d’eau Potable) réalisé en 2015 par

A.LEGSIR relatif à la simulation d’un réseau de distribution (maillé ou ramifié).

Pour la conception de cette application, la méthodologie utilisée est l’UML. Cette

approche permis de bien comprendre la problématique et de bien modéliser les objectifs à

atteindre. Ce qui nous a donné la possibilité de réaliser un système stable et évolutif.

Le projet s’est déroulé selon trois axes principaux afin de passer par les étapes

essentielles de tout projet : l’analyse, la conception et la réalisation. Pour la réalisation, nous

avons utilisé le Delphi RAD 2016 c’est l’IDE objet de Pascal comme langage de

programmation, RAD Studio intègre le concepteur multisystème FireUI et une trame

d'interface multiplateforme constituant la seule solution permettant de créer des applications

natives compilées pour différents appareils à partir d'une seule base de code source. et Sqlite

comme système de gestion des base des données.

Page 99: Bouheniche rida memoire final

CONCLUSION GENERALE

83

le programme CRDEP.MMR 2016 après sa mise à jour est doté d’une licence GPL

Open source pour faire un espace de développement simple et libre pour les internautes

intéressés par le calcul des réseaux de distribution (enseignant, étudiants, bureaux d’études,

ingénieurs ect…). Le coude source du programme est partagé sur des multi forge de

développement international. (GitHub, SourceForge.net, Google Code, BerliOS, GNU

Savannah)

Le programme CRDEP.MMR permet à l’utilisateur de choisir entre de type d’étude soit

le dimensionnement d’un nouveau projet ou la simulation d’un projet existant.

Le programme CRDEP.MMR 2016 permet à l’utilisateur de choisir entre deux

fonctionnalités soit le dimensionnement d’un nouveau projet soit la simulation d’un projet

existant où une seule et unique itération pour l’évaluation des débits en route est faite comme

il permet à l’utilisateur de crée des fichiers bien protégés par des mots de passe.

Un site web a été créé pour la publication et le développement du programme sur

www.mmr.sof.ml

Le programme CRDEP.MMR permet à l’utilisateur de choisir le diamètre normalisé

automatiquement à l’aide d’une base de données intégrées renfermant les gammes de

diamètres disponibles sur le marché national pour divers types de conduites et qui sont

(PEHD, PVC, Amiante, Fonte et Acier).

Le programme CRDEPMMR est destiné au calcul ramifié est le réseau maillé, peut être

utilisé comme un outil pédagogique ou professionnel selon le besoin

Le programme CRDEPMMR offre une possibilité pour la vérification des pressions

supposées au début peut faire l’objet d’une validation des résultats obtenus. Les subjectifs de

la mise à jour sont atteints et qui sont la sauvegarde, l’impression et la modification sur des

fichiers existants.

Le programme CRDEP.MMR est disponible sur des multi systèmes d’exploitation est

disponible aussi sur les Smartphones pour une utilisation simple dans les chantiers.

En perspective il est très intéressent d’introduire les systèmes SIG et utiliser ce

programme dans sa nouvelle version pour aider les concepteurs et gérants à prendre des

décisions dans la gestion et de modification ou de simulation.

Page 100: Bouheniche rida memoire final

Références

Bibliographiques

Page 101: Bouheniche rida memoire final

Référence Bibliographiques

Références Bibliographiques

[1]. ACHOUR. Bachir, ‘Calcul des conduites et canaux par la MMR’, Laboratoire de

Recherche en Hydraulique Souterraine et de Surface – LARHYSS, Université de Biskra, 2007.

[2]. A. BEDJAOUI, B. ACHOUR, ‘Dimensionnement des réseaux de distribution d’eau

potable par la méthode du modèle rugueux de référence (mmr)’, Laboratoire de Recherche en

Hydraulique Souterraine et de Surface – LARHYSS, Université de Biskra, 2014.

[3]. A. BEDJAOUI, B. ACHOUR, ‘Détermination des débits en route dans un réseau maille

par la méthode du modèle rugueux de référence (mmr)’, Laboratoire de Recherche en

Hydraulique Souterraine et de Surface – LARHYSS, Université de Biskra, 2015.

[4]. BDJAOUI ALI, ‘ Réseaux de distribution’ Université de Biskra, note de cours, 2014.

[5]. LAHIOUEL RACHIDA, LAHIOUEL YASMINAB, AZARI ZITOUNIC ‘modélisation

de l’écoulement et conception à moindre cout des réseaux de distribution d'eau’, 20ème Congrès

Français de Mécanique, Besançon, 29 août au 2 septembre 2011.

[6]. GENERALE DES EAUX, ‘Modélisation du réseau d’eau potable’, générale des eaux,

France, Octobre 2005.

[7]. BOUTALEB. K, ‘modélisation hydraulique d’un système de transfert d’eau potable’, thèse

de magister, Université de Chlef, 2014.

[8]. Lewis A. Rossman, ‘EPANET 2.0 Simulation Hydraulique et Qualité pour les Réseaux

d’Eau sous Pression’, Manuel de l’Utilisateur, Générale des Eaux Direction Technique, Paris

France, 2003.

[9]. ABDELBAKI Chérifa, ‘Modélisation d’un réseau d’AEP et contribution à sa gestion à

l’aide d’un SIG’, thèse de doctorant, Université de Tlemcen, 2014

Page 102: Bouheniche rida memoire final

Référence Bibliographiques

[10]. BELAIB Allel, ‘Modélisation hydraulique d’un système de transfert d’eau potable as du

transfert du couloir chlef-tenes-el guelta – à partir du barrage de sidi yacoub-’, thèse de

Magister, Université de Chlef.

[11]. Gilles FLAMME-OBRY, ‘Conception et calcul des réseaux de Distribution d’eau

potable’, Polytech Lille, France, 2007.

[12]. Yasser Harndi, ‘CONTRIBUTION A LA MODÉLISATION NUMÉRIQUE DU CYCLE DE

L'EAU, Thèse présentée à la Faculté des études supérieures de pour l'obtention du grade de

Philosophiae Doctor (Ph.D.), 'Université Laval, Canada, 2001.

[13]. Mahmoud MOUSS, ‘ Alimentation en eau potable’, école nationale d’1ingénieurs de

Tunis, Tunis, 2002,

[14]. MORARECH MOAD, ‘hydrogéochimie, eau potable et assainissement liquide’, note de

cours, Université de Rabat, marco,2 014-2015.

[15]. AHBARI Abdellatif, ‘Etude d’alimentation en eau potable d’un lotissement centre de

Boumalne Dadés’, Mémoire de fin d’étude de la Licence ès-sciences et techniques Eau et

Environnement, Université de Marrakech, Maroc.

[16]. A. Bouziane, ‘cours d’alimentation en eau potable’, Université Mohammed v, Maroc.

[17]. R. Courbat, JL. Demassue, JF. Fléche-Loisy, et B. Albessard, ‘Schéma directeur eau

potable - Simulation hydraulique du réseau de distribution’, Communauté de communes de

l’Auxerrois, France.

[18]. Kenza Ronda, ‘Logiciels libres et ERPs Open Source : maturité des ERPS Open Source et

adéquation dans une PME ou TPE’, HAL archive ouvert, France, 2014.

[19]. DAHAN Julien, ‘L’engouement des sociétés informatiques pour les technologies Open

Source,HAL’, Compte rendu d’activité au sein d’ITREC GESTION, La société ITREC

GESTION, France, 2002/2005.

Page 103: Bouheniche rida memoire final

Référence Bibliographiques

[20]. BORDJI Fatima Zohra, BOUAKKAZ Khadidja ,‘Gestion D’un Magasin De Pièces De

Rechange GMPR (Conception et réalisation d’une application)’, Mémoire de fin d’études pour

l’obtention du diplôme de Licence en Informatique, Université de Tlemcen, 2013.

[21]. Mohamed Hassoun, ‘Etude de faisabilité pour la conception d’une base de données

bibliographique open source, mémoire de stage, Université de l’ENSSIB, France, 2005.

[22]. Mégaiz Samia, ‘Application de gestion de magasin d’optique médicale (GMOM),

Mémoire de fin d’études pour l’obtention du diplôme de Licence en Informatique, Université de

Tlemcen, 2013.

[23]. Samia HACHEM ‘Développement d’une application de gestion de la consommation

énergétique, Mémoire de stage de fin d’études Pour l’obtention du master professionnel,

Université virtuelle de Tunis.

[24]. Jean-Luc Hainaut, ‘Bases de données et modèles de calcul outils et méthodes pour

l’utilisateur cours et exercices corrigés’, 4e édition, 2005.

[25]. BENSAHLA -TANI Hidayet, DIB Nesrine, ‘Gestion d’emploi du temps des

soutenances’, Mémoire de fin d’études pour l’obtention du diplôme de Licence en Informatique,

Université de Tlemcen, 2014.

[26]. Jérôme Darmont, ‘Programmation sous Delphi, Faculté de Sciences Économiques et de

Gestion’, Université de Lumiere Lyon 2, France, 2000.

الساتل مجلة 'طرق ریاضیة لتحلیل شیكات المیاه’ ،زھراء رجاء رسول العزاوي.الھاشمي عبد هللا الشندولي، أ.د .[27]

..مصراتة، لیبیا جامعة

جامعة الخرطوم ،انابیب الموانع احمد حامد شكر بحث لنیل شھادة الماجیستیردراسة تحلیلیة لشبكات ، أحمد حاتم شاكر .[28]

االصدار الثالث ، دلیل البرمجیات الحرة،أبوزید. مأحمد .[29]

Page 104: Bouheniche rida memoire final

Référence Bibliographiques

Sites consultés

https://www.embarcadero.com / (‘RAD IDE Delphi).

https://www.delphi.developpez.com/ (‘Club des développeurs Delphi).

https://www.savannah.gnu.org / (‘site web hébergeant la gestion du développement de logiciels).

https://www.sourceforge.net / (‘site web hébergeant la gestion du développement de logiciels).

https://www.code.google.com / (‘site web hébergeant la gestion du développement de logiciels).

https://www.berlios.de / (‘site web hébergeant la gestion du développement de logiciels).

https://www.savannah.gnu.org / (‘site web hébergeant la gestion du développement de logiciels).

https://www.android.com / (‘Site officiel de Google, en français, présentant tous les aspects et

toutes les solutions de son système d'exploitation mobile Android).

https://www.lucidchart.com / (‘Site pour la création des schémas conceptuels).

Page 105: Bouheniche rida memoire final

Annexes

Page 106: Bouheniche rida memoire final

ANNEXE 1

Vocabulaires Delphi

L'informatique, en tant que science, a son propre jargon, qu'il est nécessaire de connaître.

Les quelques termes qui suivent sont des incontournables. Lorsque vous les rencontrerez, vous

devrez savoir ce qu'ils signifient. Les définitions ci-dessous ne sont valables qu'à l'intérieur du

guide

ActiveX : Bibliothèque de composants logiciels qui peut être utiliser par des applications

Windows pour permettre une communication.

ADO : Active Data Object. Technologie d'accès aux données créée par Microsoft.

API : Application Programming Interface. Son but est de fournir un ensemble de fonctions

destinées à controler tous les éléments d'un ordinateur (souris, clavier, modem, écran,...) et à

réaliser certaines tâches(copier un fichier, imprimer,...).

ASCII : American Standard Code for Information Interchange. Codes numériques

correspondant à des caractères.

Base de données : Ensemble de données stockées pour utilisées par des sources.

BDE : Borland Database Engine. Cela permet d'avoir accès aux bases de données.

BLOB : Binary Large Object. Type de champ pour contenir des données binaire dans une base

de données.

CGI : Common Gateway Interface. C'est un programme exécuter du côté serveur.

Classe : Collection d'objets ayant un même comportement.

Clipboard : Presse-papier qui permet de copier ou de coller un texte ou une image.

CLX : Component Library for Cross Platform Developement. Librairie de composants

fonctionnant sous Windows et Linux (Delphi et Kylix).

COM : Composant Object Model, modèle de composant objet développé par Microsoft.

Composant : Un composant est une classe héritée de la classe TComponent qui dispose de

plusieurs fonctionnalités. C'est pour cela, lorsque l'on désigne un composant, on fait référence

à sa classe. Par exemple un label, un button ou une image sont des composants.

Contsante : Une constante est un emplacement réservé par le programme permettant de

déclarer une valeur.

Contrairement à une variable, une constante ne peut être modifier au cours du programme.

DDE : DDE (Dynamic Data Exchange) est un protocole qui permet à deux applications

(minimum) chargées en mémoire de communiquer entre elles.

Page 107: Bouheniche rida memoire final

Delphi : Delphi est un langage de programmation sous Winows utilisant le langage Pacsal

objet.

DelphiX : DelphiX est une suite de plusieurs composants (12 aux totales) ajoutés à ceux de

Delphi qui permettent une utilisation plus rapide et plus facile de DirectX.

DirectX : DirectX est une bibliothèque de développement multimédia, mise au point par

Microsoft qui permet de créer des jeux et des applications.

DLL : Les DLL (Dynamic Link Library) signifie lien dynamique de librairie. La DLL est un

lieu de stockage privilégié. Les Dll jouent un rôle important dan le partage et la réutilisation de

routines dans les sources sous Windows.

DPK : Extension de fichier. Fichier d'un paquet.

Drag/drop : Le glisser/deplacer (drag and drop) consiste à prendre un objet à l'aide de la souris

en maintenant le bouton enfoncé et à le glisser sur un autre objet puis de le lacher en relachant

le bouton de la souris.

EDI : Environnement de Développement Intégré (traduit de l'anglais IDE).

Evénement : Un événement se produit lorsque l'utilisateur ou un composant accomplit une

action. Par exemple un clique de souris répond par l'événement "OnClick" du composant qui a

subit cette action.

EXE : Extension des fichiers exécutables.

Fonction : Les fonctions sont pour ainsi dire des procedures un peu particulière. En effet, elles

retournent une valeur quand on les appelle grâce à "result".

Form : Appelé également fiche désigne les fenêtres.

GUID : Globally Unique Identifer. Identificateur unique dans le monde. Cet identificateur

(numéro de 128 bits) est généré par un algorithme utilisant le numéro de votre carte réseau

(chaque carte réseau possède une adresse MAC unique) ainsi que de l'heure et la date. Les

GUID sont utilisés dans beaucoup de domaines de l'informatique.

Héritage : Ce mot signifie qu'un élément descend ou dérive d'un premier élément appelé

ancêtre. En Delphi, on parle d'éritage pour parler des classes qui hérite d'une classe de base.

INI : Extension de fichier. Ce type de fichier permet est utilisé pour sauvegarder des

informations.

InstallShield : InstallShield est un logiciel qui permet de créer pour ses propres sources

d'execution (*.exe), un programme d'installation.

Interbase : Serveur de base de données de Borland.

Kylix : Logiciel de programmation de la société Borland utilisant le langage Pascal Objet sous

Linux.

Page 108: Bouheniche rida memoire final

MDI : Une application MDI (Multiple Document Interface) est constitué d'une fenêtre

principale appelé le parent et des fenêtres enfants.

MediaPlayer : Composant permettant d'effectuer des opérations multimédia.

Message : Un message Windows est un ensemble d'informations stockés dans une file d'attente.

MIME : Multipurpose Document Interface. Protocole de transfert de données binaires. On

utilise ce protocole pour les e-mails.

Objet : Un objet est un élément avec des caractéristques.

ODBC : Open DataBase Connectivity. Technologie créée par Microsoft permettant d'accèder

aux données. Cette technologie a été remplacé par ADO.

OLE : L'ole est une nouvelle technologie permettant à une application d'en piloter une autre en

utilisant ses services. Cette technique permet de faire communiquer deux applications entre

elles.

OpenGL : L'OpenGL est une bibliothèque graphique qui permet la manipulation d'objet en

deux et trois dimensions.

OTA : Open Tools API. API permettant de programmer des experts pour l'IDE de Delphi.

Palette Delphi : Endroit où les composants de la VCL sont disponibles pour la création d'un

programme.

Paquet : Ensemble de composants Delphi.

Parent : Conteneur visuel d'un composant.

PAS : Extension de fichier. Fichier source Pascal Objet.

Pascal : Pascal est un langage de programmation comme le langage C. Delphi utilise le langage

Pascal orienté objet.

Pointeur : Un pointeur est une variable dont le le contenu n'est pas une donnée mais une adresse

mémoire.

Procedure : Le code Pascal regroupe des procedures. Chaque procedure porte un nom qui la

distingue des autres. Les instructions dans la procedure sont encadrées des mots clés begin et

end;. Elles ne retournent aucune valeur quand on les appelles.

Propriété : Une propriété détermine les caractéristiques d'un composant.

RAD : Application de développement rapide (Rapid Application Developpement).

RTTI : Run Time Type Information.

SDK : Software Development Kit. Documentations et fonctions pour développer dans une

certaine technologie.

SOAP : Simple Object Acces Protocol. Protocole de communication avec un service web basé

sur HTTP et XML.

Page 109: Bouheniche rida memoire final

Sockets : Les sockets servent à communiquer deux ordinateurs distant par le billet du protocole

TCP/IP.

Le but est de pouvoir transférer des données ou échanger des données d'un ordinateur à un autre.

Transtypage : Le transtypage est l'opération qui consiste à affecter une variable à une autre

variable mais d'un type différent.

Tray Icons : Tray icons est le nom utilisé pour désigner la barre des tâches et les sources

résidents en mémoire.

Unité : Fichier texte qui peut être compiler.

Variable : Une variable est un emplacement réservé par le programme permettant de stoker

une valeur.

Variant : Variant est un type de données qui permet, entre autre, de contrôler un serveur OLE.

Ce type permet également la manipulation de tout type d'objet et surtout des tableaux de taille

variable et sans type.

VCL : Visual Component Library. Librairie de composants visuels pour Windows.

Page 110: Bouheniche rida memoire final

ANNXE 2

Coude source en C++ ouvrir sous Matlab pour l’analyse des réseaux d’eau a l’aide de la

méthode de Newton-Raphson

Page 111: Bouheniche rida memoire final
Page 112: Bouheniche rida memoire final
Page 113: Bouheniche rida memoire final

ANNEXE 3

Les unité de code source de programme de dimensionnement

Page 114: Bouheniche rida memoire final

1: unit Result_1;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,8: FMX.Objects, System.Rtti, Data.Bind.Controls, Fmx.Bind.Navigator, FMX.Grid,9: FMX.StdCtrls, FMX.Controls.Presentation, FireDAC.Stan.Intf,

10: FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,11: FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,12: FireDAC.UI.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Phys,13: FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, Data.DB,14: FireDAC.Comp.Client, FireDAC.Comp.DataSet, Data.Bind.EngExt,15: Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,16: Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX.ListBox,17: FireDAC.FMXUI.Wait;18: 19: type20: TResult1 = class(TForm)21: Image1: TImage;22: ScrollBox1: TScrollBox;23: ToolBar1: TToolBar;24: Label1: TLabel;25: back: TButton;26: Calcul: TButton;27: ScrollBox2: TScrollBox;28: GroupBox2: TGroupBox;29: ScrollBox3: TScrollBox;30: GroupBox1: TGroupBox;31: StringGrid1: TStringGrid;32: ScrollBox4: TScrollBox;33: GroupBox3: TGroupBox;34: StringGrid3: TStringGrid;35: BindNavigator3: TBindNavigator;36: StringGrid2: TStringGrid;37: BindNavigator2: TBindNavigator;38: btn_calcul: TButton;39: FDQuery1: TFDQuery;40: FDConnection1: TFDConnection;41: FDQuery2: TFDQuery;42: FDQuery3: TFDQuery;43: BindNavigator1: TBindNavigator;44: BindSourceDB1: TBindSourceDB;45: BindingsList1: TBindingsList;46: LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;47: BindSourceDB2: TBindSourceDB;48: LinkGridToDataSourceBindSourceDB2: TLinkGridToDataSource;49: BindSourceDB3: TBindSourceDB;50: LinkGridToDataSourceBindSourceDB3: TLinkGridToDataSource;51: ComboBox1: TComboBox;52: ComboBox2: TComboBox;53: FDQuery4: TFDQuery;54: ComboBox3: TComboBox;55: Label2: TLabel;56: Button1: TButton;57: btn_start: TButton;58: DataSource1: TDataSource;59: DataSource2: TDataSource;60: procedure backClick(Sender: TObject);61: procedure btn_calculClick(Sender: TObject);62: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);63: procedure CalculClick(Sender: TObject);64: procedure FormCreate(Sender: TObject);65: procedure AutoSizeGrid(Grid: TStringGrid ; Query: TFDQuery);66: procedure StringGrid2SelectCell(Sender: TObject; const ACol, ARow: Integer;67: var CanSelect: Boolean);68: procedure ComboBox1Change(Sender: TObject);69: procedure ComboBox2Change(Sender: TObject);70: procedure StringGrid1SelectCell(Sender: TObject; const ACol, ARow: Integer;71: var CanSelect: Boolean);72: procedure ComboBox3Change(Sender: TObject);73: procedure Button1Click(Sender: TObject);74: procedure btn_startClick(Sender: TObject);75: procedure FDQuery2AfterPost(DataSet: TDataSet);76: procedure FDQuery1AfterPost(DataSet: TDataSet);

Page 115: Bouheniche rida memoire final

77: private78: { Private declarations }79: public80: { Public declarations }81: end;82: 83: var84: Result1: TResult1;85: Row2,Col2,Col1,Row1: Integer;86: C1,C2 : boolean;87: implementation88: 89: uses CRDEP_Unit,Unit5,Result_2,System.IOUtils,Math;90: {$R *.fmx}91: {$R *.Windows.fmx MSWINDOWS}92: {$R *.SmXhdpiPh.fmx ANDROID}93: 94: //---------------------------------------------95: //---------------------------------------------96: function ResultTrancons(Query :TFDQuery):boolean;97: var NT,MP,NAmont,NAval : String;98: Q,QCorrige,Dq : Real;99: Query2 :TFDQuery;

100: begin101: Query2 := TFDQuery.Create(Form5);102: Query2.Connection := Query.Connection;103: try104: Query.Close;105: Query.SQL.Clear;106: Query.SQL.Add('select * from Trancons where NT > 0 and ID_Project = '+Form2.ID_Project);107: Query.Active := true;108: finally109: while not(Query.Eof) do110: begin111: //donner112: NT := Query.FieldByName('NT').AsString;113: MP := Query.FieldByName('MP').AsString;114: Q := Query.FieldByName('Q').AsFloat;115: Query2.Close;116: Query2.SQL.Clear;117: Query2.SQL.Add('select [D q(m3/s)] from Erreur_mailles where MP='+MP+' and ID_Project = '+

Form2.ID_Project);118: try119: Query2.Active := true;120: Except121: ShowMessage('Re-entrer des valeurs le trançon NT :'+NT);122: end;123: Dq := Query2.Fields[0].AsFloat;124: //calcul125: QCorrige := Q + Dq;126: //update Table DNTrancons127: Query2.Close;128: Query2.SQL.Clear;129: Query2.SQL.Add('Update DNTrancons set QCorrige='+FloatToStr(QCorrige)+' where NT = '+NT+'

' and ID_Project = '+Form2.ID_Project+';');130: try131: Query2.ExecSQL;132: Except133: ShowMessage('requate invalide');134: Result := false;135: end;136: Query.Next;137: end;138: Result := true;139: end;140: end;141: 142: //------------------------------------------------------143: // Calcul Diameter Normalize144: //-------------------------------------------------------145: //---------------------------------------------146: function Diameter_Normalize(Dcal : Real;TC : String;Query:TFDQuery):Real;147: var Query1 :TFDQuery;148: I : Integer;149: Diametre,Def,min,max,DN : real;150: begin

Page 116: Bouheniche rida memoire final

151: Query1 := TFDQuery.Create(Form5);152: Query1.Connection := Query.Connection;153: Query1.Close;154: Query1.SQL.Add('select * from Diametres');155: Query1.Active := true;156: Query1.First;157: I := 1;158: while not(Query1.Eof) do159: begin160: Diametre := Query1.FieldByName(TC).AsFloat;161: if Diametre <> 0 then162: begin163: Def := (Diametre - Dcal);164: if (I = 1) and (Def > 0)then165: begin166: min := Def;167: DN := Diametre;168: I:= 0;169: end170: else171: if (min > Def) and (Def > 0) then172: begin173: min := Def;174: DN := Diametre;175: end;176: end;177: Query1.Next;178: end;179: if I = 0 then Result := DN180: else181: begin182: Query1.First;183: max := Query1.FieldByName(TC).AsFloat;184: while not(Query1.Eof) do185: begin186: if max < Query1.FieldByName(TC).AsFloat then max := Query1.FieldByName(TC).AsFloat;187: Query1.Next;188: end;189: Result := max;190: end;191: end;192: 193: //---------------------------------------------194: //------------------------------------------------------195: // Calcul CPAmont et CPAval dun reseau Maille et Ramifier196: //-------------------------------------------------------197: //---------------------------------------------198: function Separe(S,Pos1,Pos2:String):String;199: begin200: Result := S.Substring(S.IndexOf(Pos1)+Pos1.Length,S.IndexOf(Pos2)-(S.IndexOf(Pos1)+Pos1.LengLength));

201: end;202: 203: procedure Calcul_CPAmontETAval(Query:TFDQuery);204: var O,C:TStringList;205: S1,S2,NT,ID : String;206: I,J,H,K,L: Integer;207: Max_CPAmont :Real;208: 209: begin210: //initialization211: ID := Form2.ID_Project;212: O := TStringList.Create;213: C := TStringList.Create;214: Query.Close;215: Query.SQL.Clear;216: Query.SQL.Add('select NAval,[CP1(m)] from VResulta_TReservoir where ID_Project='+ID);217: Query.Active := true;218: O.Add('<AV>'+Query.Fields[0].AsString+'</AV><CP>'+Query.Fields[1].AsString+'</CP>');219: Query.Close;220: Query.SQL.Clear;221: Query.SQL.Add('select NT,NAmont,NAval from DNTrancons where NT > 0 and ID_Project='+ID);222: Query.Active := true;223: while(not(Query.Eof)) do224: begin225: C.Add('<NT>'+Query.Fields[0].AsString+'</NT><AM>'+Query.Fields[1].AsString+'</AM><AV>'+Que

Page 117: Bouheniche rida memoire final

Query.Fields[2].AsString+'</AV>');226: Query.Next;227: end;228: Query.Close;229: 230: //Calcul231: I := 0;232: while not(C.Count = 0) do233: begin234: //Extraction Valeur Max de CPAmont dans le Group Overture235: S1 := Separe(C.Strings[I],'<AM>','</AM>');236: NT := Separe(C.Strings[I],'<NT>','</NT>');237: H := 0;238: for J := 0 to O.Count-1 do239: begin240: S2 := Separe(O.Strings[J],'<AV>','</AV>');241: if S1 = S2 then242: begin243: if H = 0 then244: begin245: Max_CPAmont := Separe(O.Strings[J],'<CP>','</CP>').ToDouble();246: H := 1;247: end248: else if Max_CPAmont < Separe(O.Strings[J],'<CP>','</CP>').ToDouble() then249: Max_CPAmont := Separe(O.Strings[J],'<CP>','</CP>').ToDouble();250: end;251: end;252: L := 0;253: for K := 0 to C.Count-1 do254: begin255: S2 := Separe(C.Strings[K],'<AV>','</AV>');256: if S1 = S2 then L := L+1;257: end;258: //update tracons par le valeur CPAmont259: if (H = 1) and (L = 0) then260: begin261: Query.Close;262: Query.SQL.Clear;263: Query.SQL.Add('Update DNTrancons Set CPAmont_Result = '+FloatToStr(Max_CPAmont)+' where

' where NT='+NT+' and ID_Project='+ID);264: Query.ExecSQL;265: Query.Close;266: Query.SQL.Clear;267: Query.SQL.Add('Select NAval,(CPAmont_Result-PDCT2) from DNTrancons where NT='+NT+' and I

' and ID_Project='+ID);268: Query.Active := true;269: O.Add('<AV>'+Query.Fields[0].AsString+'</AV><CP>'+Query.Fields[1].AsString+'</CP>');270: C.Delete(I);271: I := 0;272: end273: else274: I := I + 1;275: //-------------------------------------276: end;277: 278: end;279: 280: //------------------------------------------------------------------------------281: //------------------------------------------------------------------------------282: 283: procedure TResult1.backClick(Sender: TObject);284: begin285: FDQuery4.Close;286: FDQuery4.SQL.Clear;287: FDQuery4.SQL.Add('update Logins set Status = 1 where ID='+Form2.ID_Project);288: FDQuery4.ExecSQL;289: Form2.Status := 1;290: TForm5.Create(Owner).Show;291: self.Release;292: end;293: 294: procedure TResult1.btn_calculClick(Sender: TObject);295: var b : boolean;296: begin297: Calcul_CPAmontETAval(FDQuery4);298: if Form2.Type_Reseau = 'Maille' then

Page 118: Bouheniche rida memoire final

299: begin300: try301: b := ResultTrancons(FDQuery4);302: 303: if b then304: begin305: FDQuery4.Close;306: FDQuery4.SQL.Clear;307: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);308: FDQuery4.ExecSQL;309: Form2.Status := 3;310: TResult2.Create(self).Show;311: self.Hide;312: end313: else314: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');315: Except316: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');317: end;318: end319: else320: begin321: FDQuery4.Close;322: FDQuery4.SQL.Clear;323: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);324: FDQuery4.ExecSQL;325: Form2.Status := 3;326: TResult2.Create(self).Show;327: self.Hide;328: end;329: end;330: 331: procedure TResult1.btn_startClick(Sender: TObject);332: var b : boolean;333: begin334: Calcul_CPAmontETAval(FDQuery4);335: if Form2.Type_Reseau = 'Maille' then336: begin337: try338: b := ResultTrancons(FDQuery4);339: if b then340: begin341: FDQuery4.Close;342: FDQuery4.SQL.Clear;343: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);344: FDQuery4.ExecSQL;345: Form2.Status := 3;346: TResult2.Create(self).Show;347: self.Hide;348: end349: else350: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');351: Except352: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');353: end;354: end355: else356: begin357: FDQuery4.Close;358: FDQuery4.SQL.Clear;359: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);360: FDQuery4.ExecSQL;361: Form2.Status := 3;362: TResult2.Create(self).Show;363: self.Hide;364: end;365: end;366: 367: procedure TResult1.Button1Click(Sender: TObject);368: begin369: FDQuery4.Close;370: FDQuery4.SQL.Clear;371: FDQuery4.SQL.Add('update Logins set Status = 1 where ID='+Form2.ID_Project);372: FDQuery4.ExecSQL;373: Form2.Status := 1;374: TForm5.Create(Owner).Show;

Page 119: Bouheniche rida memoire final

375: Self.Release;376: end;377: 378: procedure TResult1.CalculClick(Sender: TObject);379: begin380: Form2.Show;381: Self.Release;382: end;383: 384: procedure TResult1.ComboBox1Change(Sender: TObject);385: var TC,NAmont,NAval :String;386: I : Integer;387: Diametre,Dcal,DN :Real;388: Def,min,max : Real;389: Long,Q,F,J2,PDCT,V,PDCT2 : Real;390: begin391: if (Row1 < StringGrid1.RowCount) and (ComboBox1.ItemIndex <> -1) then392: begin393: TC := ComboBox1.Items.Strings[ComboBox1.ItemIndex];394: NAmont := StringGrid1.Cells[2,Row1];395: NAval := StringGrid1.Cells[3,Row1];396: Dcal := StrToFloat(StringGrid1.Cells[4,Row1]);397: //Calcul DN398: DN := Diameter_Normalize(Dcal,TC,FDQuery4);399: 400: 401: //recuper le donner402: FDQuery4.Close;403: FDQuery4.SQL.Clear;404: FDQuery4.SQL.Add('select Long,Q from Trancons where NT=0 and ID_Project = '+Form2.ID_Proj

ID_Project);405: FDQuery4.Active := true;406: Q := FDQuery4.FieldByName('Q').AsFloat;407: Long := FDQuery4.FieldByName('Long').AsFloat;408: FDQuery4.Close;409: FDQuery4.SQL.Clear;410: FDQuery4.SQL.Add('select F from DNTrancons where NT=0 and ID_Project = '+Form2.ID_Project

);411: FDQuery4.Active := true;412: F := FDQuery4.FieldByName('F').AsFloat;413: //Calcul414: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));415: //ShowMessage('J2='+FloatToStr(J2));416: PDCT := J2*Long;417: PDCT2 := abs(J2*Long);418: // ShowMessage('PDCT='+FloatToStr(PDCT));419: V := Dcal/(3.14*(Q*Q)/4);420: //ShowMessage('V='+FloatToStr(V));421: //update valeur in table DNTrancons422: FDQuery4.Close;423: FDQuery4.SQL.Clear;424: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+' whe' where NT=0 and ID_Project = '+Form2.ID_Project);425: try426: FDQuery4.ExecSQL;427: Except428: ShowMessage('error entre valeur de tracons');429: end;430: FDQuery1.Refresh;431: 432: end;433: 434: end;435: 436: procedure TResult1.ComboBox2Change(Sender: TObject);437: var TC,NT :String;438: I : Integer;439: Diametre,Dcal,DN :Real;440: Def,min,max : Real;441: Long,Q,F,J2,PDCT,V,PDCT2 : Real;442: Sens : Integer;443: begin444: if (Row2 < StringGrid2.RowCount) and (ComboBox2.ItemIndex <> -1) then445: begin446: //ComboBox2.Visible := false;

Page 120: Bouheniche rida memoire final

447: TC := ComboBox2.Items.Strings[ComboBox2.ItemIndex];448: NT := StringGrid2.Cells[1,Row2];449: Dcal := StrToFloat(StringGrid2.Cells[4,Row2]);450: //Calcul DN451: DN := Diameter_Normalize(Dcal,TC,FDQuery4);452: {FDQuery2.Edit;453: FDQuery2.Fields[5].Value := TC;454: FDQuery2.Fields[6].Value := DN;455: FDQuery2.Post;}456: 457: //donner458: FDQuery4.Close;459: FDQuery4.SQL.Clear;460: FDQuery4.SQL.Add('select Long,Q,Sens from Trancons where NT='+NT+' and ID_Project = '+FormForm2.ID_Project);

461: FDQuery4.Active := true;462: Q := FDQuery4.FieldByName('Q').AsFloat;463: Long := FDQuery4.FieldByName('Long').AsFloat;464: if Form2.Type_Reseau = 'Maille' then Sens := FDQuery4.FieldByName('Sens').AsInteger;465: FDQuery4.Close;466: FDQuery4.SQL.Clear;467: FDQuery4.SQL.Add('select F from DNTrancons where NT='+NT+' and ID_Project = '+Form2.ID_Pro

ID_Project);468: FDQuery4.Active := true;469: F := FDQuery4.FieldByName('F').AsFloat;470: //Calcul471: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));472: //ShowMessage('J2='+FloatToStr(J2));473: if Form2.Type_Reseau = 'Maille' then474: PDCT := J2*Long*Sens475: else476: PDCT := J2*Long;477: if Form2.Type_Reseau = 'Maille' then478: PDCT2 := abs(J2*Long*Sens)479: else480: PDCT2 := abs(J2*Long);481: 482: V := Dcal/(3.14*(Q*Q)/4);483: //ShowMessage('V='+FloatToStr(V));484: //update valeur in table DNTrancons485: FDQuery4.Close;486: FDQuery4.SQL.Clear;487: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+' whe' where NT='+NT+' and ID_Project = '+Form2.ID_Project);488: try489: FDQuery4.ExecSQL;490: C2 := true;491: Except492: C2 := false;493: ShowMessage('error entre valeur de tracons');494: end;495: FDQuery2.Refresh;496: 497: end;498: 499: end;500: 501: procedure TResult1.ComboBox3Change(Sender: TObject);502: var I : Integer;503: begin504: for I := 0 to StringGrid2.RowCount - 1 do505: begin506: Row2 := I;507: ComboBox2.ItemIndex := ComboBox3.ItemIndex;508: ComboBox2Change(Sender);509: end;510: FDQuery2.Close;511: FDQuery2.Active := true;512: AutoSizeGrid(StringGrid2,FDQuery2);513: end;514: 515: procedure TResult1.FDQuery1AfterPost(DataSet: TDataSet);516: var TC:String;517: I : Integer;518: Diametre,Dcal,DN :Real;

Page 121: Bouheniche rida memoire final

519: Def,min,max : Real;520: Long,Q,F,J2,PDCT,V,PDCT2 : Real;521: 522: begin523: Dcal := DataSet.Fields[4].AsFloat;524: TC := DataSet.Fields[5].AsString;525: DN := DataSet.Fields[6].AsFloat;526: //recuper le donner527: FDQuery4.Close;528: FDQuery4.SQL.Clear;529: FDQuery4.SQL.Add('select Long,Q from Trancons where NT=0 and ID_Project = '+Form2.ID_Proj

ID_Project);530: FDQuery4.Active := true;531: Q := FDQuery4.FieldByName('Q').AsFloat;532: Long := FDQuery4.FieldByName('Long').AsFloat;533: FDQuery4.Close;534: FDQuery4.SQL.Clear;535: FDQuery4.SQL.Add('select F from DNTrancons where NT=0 and ID_Project = '+Form2.ID_Project

);536: FDQuery4.Active := true;537: F := FDQuery4.FieldByName('F').AsFloat;538: //Calcul539: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));540: PDCT := J2*Long;541: PDCT2 := abs(J2*Long);542: V := Dcal/(3.14*(Q*Q)/4);543: //update valeur in table DNTrancons544: FDQuery4.Close;545: FDQuery4.SQL.Clear;546: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+' whe' where NT=0 and ID_Project = '+Form2.ID_Project);547: try548: FDQuery4.ExecSQL;549: Except550: ShowMessage('error entre valeur de tracons');551: end;552: FDQuery1.Refresh;553: 554: end;555: 556: procedure TResult1.FDQuery2AfterPost(DataSet: TDataSet);557: var TC,NT :String;558: I : Integer;559: Diametre,Dcal,DN :Real;560: Def,min,max : Real;561: Long,Q,F,J2,PDCT,V,PDCT2 : Real;562: Sens : Integer;563: 564: begin565: NT := DataSet.FieldByName('NT').AsString;566: Dcal := DataSet.Fields[4].AsFloat;567: TC := DataSet.Fields[5].AsString;568: DN := DataSet.Fields[6].AsFloat;569: 570: //donner571: FDQuery4.Close;572: FDQuery4.SQL.Clear;573: FDQuery4.SQL.Add('select Long,Q,Sens from Trancons where NT='+NT+' and ID_Project = '+Form2.

ID_Project);574: FDQuery4.Active := true;575: Q := FDQuery4.FieldByName('Q').AsFloat;576: Long := FDQuery4.FieldByName('Long').AsFloat;577: if Form2.Type_Reseau = 'Maille' then Sens := FDQuery4.FieldByName('Sens').AsInteger;578: FDQuery4.Close;579: FDQuery4.SQL.Clear;580: FDQuery4.SQL.Add('select F from DNTrancons where NT='+NT+' and ID_Project = '+Form2.ID_Proje

ID_Project);581: FDQuery4.Active := true;582: F := FDQuery4.FieldByName('F').AsFloat;583: //Calcul584: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));585: if Form2.Type_Reseau = 'Maille' then586: PDCT := J2*Long*Sens587: else588: PDCT := J2*Long;

Page 122: Bouheniche rida memoire final

589: if Form2.Type_Reseau = 'Maille' then590: PDCT2 := abs(J2*Long*Sens)591: else592: PDCT2 := abs(J2*Long);593: 594: V := Dcal/(3.14*(Q*Q)/4);595: //update valeur in table DNTrancons596: FDQuery4.Close;597: FDQuery4.SQL.Clear;598: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+Fl

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+' where' where NT='+NT+' and ID_Project = '+Form2.ID_Project);

599: try600: FDQuery4.ExecSQL;601: Except602: ShowMessage('error entre valeur de tracons NT : '+NT);603: end;604: FDQuery2.Refresh;605: end;606: 607: procedure TResult1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);608: begin609: {$IF DEFINED(Win32)or DEFINED(Win64)}610: Form2.Show;611: Self.Release;612: {$ENDIF}613: end;614: 615: procedure TResult1.FormCreate(Sender: TObject);616: begin617: {$IF DEFINED(Win32)or DEFINED(Win64)}618: btn_calcul.Visible := true;619: Button1.Visible := true;620: {$ENDIF}621: {$IF DEFINED(Win32)or DEFINED(Win64)}622: FDConnection1.Close;623: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';624: FDConnection1.Params.Values['Database']:='test.db';625: {$ENDIF}626: {$IF DEFINED(iOS)or DEFINED(ANDROID)}627: FDConnection1.Close;628: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';629: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');630: {$ENDIF}631: try632: FDConnection1.Connected := true;633: try634: FDQuery1.SQL.Clear;635: FDQuery1.SQL.Add('select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [DC(m)],TC,DN a

'select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [DC(m)],TC,DN as [DN(m)] from DNTrancons where NT = 0 and ID_Project='+Form2.ID_Project);636: FDQuery1.Active := true;637: AutoSizeGrid(StringGrid1,FDQuery1);638: FDQuery2.SQL.Clear;639: FDQuery2.SQL.Add('select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [DC(m)],TC,DN a

'select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [DC(m)],TC,DN as [DN(m)] from DNTrancons where NT > 0 and ID_Project = '+Form2.ID_Project);640: FDQuery2.Active := true;641: AutoSizeGrid(StringGrid2,FDQuery2);642: if StringGrid2.RowCount > 4 then643: begin644: GroupBox2.Height := StringGrid2.RowHeight * StringGrid2.RowCount + 100;645: {$IF DEFINED(iOS)or DEFINED(ANDROID)}646: ScrollBox2.Height := GroupBox2.Height + 10;647: {$ENDIF}648: 649: end;650: FDQuery3.Active := true;651: AutoSizeGrid(StringGrid3,FDQuery3);652: Except653: ShowMessage('Requate invalide');654: end;655: 656: Except657: ShowMessage('Connection échouée');658: Close;659: end;660:

Page 123: Bouheniche rida memoire final

661: end;662: 663: procedure TResult1.StringGrid1SelectCell(Sender: TObject; const ACol,664: ARow: Integer; var CanSelect: Boolean);665: begin666: if (ACol = 5) and (ARow <= StringGrid1.RowCount) then667: begin668: ComboBox1.ItemIndex := -1;669: {$IF DEFINED(Win32)or DEFINED(Win64)}670: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X+2;671: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+22;672: ComboBox1.Width := StringGrid1.Columns[ACol].Width;673: ComboBox1.Height := StringGrid1.RowHeight;674: {$ENDIF}675: {$IF DEFINED(iOS)or DEFINED(ANDROID)}676: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X-4;677: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+32;678: ComboBox1.Width := StringGrid1.Columns[ACol].Width+5;679: ComboBox1.Height := StringGrid1.RowHeight+5;680: {$ENDIF}681: ComboBox1.Visible := True;682: Row1 := ARow;683: Col1 := ACol;684: CanSelect := true;685: end686: else687: ComboBox1.Visible := False;688: 689: 690: end;691: 692: procedure TResult1.StringGrid2SelectCell(Sender: TObject; const ACol,693: ARow: Integer; var CanSelect: Boolean);694: begin695: if (ACol = 5) and (ARow <= StringGrid2.RowCount) then696: begin697: ComboBox2.ItemIndex := -1;698: {$IF DEFINED(Win32)or DEFINED(Win64)}699: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X+2;700: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+22;701: ComboBox2.Width := StringGrid2.Columns[ACol].Width;702: ComboBox2.Height := StringGrid2.RowHeight;703: {$ENDIF}704: {$IF DEFINED(iOS)or DEFINED(ANDROID)}705: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X-4;706: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+32;707: ComboBox2.Width := StringGrid2.Columns[ACol].Width+5;708: ComboBox2.Height := StringGrid2.RowHeight+5;709: {$ENDIF}710: ComboBox2.Visible := True;711: Row2 := ARow;712: Col2 := ACol;713: //StringGrid2.SelectRow(ARow);714: CanSelect := true;715: end716: else717: ComboBox2.Visible := False;718: 719: end;720: 721: 722: procedure TResult1.AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);723: var724: C : integer;725: begin726: for C := 0 to Grid.ColumnCount - 1 do begin727: if Grid.Columns[C].Header.Length >= Query.FieldByName(Grid.Columns[C].Header).DisplayWidth

then728: Grid.Columns[C].Width := Grid.Columns[C].Header.Length * 8729: else730: Grid.Columns[C].Width := Query.FieldByName(Grid.Columns[C].Header).DisplayWidth * 8;731: 732: if Grid.Columns[C].Width > 130 then Grid.Columns[C].Width := 130;733: if Grid.Equals(StringGrid1) and ( (C=0) or (C=1) ) then Grid.Columns[C].Visible := false;734: if Grid.Equals(StringGrid2) and (C=0) then Grid.Columns[C].Visible := false;735: end;

Page 124: Bouheniche rida memoire final

736: 737: end;738: 739: 740: end.

Page 125: Bouheniche rida memoire final

1: unit Result_2;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti,8: Data.Bind.Controls, FMX.StdCtrls, FMX.Layouts, Fmx.Bind.Navigator, FMX.Grid,9: FMX.Controls.Presentation, FMX.Objects, FireDAC.Stan.Intf,

10: FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,11: FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,12: FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs,13: FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB,14: FireDAC.Comp.DataSet, FireDAC.Comp.Client, Data.Bind.EngExt,15: Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,16: Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope,17: CRDEP_Unit,Unit5,Result_1,System.IOUtils,Math, FMX.Ani, FireDAC.FMXUI.Wait;18: 19: type20: TResult2 = class(TForm)21: Image1: TImage;22: ScrollBox1: TScrollBox;23: ScrollBox2: TScrollBox;24: GroupBox2: TGroupBox;25: StringGrid3: TStringGrid;26: ScrollBox3: TScrollBox;27: GroupBox1: TGroupBox;28: StringGrid1: TStringGrid;29: ToolBar1: TToolBar;30: Label1: TLabel;31: back: TButton;32: Calcul: TButton;33: btn_Nouvelle_Iteration: TButton;34: btn_retablir_all: TButton;35: btn_EnrgistreExcel: TButton;36: btn_start: TButton;37: FDConnection1: TFDConnection;38: FDQuery1: TFDQuery;39: FDQuery2: TFDQuery;40: FDQuery3: TFDQuery;41: FDQuery4: TFDQuery;42: BindSourceDB1: TBindSourceDB;43: BindingsList1: TBindingsList;44: LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;45: BindSourceDB2: TBindSourceDB;46: BindSourceDB3: TBindSourceDB;47: LinkGridToDataSourceBindSourceDB3: TLinkGridToDataSource;48: ScrollBox4: TScrollBox;49: GroupBox4: TGroupBox;50: StringGrid2: TStringGrid;51: BindNavigator2: TBindNavigator;52: LinkGridToDataSourceBindSourceDB2: TLinkGridToDataSource;53: Rectangle1: TRectangle;54: Rectangle11: TRectangle;55: Button2: TButton;56: ColorAnimation2: TColorAnimation;57: ColorAnimation5: TColorAnimation;58: Button3: TButton;59: ColorAnimation3: TColorAnimation;60: ColorAnimation6: TColorAnimation;61: Rectangle13: TRectangle;62: Rectangle2: TRectangle;63: procedure btn_retablir_allClick(Sender: TObject);64: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);65: procedure FormCreate(Sender: TObject);66: procedure backClick(Sender: TObject);67: procedure AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);68: procedure btn_EnrgistreExcelClick(Sender: TObject);69: procedure btn_Nouvelle_IterationClick(Sender: TObject);70: procedure Button3Click(Sender: TObject);71: procedure CalculClick(Sender: TObject);72: procedure btn_startClick(Sender: TObject);73: procedure Rectangle1Click(Sender: TObject);74: private75: { Private declarations }76: public

Page 126: Bouheniche rida memoire final

77: { Public declarations }78: end;79: 80: var81: Result2: TResult2;82: Iteration : Integer;83: implementation84: 85: {$IF DEFINED(Win32)or DEFINED(Win64)}86: uses Rapport;87: {$ENDIF}88: 89: //---------------------------------------------90: function Diameter_Normalize(Dcal : Real;TC : String;Query:TFDQuery):Real;91: var Query1 :TFDQuery;92: I : Integer;93: Diametre,Def,min,max,DN : real;94: begin95: Query1 := TFDQuery.Create(Form5);96: Query1.Connection := Query.Connection;97: Query1.Close;98: Query1.SQL.Add('select * from Diametres');99: Query1.Active := true;

100: Query1.First;101: I := 1;102: while not(Query1.Eof) do103: begin104: Diametre := Query1.FieldByName(TC).AsFloat;105: if Diametre <> 0 then106: begin107: Def := abs(Diametre - Dcal);108: if (I = 1) then109: begin110: min := Def;111: DN := Diametre;112: I:= 0;113: end114: else115: if (min > Def) then116: begin117: min := Def;118: DN := Diametre;119: end;120: end;121: Query1.Next;122: end;123: if I = 0 then Result := DN124: else125: begin126: Query1.First;127: max := Query1.FieldByName(TC).AsFloat;128: while not(Query1.Eof) do129: begin130: if max < Query1.FieldByName(TC).AsFloat then max := Query1.FieldByName(TC).AsFloat;131: Query1.Next;132: end;133: Result := max;134: end;135: end;136: 137: //---------------------------------------------138: function Calcul_DNTrancons(Query :TFDQuery):boolean;139: var NT,NAmont,NAval,TC : String;140: Sens : Integer;141: Q,Long,Reguosite : Real;142: CPAmont,CPAval,CTNAmont,CTNAval,PSAmont,PSAval,Delta_Ht,J1,D,R,Psi,F,J2,PDCTv,V,PDCT,PDCT2

: Real;143: Dcal,DN : Real;144: Query2 :TFDQuery;145: ValRound : Integer;146: begin147: Query2 := TFDQuery.Create(Form5);148: Query2.Connection := Query.Connection;149: try150: Query.Close;151: Query.SQL.Clear;

Page 127: Bouheniche rida memoire final

152: Query.SQL.Add('select * from Trancons where NT > 0 and ID_Project = '+Form2.ID_Project);153: Query.Active := true;154: finally155: while not(Query.Eof) do156: begin157: //donner158: NT := Query.FieldByName('NT').AsString;159: CTNAmont := Query.FieldByName('CTNAmont').AsFloat;160: CTNAval := Query.FieldByName('CTNAval').AsFloat;161: PSAmont := Query.FieldByName('PSAmont').AsFloat;162: PSAval := Query.FieldByName('PSAval').AsFloat;163: Q := Query.FieldByName('Q2').AsFloat;164: Long := Query.FieldByName('Long').AsFloat;165: Reguosite := Query.FieldByName('Reguosite').AsFloat;166: Sens := Query.FieldByName('Sens').AsInteger;167: 168: Query2.Close;169: Query2.SQL.Clear;170: Query2.SQL.Add('select TC from DNTrancons where NT='+NT+' and ID_Project = '+Form2.ID_Proj

ID_Project);171: Query2.Active := true;172: TC := Query2.Fields[0].AsString;173: 174: //calcul175: CPAmont := CTNAmont + PSAmont;176: CPAval := CTNAval + PSAval;177: ValRound := -5;178: Delta_Ht := RoundTo(CPAmont - CPAval,ValRound);179: J1 := Abs(Delta_Ht / Long);180: D := Pi*Sqrt(2)*Sqrt(9.81*J1*Power(Q,5));181: R := 4 * Sqrt(2)*Sqrt(9.81*J1*Power(Q,3))/0.000001;182: Psi := -0.5*Log10((Reguosite/Q/3.7)+(10.04/R));183: Dcal := Psi * D;184: DN :=Diameter_Normalize(Dcal,TC,Query);185: F := Power(Psi,5)/16;186: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));187: if NT = '0' then188: PDCT := J2*Long189: else190: PDCT := J2*Long*Sens;191: V := 4*abs(Q)/3.14/(DN*DN);192: if NT = '0' then193: PDCT2 := abs(J2*Long)194: else195: PDCT2 := abs(J2*Long*Sens);196: V := Dcal/(3.14*(Q*Q)/4);197: 198: //update valeur DNTrancon199: Query2.Close;200: Query2.SQL.Clear;201: Query2.SQL.Add('update DNTrancons set DC='+FloatToStr(Dcal)+',DN='+FloatToStr(DN)+',D='+Fl

FloatToStr(D)+',R='+FloatToStr(R)+',Psi='+FloatToStr(Psi)+',F='+FloatToStr(F)+',J2='+FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+' where NT='+NT+' and ID_Project = '+Form2.ID_Project);

202: Query2.ExecSQL;203: Query.Next;204: end;205: end;206: Result := true;207: end;208: 209: 210: //---------------------------------------------211: //---------------------------------------------212: function ResultTrancons(Query :TFDQuery):boolean;213: var NT,MP,NAmont,NAval : String;214: Q,QCorrige,Dq : Real;215: Query2,Query3 :TFDQuery;216: begin217: Query2 := TFDQuery.Create(Form5);218: Query2.Connection := Query.Connection;219: Query3 := TFDQuery.Create(Form5);220: Query3.Connection := Query.Connection;221: 222: try223: Query.Close;

Page 128: Bouheniche rida memoire final

224: Query.SQL.Clear;225: Query.SQL.Add('select NT,MP,Q2 from Trancons where NT > 0 and ID_Project = '+Form2.ID_Projec

ID_Project);226: Query.Active := true;227: finally228: while not(Query.Eof) do229: begin230: //donner231: NT := Query.FieldByName('NT').AsString;232: MP := Query.FieldByName('MP').AsString;233: Q := Query.FieldByName('Q2').AsFloat;234: Query2.Close;235: Query2.SQL.Clear;236: Query2.SQL.Add('select [D q(m3/s)] from Erreur_mailles where MP='+MP+' and ID_Project = '+

Form2.ID_Project);237: try238: Query2.Active := true;239: Except240: ShowMessage('Re-entrer des valeurs le trançon NT :'+NT);241: end;242: Dq := Query2.Fields[0].AsFloat;243: //calcul244: QCorrige := Q + Dq;245: //update Table DNTrancons246: Query2.Close;247: Query2.SQL.Clear;248: Query2.SQL.Add('Update DNTrancons set QCorrige='+FloatToStr(QCorrige)+' where NT = '+NT+'

' and ID_Project = '+Form2.ID_Project+';');249: try250: Query2.ExecSQL;251: Except252: ShowMessage('requate invalide');253: Result := false;254: end;255: Query.Next;256: end;257: Result := true;258: end;259: end;260: 261: 262: //---------------------------------------------263: //---------------------------------------------264: 265: 266: 267: {$R *.fmx}268: {$R *.Windows.fmx MSWINDOWS}269: {$R *.Surface.fmx MSWINDOWS}270: {$R *.Macintosh.fmx MACOS}271: 272: procedure TResult2.backClick(Sender: TObject);273: begin274: Rectangle1.Visible := true;275: Rectangle11.Visible := true;276: end;277: 278: procedure TResult2.btn_EnrgistreExcelClick(Sender: TObject);279: begin280: {$IF DEFINED(Win32)or DEFINED(Win64)}281: TForm1.Create(self);282: TForm1.Create(self).PrintClick(Sender);283: {$ENDIF}284: end;285: 286: procedure TResult2.btn_Nouvelle_IterationClick(Sender: TObject);287: var QCorrige : Real;288: NT : String;289: begin290: FDQuery4.Close;291: FDQuery4.SQL.Clear;292: FDQuery3.First;293: while not(FDQuery3.Eof) do294: begin295: NT := FDQuery3.FieldByName('NT').AsString;296: QCorrige := FDQuery3.Fields[10].AsFloat;

Page 129: Bouheniche rida memoire final

297: {if abs(QCorrige) < 0.5 then298: begin299: 300: end;}301: //update Table DNTrancons302: FDQuery4.SQL.Add('Update Trancons set Q2='+FloatToStr(QCorrige)+' where NT = '+NT+' and ID

' and ID_Project = '+Form2.ID_Project+';');303: FDQuery3.Next;304: end;305: 306: try307: FDQuery4.ExecSQL;308: Calcul_DNTrancons(FDQuery4);309: ResultTrancons(FDQuery4);310: FDQuery4.Close;311: FDQuery4.SQL.Clear;312: FDQuery4.SQL.Add('update Logins set Status = Status + 1 where ID='+Form2.ID_Project);313: FDQuery4.ExecSQL;314: Form2.Status := Form2.Status + 1;315: 316: FDQuery2.Close;317: FDQuery3.Close;318: FDQuery2.Active := true;319: AutoSizeGrid(StringGrid2,FDQuery2);320: FDQuery3.Active := true;321: AutoSizeGrid(StringGrid3,FDQuery3);322: Iteration := Iteration + 1;323: btn_Nouvelle_Iteration.Text := 'Nouvelle Itération ('+IntToStr(Iteration)+')';324: 325: Except326: ShowMessage('Stop process iteration');327: end;328: 329: 330: 331: end;332: 333: procedure TResult2.btn_retablir_allClick(Sender: TObject);334: begin335: FDQuery4.Close;336: FDQuery4.SQL.Clear;337: FDQuery4.SQL.Add('update Logins set Status = 1 where ID='+Form2.ID_Project);338: FDQuery4.ExecSQL;339: Form2.Status := 1;340: TForm5.Create(Owner).Show;341: self.Release;342: end;343: 344: procedure TResult2.btn_startClick(Sender: TObject);345: begin346: btn_Nouvelle_IterationClick(Sender);347: btn_start.Text := 'Nouvelle Itération ('+IntToStr(Iteration)+')';348: end;349: 350: procedure TResult2.Button3Click(Sender: TObject);351: begin352: btn_retablir_allClick(Sender);353: end;354: 355: procedure TResult2.CalculClick(Sender: TObject);356: begin357: Form2.Show;358: Self.Release;359: end;360: 361: procedure TResult2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);362: begin363: {$IF DEFINED(Win32)or DEFINED(Win64)}364: Form2.Show;365: Self.Release;366: {$ENDIF}367: end;368: 369: procedure TResult2.FormCreate(Sender: TObject);370: begin371: {$IF DEFINED(Win32)or DEFINED(Win64)}

Page 130: Bouheniche rida memoire final

372: btn_Nouvelle_Iteration.Visible := true;373: btn_retablir_all.Visible := true;374: btn_EnrgistreExcel.Visible := true;375: {$ENDIF}376: 377: if Form2.Type_Reseau = 'Ramifie' then378: begin379: ScrollBox4.Visible := false;380: {$IF DEFINED(Win32)or DEFINED(Win64)}381: btn_Nouvelle_Iteration.Visible := false;382: ScrollBox3.Width := 1020;383: ScrollBox2.Width := 1020;384: ScrollBox2.Position.Y := 240;385: {$ENDIF}386: {$IF DEFINED(iOS)or DEFINED(ANDROID)}387: btn_start.Visible := false;388: {$ENDIF}389: end;390: 391: {$IF DEFINED(Win32)or DEFINED(Win64)}392: FDConnection1.Close;393: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';394: FDConnection1.Params.Values['Database']:='test.db';395: {$ENDIF}396: {$IF DEFINED(iOS)or DEFINED(ANDROID)}397: FDConnection1.Close;398: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';399: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');400: {$ENDIF}401: try402: FDConnection1.Connected := true;403: try404: FDQuery1.SQL.Clear;405: if Form2.Type_Reseau = 'Maille' then406: FDQuery1.SQL.Add('Select NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[

'Select NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+Form2.IID_Project+';')

407: else408: FDQuery1.SQL.Add('Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)]

'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project 'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+Form2.ID_Project+';');

409: FDQuery1.Active := true;410: AutoSizeGrid(StringGrid1,FDQuery1);411: 412: if Form2.Type_Reseau = 'Maille' then413: begin414: FDQuery2.SQL.Clear;415: FDQuery2.SQL.Add('select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/

'select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Projec'select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Project='+Form2.ID_Project);

416: FDQuery2.Active := true;417: AutoSizeGrid(StringGrid2,FDQuery2);418: end419: else420: ScrollBox4.Visible := false;421: 422: FDQuery3.SQL.Clear;423: if Form2.Type_Reseau = 'Maille' then424: FDQuery3.SQL.Add('select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[

'select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[Q Corrige(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_Tranc'select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[Q Corrige(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconMaille where ID_Project = '+Form2.ID_Project+';')

425: else426: FDQuery3.SQL.Add('select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(

'select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie whe'select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie where ID_Project = '+Form2.ID_Project+';');

427: 428: FDQuery3.Active := true;429: AutoSizeGrid(StringGrid3,FDQuery3);430: Except431: ShowMessage('Requate invalide');432: end;433: 434: Except435: ShowMessage('Connection échouée');436: Close;437: end;

Page 131: Bouheniche rida memoire final

438: Iteration := Form2.Status-3;439: btn_Nouvelle_Iteration.Text := 'Nouvelle Itération ('+IntToStr(Form2.Status-3)+')';440: btn_start.Text := 'Nouvelle Itération ('+IntToStr(Form2.Status-3)+')';441: 442: 443: end;444: procedure TResult2.Rectangle1Click(Sender: TObject);445: begin446: if Rectangle11.Visible then447: begin448: Rectangle1.Visible := false;449: Rectangle11.Visible := false;450: end;451: 452: end;453: 454: procedure TResult2.AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);455: var456: C : integer;457: begin458: //ShowMessage('Column name :'+Grid.Columns[C].Header+' lenght : '+IntToStr(Grid.Columns[C].H

//ShowMessage('Column name :'+Grid.Columns[C].Header+' lenght : '+IntToStr(Grid.Columns[C].Header.Length)+' Display Width : '+IntToStr(Query.FieldByName(Grid.Columns[C].Header).DisplayWi//ShowMessage('Column name :'+Grid.Columns[C].Header+' lenght : '+IntToStr(Grid.Columns[C].Header.Length)+' Display Width : '+IntToStr(Query.FieldByName(Grid.Columns[C].Header).DisplayWidth));

459: for C := 0 to Grid.ColumnCount - 1 do begin460: if Grid.Columns[C].Header.Length >= Query.FieldByName(Grid.Columns[C].Header).DisplayWidth

then461: Grid.Columns[C].Width := Grid.Columns[C].Header.Length * 8462: else463: Grid.Columns[C].Width := Query.FieldByName(Grid.Columns[C].Header).DisplayWidth * 6 + 10

;464: 465: if Grid.Columns[C].Width > 120 then Grid.Columns[C].Width := 100;466: 467: end;468: 469: end;470: 471: 472: end.

Page 132: Bouheniche rida memoire final

1: unit Unit3;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,8: FMX.Controls.Presentation, FMX.Objects, FMX.Layouts, FMX.ExtCtrls;9:

10: type11: TForm3 = class(TForm)12: Button2: TButton;13: ToolBar1: TToolBar;14: Label1: TLabel;15: procedure Button2Click(Sender: TObject);16: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);17: private18: { Private declarations }19: public20: { Public declarations }21: end;22: 23: var24: Form3: TForm3;25: 26: implementation27: uses CRDEP_Unit;28: {$R *.fmx}29: {$R *.Windows.fmx MSWINDOWS}30: {$R *.SmXhdpiPh.fmx ANDROID}31: 32: procedure TForm3.Button2Click(Sender: TObject);33: begin34: Form2.Show;35: Self.Release;36: end;37: 38: procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean);39: begin40: {$IF DEFINED(Win32)or DEFINED(Win64)}41: Form2.Show;42: Self.Release;43: {$ENDIF}44: end;45: 46: end.

Page 133: Bouheniche rida memoire final

1: unit Unit5;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,8: FMX.Controls.Presentation, FMX.Edit, FMX.Objects, FireDAC.Stan.Intf,9: FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,

10: FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,11: FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs,12: FireDAC.FMXUI.Wait, FireDAC.FMXUI.Error, FireDAC.Comp.UI, Data.DB,13: FireDAC.Comp.Client, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,14: FireDAC.DApt, FireDAC.Comp.DataSet, System.Rtti, Data.Bind.EngExt,15: Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,16: Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX.Layouts, FMX.Grid,17: Data.Bind.Controls, Fmx.Bind.Navigator, FMX.EditBox, FMX.NumberBox,18: FMX.ListBox;19: 20: type21: TForm5 = class(TForm)22: ToolBar1: TToolBar;23: Label1: TLabel;24: back: TButton;25: Calcul: TButton;26: Image1: TImage;27: FDConnection1: TFDConnection;28: StringGrid1: TStringGrid;29: FDQuery1: TFDQuery;30: NumberBox1 : TNumberBox;31: NumberBox2 : TNumberBox;32: Button1: TButton;33: Label2 : TLabel;34: Label3 : TLabel;35: ScrollBox1: TScrollBox;36: GroupBox1: TGroupBox;37: GroupBox3: TGroupBox;38: StringGrid2: TStringGrid;39: BindNavigator2: TBindNavigator;40: ScrollBox3: TScrollBox;41: ScrollBox4: TScrollBox;42: FDQuery2: TFDQuery;43: FDQuery3: TFDQuery;44: btn_calcul: TButton;45: BindSourceDB1: TBindSourceDB;46: BindingsList1: TBindingsList;47: LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;48: BindNavigator1: TBindNavigator;49: BindSourceDB2: TBindSourceDB;50: LinkGridToDataSourceBindSourceDB2: TLinkGridToDataSource;51: ComboBox1: TComboBox;52: ComboBox2: TComboBox;53: ComboBox3: TComboBox;54: procedure backClick(Sender: TObject);55: procedure FormCreate(Sender: TObject);56: procedure AutoSizeGrid(Grid: TStringGrid ; Query: TFDQuery);57: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);58: procedure Button1Click(Sender: TObject);59: procedure CalculClick(Sender: TObject);60: procedure btn_calculClick(Sender: TObject);61: procedure ComboBox1Change(Sender: TObject);62: procedure StringGrid1SelectCell(Sender: TObject; const ACol, ARow: Integer;63: var CanSelect: Boolean);64: procedure ComboBox2Change(Sender: TObject);65: procedure ComboBox3Change(Sender: TObject);66: procedure StringGrid2SelectCell(Sender: TObject; const ACol, ARow: Integer;67: var CanSelect: Boolean);68: function WidthCol(Grid: TStringGrid; Col : Integer): Real;69: private70: { Private declarations }71: public72: { Public declarations }73: end;74: 75: var76: Form5: TForm5;

Page 134: Bouheniche rida memoire final

77: X_Scroll : Real;78: 79: implementation80: 81: uses CRDEP_Unit,System.IOUtils,Result_1,Math;82: 83: //---------------------------------------------84: // Calcul Dcal Reseau Maille et Ramifier85: //---------------------------------------------86: function Calcul_DNTrancons(Query :TFDQuery):boolean;87: var NT,NAmont,NAval : String;88: Sens : Integer;89: Q,Long,Reguosite : Real;90: CPAmont,CPAval,CTNAmont,CTNAval,PSAmont,PSAval,Delta_Ht,J1,D,R,Psi,F,J2,PDCT,PDCT2 : Real;91: Dcal : Real;92: Query2 :TFDQuery;93: begin94: Query2 := TFDQuery.Create(Form5);95: Query2.Connection := Query.Connection;96: try97: Query.Close;98: Query.SQL.Clear;99: Query.SQL.Add('select * from Trancons where NT >= 0 and ID_Project='+Form2.ID_Project+';');

100: Query.Active := true;101: Query2.SQL.Add('delete from DNTrancons where NT >= 0 and ID_Project='+Form2.ID_Project+';');102: finally103: while not(Query.Eof) do104: begin105: //donner106: NT := Query.FieldByName('NT').AsString;107: NAmont := Query.FieldByName('NAmont').AsString;108: NAval := Query.FieldByName('NAval').AsString;109: CTNAmont := Query.FieldByName('CTNAmont').AsFloat;110: CTNAval := Query.FieldByName('CTNAval').AsFloat;111: PSAmont := Query.FieldByName('PSAmont').AsFloat;112: PSAval := Query.FieldByName('PSAval').AsFloat;113: Q := Query.FieldByName('Q').AsFloat;114: Long := Query.FieldByName('Long').AsFloat;115: Reguosite := Query.FieldByName('Reguosite').AsFloat;116: //calcul117: CPAmont := CTNAmont + PSAmont;118: //ShowMessage('CPAmont='+FloatToStr(CPAmont));119: CPAval := CTNAval + PSAval;120: //ShowMessage('CPAval='+FloatToStr(CPAval));121: Delta_Ht := CPAmont - CPAval;122: //ShowMessage('Delta_Ht='+FloatToStr(Delta_Ht));123: J1 := Abs(Delta_Ht / Long);124: //ShowMessage('J1='+FloatToStr(J1));125: D := Pi*Sqrt(2)*Sqrt(9.81*J1*Power(Q,5));126: //ShowMessage('D='+FloatToStr(D));127: R := 4 * Sqrt(2)*Sqrt(9.81*J1*Power(Q,3))/0.000001;128: //ShowMessage('R='+FloatToStr(R));129: Psi := -0.5*Log10((Reguosite/Q/3.7)+(10.04/R));130: //ShowMessage('Psi='+FloatToStr(Psi));131: Dcal := Psi * D;132: //ShowMessage('Dcal='+FloatToStr(Dcal));133: F := Power(-2*Log10((Reguosite/Q/3.7)+(10.7/R)),-2);134: //ShowMessage('F='+FloatToStr(F));135: 136: Query2.SQL.Add('insert into DNTrancons(ID_Project,NT,NAmont,NAval,DC,CPAmont,CPAval,DHT,J1

'insert into DNTrancons(ID_Project,NT,NAmont,NAval,DC,CPAmont,CPAval,DHT,J1,D,R,Psi,F)values('+Form2.ID_Project+','+NT+','+QuotedStr(NAmont)+','+QuotedStr(NAval)+','+FloFloatToStr(Dcal)+','+FloatToStr(CPAmont)+','+FloatToStr(CPAval)+','+FloatToStr(Delta_Ht)+','+Floa

FloatToStr(J1)+','+FloatToStr(D)+','+FloatToStr(R)+','+FloatToStr(Psi)+','+FloatToStr(F)+');');137: Query.Next;138: end;139: end;140: 141: try142: Query2.ExecSQL;143: Result := true;144: Except145: ShowMessage('Re-entrer des valeurs le trançons');146: Result := false;147: end;148: end;149:

Page 135: Bouheniche rida memoire final

150: 151: //---------------------------------------------152: 153: //---------------------------------------------154: 155: {$R *.fmx}156: {$R *.Windows.fmx MSWINDOWS}157: {$R *.SmXhdpiPh.fmx ANDROID}158: {$R *.LgXhdpiTb.fmx ANDROID}159: 160: procedure TForm5.backClick(Sender: TObject);161: begin162: Form2.Show;163: Self.Release;164: end;165: 166: procedure TForm5.btn_calculClick(Sender: TObject);167: begin168: if Calcul_DNTrancons(FDQuery3) then169: begin170: FDQuery3.Close;171: FDQuery3.SQL.Clear;172: FDQuery3.SQL.Add('update Logins set Status = 2 where ID='+Form2.ID_Project);173: FDQuery3.ExecSQL;174: Form2.Status := 2;175: TResult1.Create(Owner).Show;176: self.Hide;177: end;178: end;179: 180: procedure TForm5.Button1Click(Sender: TObject);181: var I : integer;182: begin183: try184: FDQuery3.Close;185: FDQuery3.SQL.Clear;186: FDQuery3.SQL.Add('delete from Trancons where NT > 0 and ID_Project='+Form2.ID_Project+';')

);187: for I := 1 to StrToInt(NumberBox1.Text) do188: FDQuery3.SQL.Add('insert into Trancons(ID_Project,NT) values ('+Form2.ID_Project+','+Int

IntToStr(I)+');');189: FDQuery3.ExecSQL;190: FDQuery2.Close;191: FDQuery2.Active := true;192: AutoSizeGrid(StringGrid2,FDQuery2);193: if StrToInt(NumberBox1.Text) > 4 then194: begin195: GroupBox3.Height := StringGrid2.RowHeight * StrToInt(NumberBox1.Text) + 100;196: {$IF DEFINED(iOS)or DEFINED(ANDROID)}197: ScrollBox4.Height := GroupBox3.Height + 10;198: {$ENDIF}199: end200: else201: begin202: GroupBox3.Height := StringGrid2.RowHeight * 4 + 100;203: {$IF DEFINED(iOS)or DEFINED(ANDROID)}204: ScrollBox4.Height := GroupBox3.Height + 10;205: {$ENDIF}206: end;207: ShowMessage('initialisation de donner');208: Except209: ShowMessage('Error Query');210: end;211: end;212: 213: procedure TForm5.CalculClick(Sender: TObject);214: begin215: if Calcul_DNTrancons(FDQuery3) then216: begin217: FDQuery3.Close;218: FDQuery3.SQL.Clear;219: FDQuery3.SQL.Add('update Logins set Status = 2 where ID='+Form2.ID_Project);220: FDQuery3.ExecSQL;221: Form2.Status := 2;222: TResult1.Create(Owner).Show;223: self.Hide;

Page 136: Bouheniche rida memoire final

224: end;225: end;226: 227: 228: procedure TForm5.ComboBox1Change(Sender: TObject);229: begin230: if (ComboBox1.ItemIndex <> -1) then231: begin232: BindSourceDB1.DataSet.Edit;233: BindSourceDB1.DataSet.FieldByName('Reguosite Abs').AsFloat := StrToFloat(ComboBox1.Items.S

Strings[ComboBox1.ItemIndex]);234: BindSourceDB1.DataSet.Post;235: //ComboBox1.Visible := false;236: end;237: end;238: 239: procedure TForm5.ComboBox2Change(Sender: TObject);240: begin241: if (ComboBox2.ItemIndex <> -1) then242: begin243: BindSourceDB2.DataSet.Edit;244: BindSourceDB2.DataSet.FieldByName('Reguosite Abs').AsFloat := StrToFloat(ComboBox2.Items.S

Strings[ComboBox2.ItemIndex]);245: BindSourceDB2.DataSet.Post;246: //ComboBox2.Visible := false;247: end;248: 249: end;250: 251: procedure TForm5.ComboBox3Change(Sender: TObject);252: begin253: if (ComboBox3.ItemIndex <> -1) then254: begin255: BindSourceDB2.DataSet.Edit;256: BindSourceDB2.DataSet.FieldByName('Sens').AsInteger := StrToInt(ComboBox3.Items.Strings[Co

ComboBox3.ItemIndex]);257: BindSourceDB2.DataSet.Post;258: //ComboBox3.Visible := false;259: end;260: 261: end;262: 263: procedure TForm5.FormCloseQuery(Sender: TObject; var CanClose: Boolean);264: begin265: {$IF DEFINED(Win32)or DEFINED(Win64)}266: Form2.Show;267: Self.Release;268: {$ENDIF}269: end;270: 271: procedure TForm5.FormCreate(Sender: TObject);272: begin273: {$IF DEFINED(Win32)or DEFINED(Win64)}274: btn_calcul.Visible := true;275: ScrollBox3.Margins.Bottom := 0;276: ScrollBox4.Margins.Bottom := 0;277: ScrollBox4.Margins.Top := 0;278: {$ENDIF}279: {$IF DEFINED(Win32)or DEFINED(Win64)}280: FDConnection1.Close;281: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';282: FDConnection1.Params.Values['Database']:='test.db';283: {$ENDIF}284: {$IF DEFINED(iOS)or DEFINED(ANDROID)}285: FDConnection1.Close;286: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';287: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');288: {$ENDIF}289: try290: FDConnection1.Connected := true;291: try292: FDQuery1.Close;293: FDQuery1.SQL.Clear;294: FDQuery1.SQL.Add('select ID_Project,NT,NAmont,NAval,Q as [Qp],CTNAmont,CTNAval,PSAmont,P

'select ID_Project,NT,NAmont,NAval,Q as [Qp],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT = 0 and ID_Project='+Form2.ID_PID_Project);

Page 137: Bouheniche rida memoire final

295: FDQuery1.Active := true;296: AutoSizeGrid(StringGrid1,FDQuery1);297: FDQuery2.Close;298: FDQuery2.SQL.Clear;299: if Form2.Type_Reseau = 'Maille' then300: FDQuery2.SQL.Add('select ID_Project,NT,MP,MA,NAmont,NAval,Sens,Q as [Qr],CTNAmont,CTNA

'select ID_Project,NT,MP,MA,NAmont,NAval,Sens,Q as [Qr],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT > 0 and ID_Project'select ID_Project,NT,MP,MA,NAmont,NAval,Sens,Q as [Qr],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT > 0 and ID_Project='+Form2.ID_Project)

301: else302: FDQuery2.SQL.Add('select ID_Project,NT,NAmont,NAval,Q as [Qr],CTNAmont,CTNAval,PSAmont

'select ID_Project,NT,NAmont,NAval,Q as [Qr],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT > 0 and ID_Project='+Form2.IDID_Project);

303: FDQuery2.Active := true;304: AutoSizeGrid(StringGrid2,FDQuery2);305: if StringGrid2.RowCount > 4 then306: begin307: GroupBox3.Height := StringGrid2.RowHeight * StringGrid2.RowCount + 100;308: {$IF DEFINED(iOS)or DEFINED(ANDROID)}309: ScrollBox4.Height := GroupBox3.Height + 10;310: {$ENDIF}311: end;312: Except313: ShowMessage('Requate invalide');314: end;315: 316: Except317: ShowMessage('Connection échouée');318: Close;319: end;320: end;321: procedure TForm5.StringGrid1SelectCell(Sender: TObject; const ACol,322: ARow: Integer; var CanSelect: Boolean);323: begin324: if (ACol = 10) and (ARow <= StringGrid1.RowCount) then325: begin326: ComboBox1.ItemIndex := -1;327: {$IF DEFINED(Win32)or DEFINED(Win64)}328: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X+2;329: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+22;330: ComboBox1.Width := StringGrid1.Columns[ACol].Width;331: ComboBox1.Height := StringGrid1.RowHeight;332: {$ENDIF}333: {$IF DEFINED(iOS)or DEFINED(ANDROID)}334: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X-4;335: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+32;336: ComboBox1.Width := StringGrid1.Columns[ACol].Width+5;337: ComboBox1.Height := StringGrid1.RowHeight+5;338: {$ENDIF}339: ComboBox1.Visible := True;340: CanSelect := true;341: end342: else343: ComboBox1.Visible := False;344: 345: end;346: 347: procedure TForm5.StringGrid2SelectCell(Sender: TObject; const ACol,348: ARow: Integer; var CanSelect: Boolean);349: var Col : integer;350: begin351: if Form2.Type_Reseau = 'Maille' then352: Col := 13353: else354: Col := 10;355: if (ACol = 6) and (ARow <= StringGrid2.RowCount) and (Form2.Type_Reseau = 'Maille') then356: begin357: ComboBox3.ItemIndex := -1;358: {$IF DEFINED(Win32)or DEFINED(Win64)}359: 360: ComboBox3.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X+2;361: ComboBox3.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+22;362: ComboBox3.Width := StringGrid2.Columns[ACol].Width;363: ComboBox3.Height := StringGrid2.RowHeight;364: {$ENDIF}365: {$IF DEFINED(iOS)or DEFINED(ANDROID)}366: ComboBox3.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X-4;

Page 138: Bouheniche rida memoire final

367: ComboBox3.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+32;368: ComboBox3.Width := StringGrid2.Columns[ACol].Width+5;369: ComboBox3.Height := StringGrid2.RowHeight+5;370: {$ENDIF}371: ComboBox3.Visible := True;372: //StringGrid2.SelectRow(ARow);373: CanSelect := true;374: end375: else376: if (ACol = Col) and (ARow <= StringGrid2.RowCount) then377: begin378: ComboBox2.ItemIndex := -1;379: {$IF DEFINED(Win32)or DEFINED(Win64)}380: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X+2;381: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+22;382: ComboBox2.Width := StringGrid2.Columns[ACol].Width;383: ComboBox2.Height := StringGrid2.RowHeight;384: {$ENDIF}385: {$IF DEFINED(iOS)or DEFINED(ANDROID)}386: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X-4;387: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+32;388: ComboBox2.Width := StringGrid2.Columns[ACol].Width+5;389: ComboBox2.Height := StringGrid2.RowHeight+5;390: {$ENDIF}391: ComboBox2.Visible := True;392: //StringGrid2.SelectRow(ARow);393: CanSelect := true;394: end395: else396: begin397: ComboBox2.Visible := False;398: ComboBox3.Visible := False;399: end;400: end;401: 402: procedure TForm5.AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);403: var404: C : integer;405: begin406: for C := 0 to Grid.ColumnCount - 1 do begin407: if Grid.Columns[C].Header.Length > Query.FieldByName(Grid.Columns[C].Header).DisplayWidth

then408: Grid.Columns[C].Width := Grid.Columns[C].Header.Length * 8409: else410: Grid.Columns[C].Width := Query.FieldByName(Grid.Columns[C].Header).DisplayWidth * 8;411: if Grid.Equals(StringGrid1) and ((C = 0)or(C = 1)) then Grid.Columns[C].Visible := false;412: if Grid.Equals(StringGrid2) and (C = 0) then Grid.Columns[C].Visible := false;413: 414: end;415: 416: end;417: function TForm5.WidthCol(Grid: TStringGrid; Col : Integer): Real;418: var419: C : integer;420: Sum : Real;421: begin422: Sum := 0;423: for C := 0 to Col do424: begin425: Sum := Sum + Grid.Columns[C].Width;426: end;427: Result := Sum;428: end;429: 430: 431: end.

Page 139: Bouheniche rida memoire final

1: unit Unit7;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,8: FMX.StdCtrls, FMX.Objects, FMX.Controls.Presentation, FireDAC.Stan.Intf,9: FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,

10: FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,11: Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX.ScrollBox, FMX.Memo;12: 13: type14: TForm7 = class(TForm)15: ToolBar1: TToolBar;16: Label1: TLabel;17: exit: TButton;18: Image1: TImage;19: Memo1: TMemo;20: procedure exitClick(Sender: TObject);21: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);22: private23: { Private declarations }24: public25: { Public declarations }26: end;27: 28: var29: Form7: TForm7;30: 31: implementation32: 33: uses CRDEP_Unit;34: {$R *.fmx}35: {$R *.SmXhdpiPh.fmx ANDROID}36: {$R *.Windows.fmx MSWINDOWS}37: 38: procedure TForm7.exitClick(Sender: TObject);39: begin40: Form2.Show;41: Self.Release;42: end;43: 44: procedure TForm7.FormCloseQuery(Sender: TObject; var CanClose: Boolean);45: begin46: Form2.Show;47: Self.Release;48: 49: end;50: 51: end.

Page 140: Bouheniche rida memoire final

1: unit CRDEP_Unit;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,8: FMX.Objects, FMX.Menus, FMX.Controls.Presentation, FMX.Edit,9: FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,

10: FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,11: FireDAC.Stan.Async, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet,12: FireDAC.Comp.Client, FireDAC.UI.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,13: FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,14: FireDAC.Stan.ExprFuncs, FireDAC.FMXUI.Error, FireDAC.FMXUI.Wait,15: FireDAC.Comp.UI, FMX.Effects, FMX.Ani, System.Rtti, FMX.Layouts, FMX.Grid,16: Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs,17: Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope,18: FMX.ListBox, FMX.ComboEdit, FireDAC.FMXUI.Script, FireDAC.FMXUI.Async;19: 20: type21: TForm2 = class(TForm)22: Image1: TImage;23: FDConnection1: TFDConnection;24: FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;25: FDGUIxErrorDialog1: TFDGUIxErrorDialog;26: FDGUIxWaitCursor1: TFDGUIxWaitCursor;27: btn_start: TButton;28: ToolBar1: TToolBar;29: Label1: TLabel;30: btn_exit: TButton;31: btn_Setting: TButton;32: Rectangle1: TRectangle;33: Rectangle11: TRectangle;34: Button2: TButton;35: Button3: TButton;36: Button1: TButton;37: Rectangle12: TRectangle;38: Rectangle13: TRectangle;39: Rectangle2: TRectangle;40: Label2: TLabel;41: Password: TEdit;42: btn_Close: TButton;43: login: TButton;44: CheckBox2: TCheckBox;45: ShadowEffect1: TShadowEffect;46: Rectangle5: TRectangle;47: Label3: TLabel;48: Pwd: TEdit;49: Rectangle6: TRectangle;50: Cancel: TButton;51: Confirmer: TButton;52: Rectangle7: TRectangle;53: CheckBox1: TCheckBox;54: ShadowEffect2: TShadowEffect;55: Rectangle8: TRectangle;56: Label4: TLabel;57: Rectangle9: TRectangle;58: close_chois: TButton;59: btn_chois: TButton;60: Rectangle10: TRectangle;61: RadioButton1: TRadioButton;62: RadioButton2: TRadioButton;63: ShadowEffect3: TShadowEffect;64: ColorAnimation2: TColorAnimation;65: ColorAnimation3: TColorAnimation;66: ColorAnimation1: TColorAnimation;67: ColorAnimation4: TColorAnimation;68: ColorAnimation5: TColorAnimation;69: ColorAnimation6: TColorAnimation;70: FDQuery1: TFDQuery;71: MenuBar1: TMenuBar;72: fichier: TMenuItem;73: Option: TMenuItem;74: Help: TMenuItem;75: Nouveau_projet: TMenuItem;76: Exit: TMenuItem;

Page 141: Bouheniche rida memoire final

77: Mod_pass: TMenuItem;78: propos: TMenuItem;79: Aide: TMenuItem;80: ComboEdit1: TComboEdit;81: MenuItem2: TMenuItem;82: Button4: TButton;83: ColorAnimation7: TColorAnimation;84: ColorAnimation8: TColorAnimation;85: Rectangle14: TRectangle;86: MenuItem3: TMenuItem;87: Button5: TButton;88: ColorAnimation9: TColorAnimation;89: ColorAnimation10: TColorAnimation;90: Rectangle15: TRectangle;91: Rectangle16: TRectangle;92: reda: TEdit;93: Edit2: TEdit;94: Rectangle17: TRectangle;95: CheckBox3: TCheckBox;96: Label5: TLabel;97: procedure loginClick(Sender: TObject);98: procedure FormCreate(Sender: TObject);99: procedure CheckBox2Change(Sender: TObject);

100: procedure CheckBox1Change(Sender: TObject);101: procedure CancelClick(Sender: TObject);102: procedure ConfirmerClick(Sender: TObject);103: procedure btn_CloseClick(Sender: TObject);104: procedure btn_SettingClick(Sender: TObject);105: procedure btn_exitClick(Sender: TObject);106: procedure close_choisClick(Sender: TObject);107: procedure btn_choisClick(Sender: TObject);108: procedure FormResize(Sender: TObject);109: procedure FormVirtualKeyboardShown(Sender: TObject;110: KeyboardVisible: Boolean; const Bounds: TRect);111: procedure FormVirtualKeyboardHidden(Sender: TObject;112: KeyboardVisible: Boolean; const Bounds: TRect);113: procedure Rectangle1Click(Sender: TObject);114: procedure Button2Click(Sender: TObject);115: procedure Button3Click(Sender: TObject);116: procedure Button1Click(Sender: TObject);117: procedure Nouveau_projetClick(Sender: TObject);118: procedure ExitClick(Sender: TObject);119: procedure Mod_passClick(Sender: TObject);120: procedure proposClick(Sender: TObject);121: procedure AideClick(Sender: TObject);122: procedure btn_startClick(Sender: TObject);123: procedure MenuItem2Click(Sender: TObject);124: procedure Button4Click(Sender: TObject);125: procedure MenuItem3Click(Sender: TObject);126: procedure Button5Click(Sender: TObject);127: procedure CheckBox3Change(Sender: TObject);128: 129: private130: show_keyboard : boolean;131: public132: ID_Project,Type_Reseau : String;133: Status : Integer;134: 135: end;136: 137: var138: Form2: TForm2;139: 140: 141: implementation142: 143: uses System.IOUtils,Unit5,Unit3,Unit7,Result_1,Result_2; // Automatically added by IDE144: 145: {$R *.fmx}146: {$R *.iPhone.fmx IOS}147: {$R *.Windows.fmx MSWINDOWS}148: {$R *.SmXhdpiPh.fmx ANDROID}149: {$R *.Macintosh.fmx MACOS}150: {$R *.XLgXhdpiTb.fmx ANDROID}151: {$R *.NmXhdpiPh.fmx ANDROID}152: {$R *.LgXhdpiPh.fmx ANDROID}

Page 142: Bouheniche rida memoire final

153: {$R *.Surface.fmx MSWINDOWS}154: 155: procedure TForm2.AideClick(Sender: TObject);156: var aid : TForm7;157: begin158: aid := TForm7.Create(Owner);159: aid.Show;160: Self.Hide;161: end;162: 163: procedure TForm2.btn_choisClick(Sender: TObject);164: var Form_Debut : TForm5;165: begin166: Rectangle1.Visible := false;167: Rectangle8.Visible := false;168: btn_start.TintColor := TAlphaColorRec.Green;169: FDQuery1.Close;170: FDQuery1.SQL.Clear;171: if RadioButton1.IsChecked then172: begin173: FDQuery1.SQL.Add('update Logins set Status=1,Type='+QuotedStr('Maille')+' where ID = '+ID_

ID_Project);174: Type_Reseau := 'Maille';175: end176: else177: begin178: FDQuery1.SQL.Add('update Logins set Status=1,Type='+QuotedStr('Ramifie')+' where ID = '+ID

ID_Project);179: Type_Reseau := 'Ramifie';180: end;181: FDQuery1.ExecSQL;182: Status := 1;183: Form_Debut := TForm5.Create(Owner);184: Form_Debut.Show;185: Self.Hide;186: end;187: 188: procedure TForm2.btn_CloseClick(Sender: TObject);189: begin190: if (reda.Text.IndexOf(Edit2.Text) = -1) and (reda.Text <> '') then191: begin192: FDQuery1.Close;193: FDQuery1.SQL.Clear;194: FDQuery1.SQL.Add('insert into Logins(Password,Project,Status)Values('+QuotedStr(Edit2.Text

)+','+QuotedStr(reda.Text)+',0)');195: FDQuery1.ExecSQL;196: ShowMessage('Create');197: 198: FDQuery1.Close;199: FDQuery1.SQL.Clear;200: FDQuery1.SQL.Add('select * from logins where Project='+QuotedStr(reda.Text));201: FDQuery1.Active := true;202: ID_Project := FDQuery1.FieldByName('ID').AsString;203: Status := 0;204: 205: FDQuery1.Close;206: FDQuery1.SQL.Clear;207: FDQuery1.SQL.Add('insert into Trancons(ID_Project,NT)values('+ID_Project+',0)');208: FDQuery1.ExecSQL;209: 210: Rectangle1.Visible := false;211: Rectangle2.Visible := false;212: {$IF DEFINED(Win32)or DEFINED(Win64)}213: MenuBar1.Enabled := true;214: {$ENDIF}215: 216: end217: else218: ShowMessage('Re-saisissez le nom du projet');219: end;220: 221: procedure TForm2.btn_exitClick(Sender: TObject);222: begin223: ShowMessage('Merci pour votre vésite');224: Sleep(1000);225: Close;

Page 143: Bouheniche rida memoire final

226: end;227: 228: procedure TForm2.btn_SettingClick(Sender: TObject);229: begin230: Rectangle1.Opacity := 0;231: Rectangle1.Visible := true;232: Rectangle11.Visible := true;233: end;234: 235: procedure TForm2.btn_startClick(Sender: TObject);236: begin237: if Status = 0 then238: begin239: //btn_start.Text := 'Choisie un type de réseau'240: btn_chois.Width := Rectangle9.Width / 2;241: close_chois.Width := Rectangle9.Width / 2;242: Rectangle1.Visible := true;243: Rectangle8.Visible := true;244: FormResize(sender);245: end246: else if Status = 1 then247: begin248: //btn_start.Text := 'Entre le donner'249: TForm5.Create(Owner).Show;250: Self.Hide;251: end252: else if Status = 2 then253: begin254: //btn_start.Text := 'Choix Diameter'255: TResult1.Create(Owner).Show;256: Self.Hide;257: end258: else if Status >= 3 then259: begin260: //btn_start.Text := 'Résulta & Itération';261: TResult2.Create(Owner).Show;262: Self.Hide;263: end;264: btn_start.TintColor := TAlphaColorRec.Green;265: end;266: 267: procedure TForm2.Button1Click(Sender: TObject);268: begin269: Rectangle1.Visible := false;270: Rectangle11.Visible := false;271: Rectangle1.Opacity := 0.5;272: try273: FDQuery1.Active := true;274: pwd.Text := FDQuery1.FieldByName('Password').Text;275: Cancel.Width := Rectangle6.Width / 2;276: Confirmer.Width := Rectangle6.Width / 2;277: Rectangle1.Visible := true;278: Rectangle5.Visible := true;279: FormResize(sender);280: Except281: ShowMessage('Connection échouée');282: end;283: 284: end;285: 286: procedure TForm2.Button2Click(Sender: TObject);287: var propos : TForm3;288: begin289: Rectangle1.Visible := false;290: Rectangle11.Visible := false;291: Rectangle1.Opacity := 0.5;292: propos := TForm3.Create(Owner);293: propos.Show;294: Self.Hide;295: end;296: 297: procedure TForm2.Button3Click(Sender: TObject);298: var aid : TForm7;299: begin300: Rectangle1.Visible := false;301: Rectangle11.Visible := false;

Page 144: Bouheniche rida memoire final

302: Rectangle1.Opacity := 0.5;303: 304: aid := TForm7.Create(Owner);305: aid.Show;306: Self.Hide;307: end;308: 309: procedure TForm2.Button4Click(Sender: TObject);310: begin311: try312: Rectangle11.Visible := false;313: Rectangle1.Opacity := 0.5;314: Rectangle1.Visible := true;315: Rectangle2.Visible := true;316: FDQuery1.Close;317: FDQuery1.SQL.Clear;318: FDQuery1.SQL.Add('select Project from Logins order by ID');319: FDQuery1.Active := true;320: ComboEdit1.Items.Clear;321: while not(FDQuery1.Eof) do322: begin323: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);324: FDQuery1.Next;325: end;326: Except327: Close;328: end;329: show_keyboard := true;330: 331: end;332: 333: procedure TForm2.Button5Click(Sender: TObject);334: var mes :String;335: begin336: Rectangle11.Visible := false;337: Rectangle1.Visible := false;338: Rectangle1.Opacity := 0.5;339: 340: mes := 'ATTENTION vous allez suprimer un projet,Etes-vous sur de vouloir le suprimer?';341: MessageDlg(mes, System.UITypes.TMsgDlgType.mtConfirmation,342: [343: System.UITypes.TMsgDlgBtn.mbOK,344: System.UITypes.TMsgDlgBtn.mbCancel345: ], 0,346: // Use an anonymous method to make sure the acknowledgment appears as expected.347: procedure(const AResult: TModalResult)348: begin349: case AResult of350: mrOk:351: begin352: FDQuery1.Close;353: FDQuery1.SQL.Clear;354: FDQuery1.SQL.Add('delete from Logins where ID ='+ID_Project+' ; ');355: FDQuery1.SQL.Add('delete from Trancons where ID_Project ='+ID_Project+' ; ');356: FDQuery1.SQL.Add('delete from DNTrancons where ID_Project ='+ID_Project+' ; ');357: try358: FDQuery1.ExecSQL;359: ShowMessage('Le Projet est Supprimer');360: Rectangle1.Visible := true;361: Rectangle2.Visible := true;362: FDQuery1.Close;363: FDQuery1.SQL.Clear;364: FDQuery1.SQL.Add('select Project from Logins order by ID');365: FDQuery1.Active := true;366: ComboEdit1.Items.Clear;367: while not(FDQuery1.Eof) do368: begin369: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);370: FDQuery1.Next;371: end;372: show_keyboard := true;373: Except374: ShowMessage('Requate invalide');375: end;376: end;377: mrCancel:

Page 145: Bouheniche rida memoire final

378: end;379: 380: end381: 382: )383: 384: 385: end;386: 387: procedure TForm2.CancelClick(Sender: TObject);388: begin389: CheckBox1.IsChecked := false;390: Rectangle1.Visible := false;391: Rectangle5.Visible := false;392: end;393: 394: procedure TForm2.CheckBox1Change(Sender: TObject);395: begin396: Pwd.Password := not(CheckBox1.IsChecked);397: end;398: 399: procedure TForm2.CheckBox2Change(Sender: TObject);400: begin401: edit2.Password := not(CheckBox2.IsChecked);402: end;403: 404: procedure TForm2.CheckBox3Change(Sender: TObject);405: begin406: Password.Password := not(CheckBox2.IsChecked);407: end;408: 409: procedure TForm2.close_choisClick(Sender: TObject);410: begin411: Rectangle1.Visible := false;412: Rectangle8.Visible := false;413: btn_start.TintColor := TAlphaColorRec.Green;414: 415: end;416: 417: procedure TForm2.ConfirmerClick(Sender: TObject);418: begin419: FDQuery1.Close;420: FDQuery1.SQL.Clear;421: FDQuery1.SQL.Add('update logins set Password = '+QuotedStr(Pwd.Text)+' where ID = 1');422: FDQuery1.ExecSQL;423: ShowMessage('Le mot de passe est modifié');424: FDQuery1.Close;425: FDQuery1.SQL.Clear;426: FDQuery1.SQL.Add('select * from logins');427: Rectangle1.Visible := false;428: Rectangle5.Visible := false;429: end;430: 431: procedure TForm2.ExitClick(Sender: TObject);432: begin433: Close;434: end;435: 436: procedure TForm2.loginClick(Sender: TObject);437: begin438: if ComboEdit1.ItemIndex <> -1 then439: begin440: try441: FDQuery1.Close;442: FDQuery1.SQL.Clear;443: FDQuery1.SQL.Add('select * from Logins where Project = '+QuotedStr(ComboEdit1.Items[ComboE

ComboEdit1.ItemIndex]));444: FDQuery1.Active := true;445: if FDQuery1.FieldByName('Password').Text = Password.Text then446: begin447: ID_Project := FDQuery1.FieldByName('ID').AsString;448: Status := FDQuery1.FieldByName('Status').AsInteger;449: Type_Reseau := FDQuery1.FieldByName('Type').AsString;450: Rectangle1.Visible := false;451: Rectangle2.Visible := false;452: {$IF DEFINED(Win32)or DEFINED(Win64)}

Page 146: Bouheniche rida memoire final

453: MenuBar1.Enabled := true;454: {$ENDIF}455: end456: else457: begin458: ShowMessage('mot de passe incorrect');459: end;460: Except461: ShowMessage('Erreur inconnu');462: end;463: end464: else465: ShowMessage('Choisir un project ou create nouveau project!');466: 467: 468: end;469: 470: procedure TForm2.MenuItem2Click(Sender: TObject);471: var mes :String;472: begin473: mes := 'ATTENTION vous allez suprimer un projet,Etes-vous sur de vouloir le suprimer?';474: if MessageDlg(mes, System.UITypes.TMsgDlgType.mtConfirmation,[System.UITypes.TMsgDlgBtn.mbCanc

mbCancel, System.UITypes.TMsgDlgBtn.mbOK],1) = mrOk then475: begin476: FDQuery1.Close;477: FDQuery1.SQL.Clear;478: FDQuery1.SQL.Add('delete from Logins where ID = '+ID_Project+';');479: FDQuery1.SQL.Add('delete from Trancons where ID_Project = '+ID_Project+';');480: FDQuery1.SQL.Add('delete from DNTrancons where ID_Project = '+ID_Project+';');481: try482: FDQuery1.ExecSQL;483: ShowMessage('Le Projet est Supprimer');484: try485: Rectangle1.Visible := true;486: Rectangle2.Visible := true;487: FDQuery1.Close;488: FDQuery1.SQL.Clear;489: FDQuery1.SQL.Add('select Project from Logins order by ID');490: FDQuery1.Active := true;491: ComboEdit1.Items.Clear;492: while not(FDQuery1.Eof) do493: begin494: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);495: FDQuery1.Next;496: end;497: Except498: Close;499: end;500: show_keyboard := true;501: Except502: ShowMessage('Requate invalide');503: end;504: end;505: end;506: 507: procedure TForm2.MenuItem3Click(Sender: TObject);508: begin509: 510: try511: Rectangle1.Visible := true;512: Rectangle2.Visible := true;513: FDQuery1.Close;514: FDQuery1.SQL.Clear;515: FDQuery1.SQL.Add('select Project from Logins order by ID');516: FDQuery1.Active := true;517: ComboEdit1.Items.Clear;518: while not(FDQuery1.Eof) do519: begin520: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);521: FDQuery1.Next;522: end;523: Except524: Close;525: end;526: show_keyboard := true;527:

Page 147: Bouheniche rida memoire final

528: end;529: 530: procedure TForm2.Mod_passClick(Sender: TObject);531: begin532: try533: FDQuery1.Active := true;534: pwd.Text := FDQuery1.FieldByName('Password').Text;535: Rectangle1.Visible := true;536: Rectangle5.Visible := true;537: Except538: ShowMessage('Connection échouée');539: end;540: 541: end;542: 543: procedure TForm2.Nouveau_projetClick(Sender: TObject);544: begin545: if Status = 0 then546: begin547: //btn_start.Text := 'Choisie un type de réseau'548: Rectangle1.Visible := true;549: Rectangle8.Visible := true;550: end551: else if Status = 1 then552: begin553: //btn_start.Text := 'Entre le donner'554: TForm5.Create(Owner).Show;555: Self.Hide;556: end557: else if Status = 2 then558: begin559: //btn_start.Text := 'Choix Diameter'560: TResult1.Create(Owner).Show;561: Self.Hide;562: end563: else if Status >= 3 then564: begin565: //btn_start.Text := 'Résulta & Itération';566: TResult2.Create(Owner).Show;567: Self.Hide;568: end;569: end;570: 571: 572: procedure TForm2.proposClick(Sender: TObject);573: var propos : TForm3;574: begin575: propos := TForm3.Create(Owner);576: propos.Show;577: Self.Hide;578: end;579: 580: procedure TForm2.Rectangle1Click(Sender: TObject);581: begin582: if Rectangle11.Visible then583: begin584: Rectangle1.Visible := false;585: Rectangle11.Visible := false;586: Rectangle1.Opacity := 0.5;587: end;588: end;589: 590: procedure TForm2.FormCreate(Sender: TObject);591: begin592: {$IF DEFINED(Win32)or DEFINED(Win64)}593: MenuBar1.Visible := true;594: MenuBar1.Enabled := false;595: FDConnection1.Close;596: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';597: FDConnection1.Params.Values['Database']:='test.db';598: {$ENDIF}599: {$IF DEFINED(iOS)or DEFINED(ANDROID)}600: FDConnection1.Close;601: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';602: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');603: {$ENDIF}

Page 148: Bouheniche rida memoire final

604: 605: try606: FDConnection1.Connected := true;607: Rectangle1.Opacity := 0.5;608: Rectangle1.Visible := true;609: Rectangle2.Visible := true;610: FDQuery1.Close;611: FDQuery1.SQL.Clear;612: FDQuery1.SQL.Add('select Project from Logins order by ID');613: FDQuery1.Active := true;614: while not(FDQuery1.Eof) do615: begin616: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);617: FDQuery1.Next;618: end;619: 620: Except621: ShowMessage('Connection échouée');622: Close;623: end;624: show_keyboard := true;625: end;626: 627: 628: 629: procedure TForm2.FormResize(Sender: TObject);630: begin631: {$IF DEFINED(iOS)or DEFINED(ANDROID)}632: if Rectangle2.Visible then633: begin634: btn_Close.Width := Rectangle3.Width / 2;635: login.Width := Rectangle3.Width / 2;636: end;637: if Rectangle5.Visible then638: begin639: Confirmer.Width := Rectangle6.Width / 2;640: Cancel.Width := Rectangle6.Width / 2;641: end;642: if Rectangle8.Visible then643: begin644: btn_chois.Width := Rectangle9.Width / 2;645: close_chois.Width := Rectangle9.Width / 2;646: end;647: {$ENDIF}648: end;649: 650: procedure TForm2.FormVirtualKeyboardHidden(Sender: TObject;651: KeyboardVisible: Boolean; const Bounds: TRect);652: begin653: {$IF DEFINED(iOS)or DEFINED(ANDROID)}654: Rectangle2.Margins.Bottom := 0;655: Rectangle5.Margins.Bottom := 0;656: Rectangle8.Margins.Bottom := 0;657: show_keyboard := true;658: {$ENDIF}659: end;660: 661: procedure TForm2.FormVirtualKeyboardShown(Sender: TObject;662: KeyboardVisible: Boolean; const Bounds: TRect);663: begin664: {$IF DEFINED(iOS)or DEFINED(ANDROID)}665: if show_keyboard then666: begin667: if Rectangle2.Visible then668: if Bounds.Height+50 >= Rectangle2.Position.Y then669: Rectangle2.Margins.Bottom := Bounds.Height+50 - Rectangle2.Position.Y;670: 671: if Rectangle5.Visible then672: if Bounds.Height+50 >= Rectangle5.Position.Y then673: Rectangle5.Margins.Bottom := Bounds.Height+50 - Rectangle5.Position.Y;674: 675: if Rectangle8.Visible then676: if Bounds.Height+50 >= Rectangle8.Position.Y then677: Rectangle8.Margins.Bottom := Bounds.Height+50 - Rectangle8.Position.Y;678: show_keyboard := false;679: end;

Page 149: Bouheniche rida memoire final

680: {$ENDIF}681: end;682: 683: end.

Page 150: Bouheniche rida memoire final

1: unit Rapport;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,8: FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,9: FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,

10: FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,11: FireDAC.Stan.ExprFuncs, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,12: FireDAC.DApt, FMX.Controls.Presentation, FMX.StdCtrls, Data.DB,13: FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX.frxClass, FMX.frxDBSet,14: FireDAC.FMXUI.Wait, FireDAC.Comp.UI, FMX.frxExportPDF, FMX.frxExportRTF,15: FMX.frxExportHTML, FMX.frxExportCSV, FMX.frxExportImage, FMX.frxExportText;16: 17: type18: TForm1 = class(TForm)19: frxReport1: TfrxReport;20: frxDBDataset1: TfrxDBDataset;21: FDConnection1: TFDConnection;22: FDQuery1: TFDQuery;23: print: TButton;24: FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;25: FDGUIxWaitCursor1: TFDGUIxWaitCursor;26: FDQuery2: TFDQuery;27: FDQuery3: TFDQuery;28: frxDBDataset2: TfrxDBDataset;29: frxDBDataset3: TfrxDBDataset;30: frxBMPExport1: TfrxBMPExport;31: frxRTFExport1: TfrxRTFExport;32: frxHTMLExport1: TfrxHTMLExport;33: frxReport2: TfrxReport;34: procedure FormCreate(Sender: TObject);35: procedure printClick(Sender: TObject);36: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);37: private38: { Private declarations }39: public40: { Public declarations }41: end;42: 43: var44: Form1: TForm1;45: 46: implementation47: 48: uses System.IOUtils,CRDEP_Unit;49: {$R *.fmx}50: 51: procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);52: begin53: Self.Release;54: end;55: 56: procedure TForm1.FormCreate(Sender: TObject);57: begin58: FDConnection1.Close;59: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';60: FDConnection1.Params.Values['Database']:='test.db';61: try62: FDConnection1.Connected := true;63: FDQuery1.Close;64: FDQuery1.SQL.Clear;65: if Form2.Type_Reseau = 'Maille' then66: FDQuery1.SQL.Add('Select NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[

'Select NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+Form2.IID_Project+';')

67: else68: FDQuery1.SQL.Add('Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)]

'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project 'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+Form2.ID_Project+';');

69: 70: FDQuery1.Active := true;71: if Form2.Type_Reseau = 'Maille' then72: begin

Page 151: Bouheniche rida memoire final

73: FDQuery2.Close;74: FDQuery2.SQL.Clear;75: FDQuery2.SQL.Add('select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]

'select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Project='select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Project='+Form2.ID_Project);

76: FDQuery2.Active := true;77: end;78: 79: FDQuery3.Close;80: FDQuery3.SQL.Clear;81: if Form2.Type_Reseau = 'Maille' then82: FDQuery3.SQL.Add('select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[

'select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[Q Corrige(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_Tranc'select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[Q Corrige(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconMaille where ID_Project = '+Form2.ID_Project+';')

83: else84: FDQuery3.SQL.Add('select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(

'select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie whe'select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie where ID_Project = '+Form2.ID_Project+';');

85: FDQuery3.Active := true;86: Except87: ShowMessage('Connection échouée');88: Close;89: end;90: 91: end;92: 93: procedure TForm1.printClick(Sender: TObject);94: begin95: if Form2.Type_Reseau = 'Maille' then96: begin97: frxReport1.PrepareReport(true);98: frxReport1.ShowPreparedReport;99: end

100: else101: begin102: frxReport2.PrepareReport(true);103: frxReport2.ShowPreparedReport;104: end;105: Close;106: end;107: 108: end.

Page 152: Bouheniche rida memoire final

ANNEXE 4

Les unité de code source de programme de simulation

Page 153: Bouheniche rida memoire final

1: unit Result_1;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,8: FMX.Objects, System.Rtti, Data.Bind.Controls, Fmx.Bind.Navigator, FMX.Grid,9: FMX.StdCtrls, FMX.Controls.Presentation, FireDAC.Stan.Intf,

10: FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,11: FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,12: FireDAC.UI.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Phys,13: FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, Data.DB,14: FireDAC.Comp.Client, FireDAC.Comp.DataSet, Data.Bind.EngExt,15: Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,16: Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX.ListBox,17: FireDAC.FMXUI.Wait;18: 19: type20: TResult1 = class(TForm)21: Image1: TImage;22: ScrollBox1: TScrollBox;23: ToolBar1: TToolBar;24: Label1: TLabel;25: back: TButton;26: Calcul: TButton;27: ScrollBox2: TScrollBox;28: GroupBox2: TGroupBox;29: ScrollBox3: TScrollBox;30: GroupBox1: TGroupBox;31: StringGrid1: TStringGrid;32: ScrollBox4: TScrollBox;33: GroupBox3: TGroupBox;34: StringGrid3: TStringGrid;35: BindNavigator3: TBindNavigator;36: StringGrid2: TStringGrid;37: BindNavigator2: TBindNavigator;38: btn_calcul: TButton;39: FDQuery1: TFDQuery;40: FDConnection1: TFDConnection;41: FDQuery2: TFDQuery;42: FDQuery3: TFDQuery;43: BindNavigator1: TBindNavigator;44: BindSourceDB1: TBindSourceDB;45: BindingsList1: TBindingsList;46: LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;47: BindSourceDB2: TBindSourceDB;48: LinkGridToDataSourceBindSourceDB2: TLinkGridToDataSource;49: BindSourceDB3: TBindSourceDB;50: LinkGridToDataSourceBindSourceDB3: TLinkGridToDataSource;51: ComboBox1: TComboBox;52: ComboBox2: TComboBox;53: FDQuery4: TFDQuery;54: ComboBox3: TComboBox;55: Label2: TLabel;56: Button1: TButton;57: btn_start: TButton;58: DataSource1: TDataSource;59: DataSource2: TDataSource;60: procedure backClick(Sender: TObject);61: procedure btn_calculClick(Sender: TObject);62: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);63: procedure CalculClick(Sender: TObject);64: procedure FormCreate(Sender: TObject);65: procedure AutoSizeGrid(Grid: TStringGrid ; Query: TFDQuery);66: procedure StringGrid2SelectCell(Sender: TObject; const ACol, ARow: Integer;67: var CanSelect: Boolean);68: procedure ComboBox1Change(Sender: TObject);69: procedure ComboBox2Change(Sender: TObject);70: procedure StringGrid1SelectCell(Sender: TObject; const ACol, ARow: Integer;71: var CanSelect: Boolean);72: procedure ComboBox3Change(Sender: TObject);73: procedure Button1Click(Sender: TObject);74: procedure btn_startClick(Sender: TObject);75: procedure FDQuery2AfterPost(DataSet: TDataSet);76: procedure FDQuery1AfterPost(DataSet: TDataSet);

Page 154: Bouheniche rida memoire final

77: private78: { Private declarations }79: public80: { Public declarations }81: end;82: 83: var84: Result1: TResult1;85: Row2,Col2,Col1,Row1: Integer;86: C1,C2 : boolean;87: implementation88: 89: uses CRDEP_Unit,Unit5,Result_2,System.IOUtils,Math;90: {$R *.fmx}91: {$R *.Windows.fmx MSWINDOWS}92: {$R *.SmXhdpiPh.fmx ANDROID}93: 94: //---------------------------------------------95: //---------------------------------------------96: function ResultTrancons(Query :TFDQuery):boolean;97: var NT,MP,NAmont,NAval : String;98: Q,QCorrige,Dq : Real;99: Query2 :TFDQuery;

100: begin101: Query2 := TFDQuery.Create(Form5);102: Query2.Connection := Query.Connection;103: try104: Query.Close;105: Query.SQL.Clear;106: Query.SQL.Add('select * from Trancons where NT > 0 and ID_Project = '+Form2.ID_Project);107: Query.Active := true;108: finally109: while not(Query.Eof) do110: begin111: //donner112: NT := Query.FieldByName('NT').AsString;113: MP := Query.FieldByName('MP').AsString;114: Q := Query.FieldByName('Q').AsFloat;115: Query2.Close;116: Query2.SQL.Clear;117: Query2.SQL.Add('select [D q(m3/s)] from Erreur_mailles where MP='+MP+' and ID_Project = '+

Form2.ID_Project);118: try119: Query2.Active := true;120: Except121: ShowMessage('Re-entrer des valeurs le trançon NT :'+NT);122: end;123: Dq := Query2.Fields[0].AsFloat;124: //calcul125: QCorrige := Q + Dq;126: //update Table DNTrancons127: Query2.Close;128: Query2.SQL.Clear;129: Query2.SQL.Add('Update DNTrancons set QCorrige='+FloatToStr(QCorrige)+' where NT = '+NT+'

' and ID_Project = '+Form2.ID_Project+';');130: try131: Query2.ExecSQL;132: Except133: ShowMessage('requate invalide');134: Result := false;135: end;136: Query.Next;137: end;138: Result := true;139: end;140: end;141: 142: //------------------------------------------------------143: // Calcul Diameter Normalize144: //-------------------------------------------------------145: //---------------------------------------------146: function Diameter_Normalize(Dcal : Real;TC : String;Query:TFDQuery):Real;147: var Query1 :TFDQuery;148: I : Integer;149: Diametre,Def,min,max,DN : real;150: begin

Page 155: Bouheniche rida memoire final

151: Query1 := TFDQuery.Create(Form5);152: Query1.Connection := Query.Connection;153: Query1.Close;154: Query1.SQL.Add('select * from Diametres');155: Query1.Active := true;156: Query1.First;157: I := 1;158: while not(Query1.Eof) do159: begin160: Diametre := Query1.FieldByName(TC).AsFloat;161: if Diametre <> 0 then162: begin163: Def := (Diametre - Dcal);164: if (I = 1) and (Def > 0)then165: begin166: min := Def;167: DN := Diametre;168: I:= 0;169: end170: else171: if (min > Def) and (Def > 0) then172: begin173: min := Def;174: DN := Diametre;175: end;176: end;177: Query1.Next;178: end;179: if I = 0 then Result := DN180: else181: begin182: Query1.First;183: max := Query1.FieldByName(TC).AsFloat;184: while not(Query1.Eof) do185: begin186: if max < Query1.FieldByName(TC).AsFloat then max := Query1.FieldByName(TC).AsFloat;187: Query1.Next;188: end;189: Result := max;190: end;191: end;192: 193: //---------------------------------------------194: //------------------------------------------------------195: // Calcul CPAmont et CPAval dun reseau Maille et Ramifier196: //-------------------------------------------------------197: //---------------------------------------------198: function Separe(S,Pos1,Pos2:String):String;199: begin200: Result := S.Substring(S.IndexOf(Pos1)+Pos1.Length,S.IndexOf(Pos2)-(S.IndexOf(Pos1)+Pos1.LengLength));

201: end;202: 203: procedure Calcul_CPAmontETAval(Query:TFDQuery);204: var O,C:TStringList;205: S1,S2,NT,ID : String;206: I,J,H,K,L: Integer;207: Max_CPAmont :Real;208: 209: begin210: //initialization211: ID := Form2.ID_Project;212: O := TStringList.Create;213: C := TStringList.Create;214: Query.Close;215: Query.SQL.Clear;216: Query.SQL.Add('select NAval,[CP1(m)] from VResulta_TReservoir where ID_Project='+ID);217: Query.Active := true;218: O.Add('<AV>'+Query.Fields[0].AsString+'</AV><CP>'+Query.Fields[1].AsString+'</CP>');219: Query.Close;220: Query.SQL.Clear;221: Query.SQL.Add('select NT,NAmont,NAval from DNTrancons where NT > 0 and ID_Project='+ID);222: Query.Active := true;223: while(not(Query.Eof)) do224: begin225: C.Add('<NT>'+Query.Fields[0].AsString+'</NT><AM>'+Query.Fields[1].AsString+'</AM><AV>'+Que

Page 156: Bouheniche rida memoire final

Query.Fields[2].AsString+'</AV>');226: Query.Next;227: end;228: Query.Close;229: 230: //Calcul231: I := 0;232: while not(C.Count = 0) do233: begin234: //Extraction Valeur Max de CPAmont dans le Group Overture235: S1 := Separe(C.Strings[I],'<AM>','</AM>');236: NT := Separe(C.Strings[I],'<NT>','</NT>');237: H := 0;238: for J := 0 to O.Count-1 do239: begin240: S2 := Separe(O.Strings[J],'<AV>','</AV>');241: if S1 = S2 then242: begin243: if H = 0 then244: begin245: Max_CPAmont := Separe(O.Strings[J],'<CP>','</CP>').ToDouble();246: H := 1;247: end248: else if Max_CPAmont < Separe(O.Strings[J],'<CP>','</CP>').ToDouble() then249: Max_CPAmont := Separe(O.Strings[J],'<CP>','</CP>').ToDouble();250: end;251: end;252: L := 0;253: for K := 0 to C.Count-1 do254: begin255: S2 := Separe(C.Strings[K],'<AV>','</AV>');256: if S1 = S2 then L := L+1;257: end;258: //update tracons par le valeur CPAmont259: if (H = 1) and (L = 0) then260: begin261: Query.Close;262: Query.SQL.Clear;263: Query.SQL.Add('Update DNTrancons Set CPAmont_Result = '+FloatToStr(Max_CPAmont)+' where

' where NT='+NT+' and ID_Project='+ID);264: Query.ExecSQL;265: Query.Close;266: Query.SQL.Clear;267: Query.SQL.Add('Select NAval,(CPAmont_Result-PDCT2) from DNTrancons where NT='+NT+' and I

' and ID_Project='+ID);268: Query.Active := true;269: O.Add('<AV>'+Query.Fields[0].AsString+'</AV><CP>'+Query.Fields[1].AsString+'</CP>');270: C.Delete(I);271: I := 0;272: end273: else274: I := I + 1;275: //-------------------------------------276: end;277: 278: end;279: 280: //------------------------------------------------------------------------------281: //------------------------------------------------------------------------------282: 283: procedure TResult1.backClick(Sender: TObject);284: begin285: FDQuery4.Close;286: FDQuery4.SQL.Clear;287: FDQuery4.SQL.Add('update Logins set Status = 1 where ID='+Form2.ID_Project);288: FDQuery4.ExecSQL;289: Form2.Status := 1;290: TForm5.Create(Owner).Show;291: self.Release;292: end;293: 294: procedure TResult1.btn_calculClick(Sender: TObject);295: var b : boolean;296: begin297: Calcul_CPAmontETAval(FDQuery4);298: if Form2.Type_Reseau = 'Maille' then

Page 157: Bouheniche rida memoire final

299: begin300: try301: b := ResultTrancons(FDQuery4);302: 303: if b then304: begin305: FDQuery4.Close;306: FDQuery4.SQL.Clear;307: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);308: FDQuery4.ExecSQL;309: Form2.Status := 3;310: TResult2.Create(self).Show;311: self.Hide;312: end313: else314: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');315: Except316: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');317: end;318: end319: else320: begin321: FDQuery4.Close;322: FDQuery4.SQL.Clear;323: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);324: FDQuery4.ExecSQL;325: Form2.Status := 3;326: TResult2.Create(self).Show;327: self.Hide;328: end;329: end;330: 331: procedure TResult1.btn_startClick(Sender: TObject);332: var b : boolean;333: begin334: Calcul_CPAmontETAval(FDQuery4);335: if Form2.Type_Reseau = 'Maille' then336: begin337: try338: b := ResultTrancons(FDQuery4);339: if b then340: begin341: FDQuery4.Close;342: FDQuery4.SQL.Clear;343: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);344: FDQuery4.ExecSQL;345: Form2.Status := 3;346: TResult2.Create(self).Show;347: self.Hide;348: end349: else350: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');351: Except352: ShowMessage('il faut choisir une valeur TC pour chaque Traçons');353: end;354: end355: else356: begin357: FDQuery4.Close;358: FDQuery4.SQL.Clear;359: FDQuery4.SQL.Add('update Logins set Status = 3 where ID='+Form2.ID_Project);360: FDQuery4.ExecSQL;361: Form2.Status := 3;362: TResult2.Create(self).Show;363: self.Hide;364: end;365: end;366: 367: procedure TResult1.Button1Click(Sender: TObject);368: begin369: FDQuery4.Close;370: FDQuery4.SQL.Clear;371: FDQuery4.SQL.Add('update Logins set Status = 1 where ID='+Form2.ID_Project);372: FDQuery4.ExecSQL;373: Form2.Status := 1;374: TForm5.Create(Owner).Show;

Page 158: Bouheniche rida memoire final

375: Self.Release;376: end;377: 378: procedure TResult1.CalculClick(Sender: TObject);379: begin380: Form2.Show;381: Self.Release;382: end;383: 384: procedure TResult1.ComboBox1Change(Sender: TObject);385: var TC,NAmont,NAval :String;386: I : Integer;387: Diametre,Dcal,DN :Real;388: Def,min,max : Real;389: Long,Q,F,J2,PDCT,V,PDCT2,Vcal : Real;390: begin391: if (Row1 < StringGrid1.RowCount) and (ComboBox1.ItemIndex <> -1) then392: begin393: TC := ComboBox1.Items.Strings[ComboBox1.ItemIndex];394: NAmont := StringGrid1.Cells[2,Row1];395: NAval := StringGrid1.Cells[3,Row1];396: Dcal := StrToFloat(StringGrid1.Cells[4,Row1]);397: //Calcul DN398: DN := Diameter_Normalize(Dcal,TC,FDQuery4);399: 400: 401: //recuper le donner402: FDQuery4.Close;403: FDQuery4.SQL.Clear;404: FDQuery4.SQL.Add('select Long,Q from Trancons where NT=0 and ID_Project = '+Form2.ID_Proj

ID_Project);405: FDQuery4.Active := true;406: Q := FDQuery4.FieldByName('Q').AsFloat;407: Long := FDQuery4.FieldByName('Long').AsFloat;408: FDQuery4.Close;409: FDQuery4.SQL.Clear;410: FDQuery4.SQL.Add('select F from DNTrancons where NT=0 and ID_Project = '+Form2.ID_Project

);411: FDQuery4.Active := true;412: F := FDQuery4.FieldByName('F').AsFloat;413: //Calcul414: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));415: //ShowMessage('J2='+FloatToStr(J2));416: PDCT := J2*Long;417: PDCT2 := abs(J2*Long);418: // ShowMessage('PDCT='+FloatToStr(PDCT));419: V := Dcal/(3.14*(Q*Q)/4);420: Vcal := Dcal/(3.14*(Q*Q)/4);421: //ShowMessage('V='+FloatToStr(V));422: //update valeur in table DNTrancons423: FDQuery4.Close;424: FDQuery4.SQL.Clear;425: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+',Vca',Vcal='+FloatToStr(Vcal)+' where NT=0 and ID_Project = '+Form2.ID_Project);426: try427: FDQuery4.ExecSQL;428: Except429: ShowMessage('error entre valeur de tracons');430: end;431: FDQuery1.Refresh;432: 433: end;434: 435: end;436: 437: procedure TResult1.ComboBox2Change(Sender: TObject);438: var TC,NT :String;439: I : Integer;440: Diametre,Dcal,DN :Real;441: Def,min,max : Real;442: Long,Q,F,J2,PDCT,V,PDCT2,Vcal : Real;443: Sens : Integer;444: begin445: if (Row2 < StringGrid2.RowCount) and (ComboBox2.ItemIndex <> -1) then446: begin

Page 159: Bouheniche rida memoire final

447: //ComboBox2.Visible := false;448: TC := ComboBox2.Items.Strings[ComboBox2.ItemIndex];449: NT := StringGrid2.Cells[1,Row2];450: Dcal := StrToFloat(StringGrid2.Cells[4,Row2]);451: //Calcul DN452: DN := Diameter_Normalize(Dcal,TC,FDQuery4);453: {FDQuery2.Edit;454: FDQuery2.Fields[5].Value := TC;455: FDQuery2.Fields[6].Value := DN;456: FDQuery2.Post;}457: 458: //donner459: FDQuery4.Close;460: FDQuery4.SQL.Clear;461: FDQuery4.SQL.Add('select Long,Q,Sens from Trancons where NT='+NT+' and ID_Project = '+FormForm2.ID_Project);

462: FDQuery4.Active := true;463: Q := FDQuery4.FieldByName('Q').AsFloat;464: Long := FDQuery4.FieldByName('Long').AsFloat;465: if Form2.Type_Reseau = 'Maille' then Sens := FDQuery4.FieldByName('Sens').AsInteger;466: FDQuery4.Close;467: FDQuery4.SQL.Clear;468: FDQuery4.SQL.Add('select F from DNTrancons where NT='+NT+' and ID_Project = '+Form2.ID_Pro

ID_Project);469: FDQuery4.Active := true;470: F := FDQuery4.FieldByName('F').AsFloat;471: //Calcul472: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));473: //ShowMessage('J2='+FloatToStr(J2));474: if Form2.Type_Reseau = 'Maille' then475: PDCT := J2*Long*Sens476: else477: PDCT := J2*Long;478: if Form2.Type_Reseau = 'Maille' then479: PDCT2 := abs(J2*Long*Sens)480: else481: PDCT2 := abs(J2*Long);482: 483: V := Dcal/(3.14*(Q*Q)/4);484: Vcal := Dcal/(3.14*(Q*Q)/4);485: //ShowMessage('V='+FloatToStr(V));486: //update valeur in table DNTrancons487: FDQuery4.Close;488: FDQuery4.SQL.Clear;489: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+',Vca',Vcal='+FloatToStr(Vcal)+' where NT='+NT+' and ID_Project = '+Form2.ID_Project);490: try491: FDQuery4.ExecSQL;492: C2 := true;493: Except494: C2 := false;495: ShowMessage('error entre valeur de tracons');496: end;497: FDQuery2.Refresh;498: 499: end;500: 501: end;502: 503: procedure TResult1.ComboBox3Change(Sender: TObject);504: var I : Integer;505: begin506: for I := 0 to StringGrid2.RowCount - 1 do507: begin508: Row2 := I;509: ComboBox2.ItemIndex := ComboBox3.ItemIndex;510: ComboBox2Change(Sender);511: end;512: FDQuery2.Close;513: FDQuery2.Active := true;514: AutoSizeGrid(StringGrid2,FDQuery2);515: end;516: 517: procedure TResult1.FDQuery1AfterPost(DataSet: TDataSet);518: var TC:String;

Page 160: Bouheniche rida memoire final

519: I : Integer;520: Diametre,Dcal,DN :Real;521: Def,min,max : Real;522: Long,Q,F,J2,PDCT,V,PDCT2,Vcal : Real;523: 524: begin525: Dcal := DataSet.Fields[4].AsFloat;526: TC := DataSet.Fields[5].AsString;527: DN := DataSet.Fields[6].AsFloat;528: //recuper le donner529: FDQuery4.Close;530: FDQuery4.SQL.Clear;531: FDQuery4.SQL.Add('select Long,Q from Trancons where NT=0 and ID_Project = '+Form2.ID_Proj

ID_Project);532: FDQuery4.Active := true;533: Q := FDQuery4.FieldByName('Q').AsFloat;534: Long := FDQuery4.FieldByName('Long').AsFloat;535: FDQuery4.Close;536: FDQuery4.SQL.Clear;537: FDQuery4.SQL.Add('select F from DNTrancons where NT=0 and ID_Project = '+Form2.ID_Project

);538: FDQuery4.Active := true;539: F := FDQuery4.FieldByName('F').AsFloat;540: //Calcul541: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));542: PDCT := J2*Long;543: PDCT2 := abs(J2*Long);544: V := Dcal/(3.14*(Q*Q)/4);545: Vcal := Dcal/(3.14*(Q*Q)/4);546: //update valeur in table DNTrancons547: FDQuery4.Close;548: FDQuery4.SQL.Clear;549: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+',Vca',Vcal='+FloatToStr(Vcal)+' where NT=0 and ID_Project = '+Form2.ID_Project);550: try551: FDQuery4.ExecSQL;552: Except553: ShowMessage('error entre valeur de tracons');554: end;555: FDQuery1.Refresh;556: 557: end;558: 559: procedure TResult1.FDQuery2AfterPost(DataSet: TDataSet);560: var TC,NT :String;561: I : Integer;562: Diametre,Dcal,DN :Real;563: Def,min,max : Real;564: Long,Q,F,J2,PDCT,V,PDCT2,Vcal : Real;565: Sens : Integer;566: 567: begin568: NT := DataSet.FieldByName('NT').AsString;569: Dcal := DataSet.Fields[4].AsFloat;570: TC := DataSet.Fields[5].AsString;571: DN := DataSet.Fields[6].AsFloat;572: 573: //donner574: FDQuery4.Close;575: FDQuery4.SQL.Clear;576: FDQuery4.SQL.Add('select Long,Q,Sens from Trancons where NT='+NT+' and ID_Project = '+Form2.

ID_Project);577: FDQuery4.Active := true;578: Q := FDQuery4.FieldByName('Q').AsFloat;579: Long := FDQuery4.FieldByName('Long').AsFloat;580: if Form2.Type_Reseau = 'Maille' then Sens := FDQuery4.FieldByName('Sens').AsInteger;581: FDQuery4.Close;582: FDQuery4.SQL.Clear;583: FDQuery4.SQL.Add('select F from DNTrancons where NT='+NT+' and ID_Project = '+Form2.ID_Proje

ID_Project);584: FDQuery4.Active := true;585: F := FDQuery4.FieldByName('F').AsFloat;586: //Calcul587: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));588: if Form2.Type_Reseau = 'Maille' then

Page 161: Bouheniche rida memoire final

589: PDCT := J2*Long*Sens590: else591: PDCT := J2*Long;592: if Form2.Type_Reseau = 'Maille' then593: PDCT2 := abs(J2*Long*Sens)594: else595: PDCT2 := abs(J2*Long);596: 597: V := Dcal/(3.14*(Q*Q)/4);598: Vcal := Dcal/(3.14*(Q*Q)/4);599: //update valeur in table DNTrancons600: FDQuery4.Close;601: FDQuery4.SQL.Clear;602: FDQuery4.SQL.Add('update DNTrancons set TC = '+QuotedStr(TC)+',DN='+FloatToStr(DN)+',J2='+Fl

FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+',Vcal=',Vcal='+FloatToStr(Vcal)+' where NT='+NT+' and ID_Project = '+Form2.ID_Project);

603: try604: FDQuery4.ExecSQL;605: Except606: ShowMessage('error entre valeur de tracons NT : '+NT);607: end;608: FDQuery2.Refresh;609: end;610: 611: procedure TResult1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);612: begin613: {$IF DEFINED(Win32)or DEFINED(Win64)}614: Form2.Show;615: Self.Release;616: {$ENDIF}617: end;618: 619: procedure TResult1.FormCreate(Sender: TObject);620: begin621: {$IF DEFINED(Win32)or DEFINED(Win64)}622: btn_calcul.Visible := true;623: Button1.Visible := true;624: {$ENDIF}625: {$IF DEFINED(Win32)or DEFINED(Win64)}626: FDConnection1.Close;627: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';628: FDConnection1.Params.Values['Database']:='test.db';629: {$ENDIF}630: {$IF DEFINED(iOS)or DEFINED(ANDROID)}631: FDConnection1.Close;632: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';633: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');634: {$ENDIF}635: try636: FDConnection1.Connected := true;637: try638: FDQuery1.SQL.Clear;639: FDQuery1.SQL.Add('select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [Qp(m3/s)],TC f

'select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [Qp(m3/s)],TC from DNTrancons where NT = 0 and ID_Project='+Form2.ID_Project);640: FDQuery1.Active := true;641: AutoSizeGrid(StringGrid1,FDQuery1);642: FDQuery2.SQL.Clear;643: FDQuery2.SQL.Add('select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [Qr(m3/s)],TC f

'select ID_Project,NT,NAmont,NAval,printf("%.5f",DC) as [Qr(m3/s)],TC from DNTrancons where NT > 0 and ID_Project = '+Form2.ID_Project);644: FDQuery2.Active := true;645: AutoSizeGrid(StringGrid2,FDQuery2);646: if StringGrid2.RowCount > 4 then647: begin648: GroupBox2.Height := StringGrid2.RowHeight * StringGrid2.RowCount + 100;649: {$IF DEFINED(iOS)or DEFINED(ANDROID)}650: ScrollBox2.Height := GroupBox2.Height + 10;651: {$ENDIF}652: 653: end;654: FDQuery3.Active := true;655: AutoSizeGrid(StringGrid3,FDQuery3);656: Except657: ShowMessage('Requate invalide');658: end;659: 660: Except

Page 162: Bouheniche rida memoire final

661: ShowMessage('Connection échouée');662: Close;663: end;664: 665: end;666: 667: procedure TResult1.StringGrid1SelectCell(Sender: TObject; const ACol,668: ARow: Integer; var CanSelect: Boolean);669: begin670: if (ACol = 5) and (ARow <= StringGrid1.RowCount) then671: begin672: ComboBox1.ItemIndex := -1;673: {$IF DEFINED(Win32)or DEFINED(Win64)}674: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X+2;675: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+22;676: ComboBox1.Width := StringGrid1.Columns[ACol].Width;677: ComboBox1.Height := StringGrid1.RowHeight;678: {$ENDIF}679: {$IF DEFINED(iOS)or DEFINED(ANDROID)}680: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X-4;681: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+32;682: ComboBox1.Width := StringGrid1.Columns[ACol].Width+5;683: ComboBox1.Height := StringGrid1.RowHeight+5;684: {$ENDIF}685: ComboBox1.Visible := True;686: Row1 := ARow;687: Col1 := ACol;688: CanSelect := true;689: end690: else691: ComboBox1.Visible := False;692: 693: 694: end;695: 696: procedure TResult1.StringGrid2SelectCell(Sender: TObject; const ACol,697: ARow: Integer; var CanSelect: Boolean);698: begin699: if (ACol = 5) and (ARow <= StringGrid2.RowCount) then700: begin701: ComboBox2.ItemIndex := -1;702: {$IF DEFINED(Win32)or DEFINED(Win64)}703: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X+2;704: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+22;705: ComboBox2.Width := StringGrid2.Columns[ACol].Width;706: ComboBox2.Height := StringGrid2.RowHeight;707: {$ENDIF}708: {$IF DEFINED(iOS)or DEFINED(ANDROID)}709: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X-4;710: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+32;711: ComboBox2.Width := StringGrid2.Columns[ACol].Width+5;712: ComboBox2.Height := StringGrid2.RowHeight+5;713: {$ENDIF}714: ComboBox2.Visible := True;715: Row2 := ARow;716: Col2 := ACol;717: //StringGrid2.SelectRow(ARow);718: CanSelect := true;719: end720: else721: ComboBox2.Visible := False;722: 723: end;724: 725: 726: procedure TResult1.AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);727: var728: C : integer;729: begin730: for C := 0 to Grid.ColumnCount - 1 do begin731: if Grid.Columns[C].Header.Length >= Query.FieldByName(Grid.Columns[C].Header).DisplayWidth

then732: Grid.Columns[C].Width := Grid.Columns[C].Header.Length * 8733: else734: Grid.Columns[C].Width := Query.FieldByName(Grid.Columns[C].Header).DisplayWidth * 8;735:

Page 163: Bouheniche rida memoire final

736: if Grid.Columns[C].Width > 130 then Grid.Columns[C].Width := 130;737: if Grid.Equals(StringGrid1) and ( (C=0) or (C=1) ) then Grid.Columns[C].Visible := false;738: if Grid.Equals(StringGrid2) and (C=0) then Grid.Columns[C].Visible := false;739: end;740: 741: end;742: 743: 744: end.

Page 164: Bouheniche rida memoire final

1: unit Result_2;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti,8: Data.Bind.Controls, FMX.StdCtrls, FMX.Layouts, Fmx.Bind.Navigator, FMX.Grid,9: FMX.Controls.Presentation, FMX.Objects, FireDAC.Stan.Intf,

10: FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,11: FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,12: FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs,13: FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Data.DB,14: FireDAC.Comp.DataSet, FireDAC.Comp.Client, Data.Bind.EngExt,15: Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,16: Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope,17: CRDEP_Unit,Unit5,Result_1,System.IOUtils,Math, FMX.Ani, FireDAC.FMXUI.Wait;18: 19: type20: TResult2 = class(TForm)21: Image1: TImage;22: ScrollBox1: TScrollBox;23: ScrollBox2: TScrollBox;24: GroupBox2: TGroupBox;25: StringGrid3: TStringGrid;26: ScrollBox3: TScrollBox;27: GroupBox1: TGroupBox;28: StringGrid1: TStringGrid;29: ToolBar1: TToolBar;30: Label1: TLabel;31: back: TButton;32: Calcul: TButton;33: btn_Nouvelle_Iteration: TButton;34: btn_retablir_all: TButton;35: btn_EnrgistreExcel: TButton;36: btn_start: TButton;37: FDConnection1: TFDConnection;38: FDQuery1: TFDQuery;39: FDQuery2: TFDQuery;40: FDQuery3: TFDQuery;41: FDQuery4: TFDQuery;42: BindSourceDB1: TBindSourceDB;43: BindingsList1: TBindingsList;44: LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;45: BindSourceDB2: TBindSourceDB;46: BindSourceDB3: TBindSourceDB;47: LinkGridToDataSourceBindSourceDB3: TLinkGridToDataSource;48: ScrollBox4: TScrollBox;49: GroupBox4: TGroupBox;50: StringGrid2: TStringGrid;51: BindNavigator2: TBindNavigator;52: LinkGridToDataSourceBindSourceDB2: TLinkGridToDataSource;53: Rectangle1: TRectangle;54: Rectangle11: TRectangle;55: Button2: TButton;56: ColorAnimation2: TColorAnimation;57: ColorAnimation5: TColorAnimation;58: Button3: TButton;59: ColorAnimation3: TColorAnimation;60: ColorAnimation6: TColorAnimation;61: Rectangle13: TRectangle;62: Rectangle2: TRectangle;63: procedure btn_retablir_allClick(Sender: TObject);64: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);65: procedure FormCreate(Sender: TObject);66: procedure backClick(Sender: TObject);67: procedure AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);68: procedure btn_EnrgistreExcelClick(Sender: TObject);69: procedure btn_Nouvelle_IterationClick(Sender: TObject);70: procedure Button3Click(Sender: TObject);71: procedure CalculClick(Sender: TObject);72: procedure btn_startClick(Sender: TObject);73: procedure Rectangle1Click(Sender: TObject);74: private75: { Private declarations }76: public

Page 165: Bouheniche rida memoire final

77: { Public declarations }78: end;79: 80: var81: Result2: TResult2;82: Iteration : Integer;83: implementation84: 85: {$IF DEFINED(Win32)or DEFINED(Win64)}86: uses Rapport;87: {$ENDIF}88: 89: //---------------------------------------------90: function Diameter_Normalize(Dcal : Real;TC : String;Query:TFDQuery):Real;91: var Query1 :TFDQuery;92: I : Integer;93: Diametre,Def,min,max,DN : real;94: begin95: Query1 := TFDQuery.Create(Form5);96: Query1.Connection := Query.Connection;97: Query1.Close;98: Query1.SQL.Add('select * from Diametres');99: Query1.Active := true;

100: Query1.First;101: I := 1;102: while not(Query1.Eof) do103: begin104: Diametre := Query1.FieldByName(TC).AsFloat;105: if Diametre <> 0 then106: begin107: Def := abs(Diametre - Dcal);108: if (I = 1) then109: begin110: min := Def;111: DN := Diametre;112: I:= 0;113: end114: else115: if (min > Def) then116: begin117: min := Def;118: DN := Diametre;119: end;120: end;121: Query1.Next;122: end;123: if I = 0 then Result := DN124: else125: begin126: Query1.First;127: max := Query1.FieldByName(TC).AsFloat;128: while not(Query1.Eof) do129: begin130: if max < Query1.FieldByName(TC).AsFloat then max := Query1.FieldByName(TC).AsFloat;131: Query1.Next;132: end;133: Result := max;134: end;135: end;136: 137: //---------------------------------------------138: function Calcul_DNTrancons(Query :TFDQuery):boolean;139: var NT,NAmont,NAval,TC : String;140: Sens : Integer;141: Q,Long,Reguosite : Real;142: CPAmont,CPAval,CTNAmont,CTNAval,PSAmont,PSAval,Delta_Ht,J1,D,R,Psi,F,J2,PDCTv,V,PDCT,PDCT2

: Real;143: Dcal,DN : Real;144: Query2 :TFDQuery;145: ValRound : Integer;146: begin147: Query2 := TFDQuery.Create(Form5);148: Query2.Connection := Query.Connection;149: try150: Query.Close;151: Query.SQL.Clear;

Page 166: Bouheniche rida memoire final

152: Query.SQL.Add('select * from Trancons where NT > 0 and ID_Project = '+Form2.ID_Project);153: Query.Active := true;154: finally155: while not(Query.Eof) do156: begin157: //donner158: NT := Query.FieldByName('NT').AsString;159: CTNAmont := Query.FieldByName('CTNAmont').AsFloat;160: CTNAval := Query.FieldByName('CTNAval').AsFloat;161: PSAmont := Query.FieldByName('PSAmont').AsFloat;162: PSAval := Query.FieldByName('PSAval').AsFloat;163: Q := Query.FieldByName('Q2').AsFloat;164: Long := Query.FieldByName('Long').AsFloat;165: Reguosite := Query.FieldByName('Reguosite').AsFloat;166: Sens := Query.FieldByName('Sens').AsInteger;167: 168: Query2.Close;169: Query2.SQL.Clear;170: Query2.SQL.Add('select TC,DC,DN from DNTrancons where NT='+NT+' and ID_Project = '+Form2.I

ID_Project);171: Query2.Active := true;172: TC := Query2.Fields[0].AsString;173: Dcal := Query2.Fields[1].AsFloat;174: DN := Query2.Fields[2].AsFloat;175: //calcul176: CPAmont := CTNAmont + PSAmont;177: CPAval := CTNAval + PSAval;178: ValRound := -5;179: Delta_Ht := RoundTo(CPAmont - CPAval,ValRound);180: J1 := Abs(Delta_Ht / Long);181: D := Pi*Sqrt(2)*Sqrt(9.81*J1*Power(Q,5));182: R := 4 * Sqrt(2)*Sqrt(9.81*J1*Power(Q,3))/0.000001;183: Psi := -0.5*Log10((Reguosite/Q/3.7)+(10.04/R));184: {Dcal := Psi * D;185: DN :=Diameter_Normalize(Dcal,TC,Query);}186: F := Power(Psi,5)/16;187: J2 := (8*F*Dcal*Dcal)/(9.81*Pi*Pi*Power(Q,5));188: if NT = '0' then189: PDCT := J2*Long190: else191: PDCT := J2*Long*Sens;192: V := 4*abs(Q)/3.14/(DN*DN);193: if NT = '0' then194: PDCT2 := abs(J2*Long)195: else196: PDCT2 := abs(J2*Long*Sens);197: V := Dcal/(3.14*(Q*Q)/4);198: ;199: 200: //update valeur DNTrancon201: Query2.Close;202: Query2.SQL.Clear;203: Query2.SQL.Add('update DNTrancons set DC='+FloatToStr(Dcal)+',DN='+FloatToStr(DN)+',D='+Fl

FloatToStr(D)+',R='+FloatToStr(R)+',Psi='+FloatToStr(Psi)+',F='+FloatToStr(F)+',J2='+FloatToStr(J2)+',PDCT='+FloatToStr(PDCT)+',PDCT2='+FloatToStr(PDCT2)+',V='+FloatToStr(V)+' where NT='+NT+' and ID_Project = '+Form2.ID_Project);

204: Query2.ExecSQL;205: Query.Next;206: end;207: end;208: Result := true;209: end;210: 211: 212: //---------------------------------------------213: //---------------------------------------------214: function ResultTrancons(Query :TFDQuery):boolean;215: var NT,MP,NAmont,NAval : String;216: Q,QCorrige,Dq : Real;217: Query2,Query3 :TFDQuery;218: begin219: Query2 := TFDQuery.Create(Form5);220: Query2.Connection := Query.Connection;221: Query3 := TFDQuery.Create(Form5);222: Query3.Connection := Query.Connection;223:

Page 167: Bouheniche rida memoire final

224: try225: Query.Close;226: Query.SQL.Clear;227: Query.SQL.Add('select NT,MP,Q2 from Trancons where NT > 0 and ID_Project = '+Form2.ID_Projec

ID_Project);228: Query.Active := true;229: finally230: while not(Query.Eof) do231: begin232: //donner233: NT := Query.FieldByName('NT').AsString;234: MP := Query.FieldByName('MP').AsString;235: Q := Query.FieldByName('Q2').AsFloat;236: Query2.Close;237: Query2.SQL.Clear;238: Query2.SQL.Add('select [D q(m3/s)] from Erreur_mailles where MP='+MP+' and ID_Project = '+

Form2.ID_Project);239: try240: Query2.Active := true;241: Except242: ShowMessage('Re-entrer des valeurs le trançon NT :'+NT);243: end;244: Dq := Query2.Fields[0].AsFloat;245: //calcul246: QCorrige := Q + Dq;247: //update Table DNTrancons248: Query2.Close;249: Query2.SQL.Clear;250: Query2.SQL.Add('Update DNTrancons set QCorrige='+FloatToStr(QCorrige)+' where NT = '+NT+'

' and ID_Project = '+Form2.ID_Project+';');251: try252: Query2.ExecSQL;253: Except254: ShowMessage('requate invalide');255: Result := false;256: end;257: Query.Next;258: end;259: Result := true;260: end;261: end;262: 263: 264: //---------------------------------------------265: //---------------------------------------------266: 267: 268: 269: {$R *.fmx}270: {$R *.Windows.fmx MSWINDOWS}271: {$R *.Surface.fmx MSWINDOWS}272: {$R *.Macintosh.fmx MACOS}273: 274: procedure TResult2.backClick(Sender: TObject);275: begin276: Rectangle1.Visible := true;277: Rectangle11.Visible := true;278: end;279: 280: procedure TResult2.btn_EnrgistreExcelClick(Sender: TObject);281: begin282: {$IF DEFINED(Win32)or DEFINED(Win64)}283: TForm1.Create(self);284: TForm1.Create(self).PrintClick(Sender);285: {$ENDIF}286: end;287: 288: procedure TResult2.btn_Nouvelle_IterationClick(Sender: TObject);289: var QCorrige : Real;290: NT : String;291: begin292: FDQuery4.Close;293: FDQuery4.SQL.Clear;294: FDQuery3.First;295: while not(FDQuery3.Eof) do296: begin

Page 168: Bouheniche rida memoire final

297: NT := FDQuery3.FieldByName('NT').AsString;298: QCorrige := FDQuery3.Fields[10].AsFloat;299: {if abs(QCorrige) < 0.5 then300: begin301: 302: end;}303: //update Table DNTrancons304: FDQuery4.SQL.Add('Update Trancons set Q2='+FloatToStr(QCorrige)+' where NT = '+NT+' and ID

' and ID_Project = '+Form2.ID_Project+';');305: FDQuery3.Next;306: end;307: 308: try309: FDQuery4.ExecSQL;310: Calcul_DNTrancons(FDQuery4);311: ResultTrancons(FDQuery4);312: FDQuery4.Close;313: FDQuery4.SQL.Clear;314: FDQuery4.SQL.Add('update Logins set Status = Status + 1 where ID='+Form2.ID_Project);315: FDQuery4.ExecSQL;316: Form2.Status := Form2.Status + 1;317: 318: FDQuery2.Close;319: FDQuery3.Close;320: FDQuery2.Active := true;321: AutoSizeGrid(StringGrid2,FDQuery2);322: FDQuery3.Active := true;323: AutoSizeGrid(StringGrid3,FDQuery3);324: Iteration := Iteration + 1;325: btn_Nouvelle_Iteration.Text := 'Nouvelle Itération ('+IntToStr(Iteration)+')';326: 327: Except328: ShowMessage('Stop process iteration');329: end;330: 331: 332: 333: end;334: 335: procedure TResult2.btn_retablir_allClick(Sender: TObject);336: begin337: FDQuery4.Close;338: FDQuery4.SQL.Clear;339: FDQuery4.SQL.Add('update Logins set Status = 1 where ID='+Form2.ID_Project);340: FDQuery4.ExecSQL;341: Form2.Status := 1;342: TForm5.Create(Owner).Show;343: self.Release;344: end;345: 346: procedure TResult2.btn_startClick(Sender: TObject);347: begin348: btn_Nouvelle_IterationClick(Sender);349: btn_start.Text := 'Nouvelle Itération ('+IntToStr(Iteration)+')';350: end;351: 352: procedure TResult2.Button3Click(Sender: TObject);353: begin354: btn_retablir_allClick(Sender);355: end;356: 357: procedure TResult2.CalculClick(Sender: TObject);358: begin359: Form2.Show;360: Self.Release;361: end;362: 363: procedure TResult2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);364: begin365: {$IF DEFINED(Win32)or DEFINED(Win64)}366: Form2.Show;367: Self.Release;368: {$ENDIF}369: end;370: 371: procedure TResult2.FormCreate(Sender: TObject);

Page 169: Bouheniche rida memoire final

372: begin373: {$IF DEFINED(Win32)or DEFINED(Win64)}374: btn_Nouvelle_Iteration.Visible := true;375: btn_retablir_all.Visible := true;376: btn_EnrgistreExcel.Visible := true;377: {$ENDIF}378: 379: if Form2.Type_Reseau = 'Ramifie' then380: begin381: ScrollBox4.Visible := false;382: {$IF DEFINED(Win32)or DEFINED(Win64)}383: btn_Nouvelle_Iteration.Visible := false;384: ScrollBox3.Width := 1020;385: ScrollBox2.Width := 1020;386: ScrollBox2.Position.Y := 240;387: {$ENDIF}388: {$IF DEFINED(iOS)or DEFINED(ANDROID)}389: btn_start.Visible := false;390: {$ENDIF}391: end;392: 393: {$IF DEFINED(Win32)or DEFINED(Win64)}394: FDConnection1.Close;395: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';396: FDConnection1.Params.Values['Database']:='test.db';397: {$ENDIF}398: {$IF DEFINED(iOS)or DEFINED(ANDROID)}399: FDConnection1.Close;400: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';401: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');402: {$ENDIF}403: try404: FDConnection1.Connected := true;405: try406: FDQuery1.SQL.Clear;407: if Form2.Type_Reseau = 'Maille' then408: FDQuery1.SQL.Add('Select NAmont,NAval,[Qp(m3/s)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)

'Select NAmont,NAval,[Qp(m3/s)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+FormForm2.ID_Project+';')

409: else410: FDQuery1.SQL.Add('Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)]

'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project 'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+Form2.ID_Project+';');

411: FDQuery1.Active := true;412: AutoSizeGrid(StringGrid1,FDQuery1);413: 414: if Form2.Type_Reseau = 'Maille' then415: begin416: FDQuery2.SQL.Clear;417: FDQuery2.SQL.Add('select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/

'select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Projec'select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Project='+Form2.ID_Project);

418: FDQuery2.Active := true;419: AutoSizeGrid(StringGrid2,FDQuery2);420: end421: else422: ScrollBox4.Visible := false;423: 424: FDQuery3.SQL.Clear;425: if Form2.Type_Reseau = 'Maille' then426: FDQuery3.SQL.Add('select NT,MP,MA,NAmont,NAval,[DC(m)]as [Qr(m3/s)],TC,[V(m/s)],[PDCT(

'select NT,MP,MA,NAmont,NAval,[DC(m)]as [Qr(m3/s)],TC,[V(m/s)],[PDCT(m)],[DC(m)]as [Qcor(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VRes'select NT,MP,MA,NAmont,NAval,[DC(m)]as [Qr(m3/s)],TC,[V(m/s)],[PDCT(m)],[DC(m)]as [Qcor(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconMaille where ID_Project = '+Form2.ID_Project+';')

427: else428: FDQuery3.SQL.Add('select NT,NAmont,NAval,[Qp(m3/s)],[Qp(m3/s)],TC,[DN(m)],[V(m/s)],[PD

'select NT,NAmont,NAval,[Qp(m3/s)],[Qp(m3/s)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie 'select NT,NAmont,NAval,[Qp(m3/s)],[Qp(m3/s)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie where ID_Project = '+Form2.ID_Project+';');

429: 430: FDQuery3.Active := true;431: AutoSizeGrid(StringGrid3,FDQuery3);432: Except433: ShowMessage('Requate invalide');434: end;435: 436: Except437: ShowMessage('Connection échouée');

Page 170: Bouheniche rida memoire final

438: Close;439: end;440: Iteration := Form2.Status-3;441: btn_Nouvelle_Iteration.Text := 'Nouvelle Itération ('+IntToStr(Form2.Status-3)+')';442: btn_start.Text := 'Nouvelle Itération ('+IntToStr(Form2.Status-3)+')';443: 444: 445: end;446: procedure TResult2.Rectangle1Click(Sender: TObject);447: begin448: if Rectangle11.Visible then449: begin450: Rectangle1.Visible := false;451: Rectangle11.Visible := false;452: end;453: 454: end;455: 456: procedure TResult2.AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);457: var458: C : integer;459: begin460: //ShowMessage('Column name :'+Grid.Columns[C].Header+' lenght : '+IntToStr(Grid.Columns[C].H

//ShowMessage('Column name :'+Grid.Columns[C].Header+' lenght : '+IntToStr(Grid.Columns[C].Header.Length)+' Display Width : '+IntToStr(Query.FieldByName(Grid.Columns[C].Header).DisplayWi//ShowMessage('Column name :'+Grid.Columns[C].Header+' lenght : '+IntToStr(Grid.Columns[C].Header.Length)+' Display Width : '+IntToStr(Query.FieldByName(Grid.Columns[C].Header).DisplayWidth));

461: for C := 0 to Grid.ColumnCount - 1 do begin462: if Grid.Columns[C].Header.Length >= Query.FieldByName(Grid.Columns[C].Header).DisplayWidth

then463: Grid.Columns[C].Width := Grid.Columns[C].Header.Length * 8464: else465: Grid.Columns[C].Width := Query.FieldByName(Grid.Columns[C].Header).DisplayWidth * 6 + 10

;466: 467: if Grid.Columns[C].Width > 120 then Grid.Columns[C].Width := 100;468: 469: end;470: 471: end;472: 473: 474: end.

Page 171: Bouheniche rida memoire final

1: unit Unit3;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,8: FMX.Controls.Presentation, FMX.Objects, FMX.Layouts, FMX.ExtCtrls;9:

10: type11: TForm3 = class(TForm)12: Button2: TButton;13: ToolBar1: TToolBar;14: Label1: TLabel;15: procedure Button2Click(Sender: TObject);16: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);17: private18: { Private declarations }19: public20: { Public declarations }21: end;22: 23: var24: Form3: TForm3;25: 26: implementation27: uses CRDEP_Unit;28: {$R *.fmx}29: {$R *.Windows.fmx MSWINDOWS}30: {$R *.SmXhdpiPh.fmx ANDROID}31: 32: procedure TForm3.Button2Click(Sender: TObject);33: begin34: Form2.Show;35: Self.Release;36: end;37: 38: procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean);39: begin40: {$IF DEFINED(Win32)or DEFINED(Win64)}41: Form2.Show;42: Self.Release;43: {$ENDIF}44: end;45: 46: end.

Page 172: Bouheniche rida memoire final

1: unit Unit5;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,8: FMX.Controls.Presentation, FMX.Edit, FMX.Objects, FireDAC.Stan.Intf,9: FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf,

10: FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,11: FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs,12: FireDAC.FMXUI.Wait, FireDAC.FMXUI.Error, FireDAC.Comp.UI, Data.DB,13: FireDAC.Comp.Client, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,14: FireDAC.DApt, FireDAC.Comp.DataSet, System.Rtti, Data.Bind.EngExt,15: Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,16: Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX.Layouts, FMX.Grid,17: Data.Bind.Controls, Fmx.Bind.Navigator, FMX.EditBox, FMX.NumberBox,18: FMX.ListBox;19: 20: type21: TForm5 = class(TForm)22: ToolBar1: TToolBar;23: Label1: TLabel;24: back: TButton;25: Calcul: TButton;26: Image1: TImage;27: FDConnection1: TFDConnection;28: StringGrid1: TStringGrid;29: FDQuery1: TFDQuery;30: NumberBox1 : TNumberBox;31: NumberBox2 : TNumberBox;32: Button1: TButton;33: Label2 : TLabel;34: Label3 : TLabel;35: ScrollBox1: TScrollBox;36: GroupBox1: TGroupBox;37: GroupBox3: TGroupBox;38: StringGrid2: TStringGrid;39: BindNavigator2: TBindNavigator;40: ScrollBox3: TScrollBox;41: ScrollBox4: TScrollBox;42: FDQuery2: TFDQuery;43: FDQuery3: TFDQuery;44: btn_calcul: TButton;45: BindSourceDB1: TBindSourceDB;46: BindingsList1: TBindingsList;47: LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;48: BindNavigator1: TBindNavigator;49: BindSourceDB2: TBindSourceDB;50: LinkGridToDataSourceBindSourceDB2: TLinkGridToDataSource;51: ComboBox1: TComboBox;52: ComboBox2: TComboBox;53: ComboBox3: TComboBox;54: Button2: TButton;55: procedure backClick(Sender: TObject);56: procedure FormCreate(Sender: TObject);57: procedure AutoSizeGrid(Grid: TStringGrid ; Query: TFDQuery);58: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);59: procedure Button1Click(Sender: TObject);60: procedure CalculClick(Sender: TObject);61: procedure btn_calculClick(Sender: TObject);62: procedure ComboBox1Change(Sender: TObject);63: procedure StringGrid1SelectCell(Sender: TObject; const ACol, ARow: Integer;64: var CanSelect: Boolean);65: procedure ComboBox2Change(Sender: TObject);66: procedure ComboBox3Change(Sender: TObject);67: procedure StringGrid2SelectCell(Sender: TObject; const ACol, ARow: Integer;68: var CanSelect: Boolean);69: function WidthCol(Grid: TStringGrid; Col : Integer): Real;70: procedure Button2Click(Sender: TObject);71: private72: { Private declarations }73: public74: { Public declarations }75: end;76:

Page 173: Bouheniche rida memoire final

77: var78: Form5: TForm5;79: X_Scroll : Real;80: 81: implementation82: 83: uses CRDEP_Unit,System.IOUtils,Result_1,Math;84: 85: //---------------------------------------------86: // Calcul Dcal Reseau Maille et Ramifier87: //---------------------------------------------88: function Calcul_DNTrancons(Query :TFDQuery):boolean;89: var NT,NAmont,NAval : String;90: Sens : Integer;91: Q,Long,Reguosite : Real;92: CPAmont,CPAval,CTNAmont,CTNAval,PSAmont,PSAval,Delta_Ht,J1,D,R,Psi,F,J2,PDCT,PDCT2 : Real;93: Dcal : Real;94: Query2 :TFDQuery;95: begin96: Query2 := TFDQuery.Create(Form5);97: Query2.Connection := Query.Connection;98: try99: Query.Close;

100: Query.SQL.Clear;101: Query.SQL.Add('select * from Trancons where NT >= 0 and ID_Project='+Form2.ID_Project+';');102: Query.Active := true;103: Query2.SQL.Add('delete from DNTrancons where NT >= 0 and ID_Project='+Form2.ID_Project+';');104: finally105: while not(Query.Eof) do106: begin107: //donner108: NT := Query.FieldByName('NT').AsString;109: NAmont := Query.FieldByName('NAmont').AsString;110: NAval := Query.FieldByName('NAval').AsString;111: CTNAmont := Query.FieldByName('CTNAmont').AsFloat;112: CTNAval := Query.FieldByName('CTNAval').AsFloat;113: PSAmont := Query.FieldByName('PSAmont').AsFloat;114: PSAval := Query.FieldByName('PSAval').AsFloat;115: Q := Query.FieldByName('Q').AsFloat;116: Long := Query.FieldByName('Long').AsFloat;117: Reguosite := Query.FieldByName('Reguosite').AsFloat;118: //calcul119: CPAmont := CTNAmont + PSAmont;120: //ShowMessage('CPAmont='+FloatToStr(CPAmont));121: CPAval := CTNAval + PSAval;122: //ShowMessage('CPAval='+FloatToStr(CPAval));123: Delta_Ht := CPAmont - CPAval;124: //ShowMessage('Delta_Ht='+FloatToStr(Delta_Ht));125: J1 := Abs(Delta_Ht / Long);126: //ShowMessage('J1='+FloatToStr(J1));127: D := Pi*Sqrt(2)*Sqrt(9.81*J1*Power(Q,5));128: //ShowMessage('D='+FloatToStr(D));129: R := 4 * Sqrt(2)*Sqrt(9.81*J1*Power(Q,3))/0.000001;130: //ShowMessage('R='+FloatToStr(R));131: Psi := -0.5*Log10((Reguosite/Q/3.7)+(10.04/R));132: //ShowMessage('Psi='+FloatToStr(Psi));133: Dcal := Psi * D;134: //ShowMessage('Dcal='+FloatToStr(Dcal));135: F := Power(-2*Log10((Reguosite/Q/3.7)+(10.7/R)),-2);136: //ShowMessage('F='+FloatToStr(F));137: 138: Query2.SQL.Add('insert into DNTrancons(ID_Project,NT,NAmont,NAval,DC,CPAmont,CPAval,DHT,J1

'insert into DNTrancons(ID_Project,NT,NAmont,NAval,DC,CPAmont,CPAval,DHT,J1,D,R,Psi,F)values('+Form2.ID_Project+','+NT+','+QuotedStr(NAmont)+','+QuotedStr(NAval)+','+FloFloatToStr(Dcal)+','+FloatToStr(CPAmont)+','+FloatToStr(CPAval)+','+FloatToStr(Delta_Ht)+','+Floa

FloatToStr(J1)+','+FloatToStr(D)+','+FloatToStr(R)+','+FloatToStr(Psi)+','+FloatToStr(F)+');');139: Query.Next;140: end;141: end;142: 143: try144: Query2.ExecSQL;145: Result := true;146: Except147: ShowMessage('Re-entrer des valeurs le trançons');148: Result := false;149: end;

Page 174: Bouheniche rida memoire final

150: end;151: 152: 153: //---------------------------------------------154: 155: //---------------------------------------------156: 157: {$R *.fmx}158: {$R *.Windows.fmx MSWINDOWS}159: {$R *.SmXhdpiPh.fmx ANDROID}160: {$R *.LgXhdpiTb.fmx ANDROID}161: 162: procedure TForm5.backClick(Sender: TObject);163: begin164: Form2.Show;165: Self.Release;166: end;167: 168: procedure TForm5.btn_calculClick(Sender: TObject);169: begin170: if Calcul_DNTrancons(FDQuery3) then171: begin172: FDQuery3.Close;173: FDQuery3.SQL.Clear;174: FDQuery3.SQL.Add('update Logins set Status = 2 where ID='+Form2.ID_Project);175: FDQuery3.ExecSQL;176: Form2.Status := 2;177: TResult1.Create(Owner).Show;178: self.Hide;179: end;180: end;181: 182: procedure TForm5.Button1Click(Sender: TObject);183: var I : integer;184: begin185: try186: FDQuery3.Close;187: FDQuery3.SQL.Clear;188: FDQuery3.SQL.Add('delete from Trancons where NT > 0 and ID_Project='+Form2.ID_Project+';')

);189: for I := 1 to StrToInt(NumberBox1.Text) do190: FDQuery3.SQL.Add('insert into Trancons(ID_Project,NT) values ('+Form2.ID_Project+','+Int

IntToStr(I)+');');191: FDQuery3.ExecSQL;192: FDQuery2.Close;193: FDQuery2.Active := true;194: AutoSizeGrid(StringGrid2,FDQuery2);195: if StrToInt(NumberBox1.Text) > 4 then196: begin197: GroupBox3.Height := StringGrid2.RowHeight * StrToInt(NumberBox1.Text) + 100;198: {$IF DEFINED(iOS)or DEFINED(ANDROID)}199: ScrollBox4.Height := GroupBox3.Height + 10;200: {$ENDIF}201: end202: else203: begin204: GroupBox3.Height := StringGrid2.RowHeight * 4 + 100;205: {$IF DEFINED(iOS)or DEFINED(ANDROID)}206: ScrollBox4.Height := GroupBox3.Height + 10;207: {$ENDIF}208: end;209: ShowMessage('initialisation de donner');210: Except211: ShowMessage('Error Query');212: end;213: end;214: 215: procedure TForm5.Button2Click(Sender: TObject);216: 217: begin218: Form2.Show;219: Self.Release;220: end;221: 222: 223: procedure TForm5.CalculClick(Sender: TObject);

Page 175: Bouheniche rida memoire final

224: begin225: if Calcul_DNTrancons(FDQuery3) then226: begin227: FDQuery3.Close;228: FDQuery3.SQL.Clear;229: FDQuery3.SQL.Add('update Logins set Status = 2 where ID='+Form2.ID_Project);230: FDQuery3.ExecSQL;231: Form2.Status := 2;232: TResult1.Create(Owner).Show;233: self.Hide;234: end;235: end;236: 237: 238: procedure TForm5.ComboBox1Change(Sender: TObject);239: begin240: if (ComboBox1.ItemIndex <> -1) then241: begin242: BindSourceDB1.DataSet.Edit;243: BindSourceDB1.DataSet.FieldByName('Reguosite Abs').AsFloat := StrToFloat(ComboBox1.Items.S

Strings[ComboBox1.ItemIndex]);244: BindSourceDB1.DataSet.Post;245: //ComboBox1.Visible := false;246: end;247: end;248: 249: procedure TForm5.ComboBox2Change(Sender: TObject);250: begin251: if (ComboBox2.ItemIndex <> -1) then252: begin253: BindSourceDB2.DataSet.Edit;254: BindSourceDB2.DataSet.FieldByName('Reguosite Abs').AsFloat := StrToFloat(ComboBox2.Items.S

Strings[ComboBox2.ItemIndex]);255: BindSourceDB2.DataSet.Post;256: //ComboBox2.Visible := false;257: end;258: 259: end;260: 261: procedure TForm5.ComboBox3Change(Sender: TObject);262: begin263: if (ComboBox3.ItemIndex <> -1) then264: begin265: BindSourceDB2.DataSet.Edit;266: BindSourceDB2.DataSet.FieldByName('Sens').AsInteger := StrToInt(ComboBox3.Items.Strings[Co

ComboBox3.ItemIndex]);267: BindSourceDB2.DataSet.Post;268: //ComboBox3.Visible := false;269: end;270: 271: end;272: 273: procedure TForm5.FormCloseQuery(Sender: TObject; var CanClose: Boolean);274: begin275: {$IF DEFINED(Win32)or DEFINED(Win64)}276: Form2.Show;277: Self.Release;278: {$ENDIF}279: end;280: 281: procedure TForm5.FormCreate(Sender: TObject);282: begin283: {$IF DEFINED(Win32)or DEFINED(Win64)}284: btn_calcul.Visible := true;285: ScrollBox3.Margins.Bottom := 0;286: ScrollBox4.Margins.Bottom := 0;287: ScrollBox4.Margins.Top := 0;288: {$ENDIF}289: {$IF DEFINED(Win32)or DEFINED(Win64)}290: FDConnection1.Close;291: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';292: FDConnection1.Params.Values['Database']:='test.db';293: {$ENDIF}294: {$IF DEFINED(iOS)or DEFINED(ANDROID)}295: FDConnection1.Close;296: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';

Page 176: Bouheniche rida memoire final

297: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');298: {$ENDIF}299: try300: FDConnection1.Connected := true;301: try302: FDQuery1.Close;303: FDQuery1.SQL.Clear;304: FDQuery1.SQL.Add('select ID_Project,NT,NAmont,NAval,Q as [D(m)],CTNAmont,CTNAval,PSAmont

'select ID_Project,NT,NAmont,NAval,Q as [D(m)],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT = 0 and ID_Project='+Form2.IDID_Project);

305: FDQuery1.Active := true;306: AutoSizeGrid(StringGrid1,FDQuery1);307: FDQuery2.Close;308: FDQuery2.SQL.Clear;309: if Form2.Type_Reseau = 'Maille' then310: FDQuery2.SQL.Add('select ID_Project,NT,MP,MA,NAmont,NAval,Sens,Q as [D(m)],CTNAmont,CT

'select ID_Project,NT,MP,MA,NAmont,NAval,Sens,Q as [D(m)],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT > 0 and ID_Proje'select ID_Project,NT,MP,MA,NAmont,NAval,Sens,Q as [D(m)],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT > 0 and ID_Project='+Form2.ID_Project)

311: else312: FDQuery2.SQL.Add('select ID_Project,NT,NAmont,NAval,Q as [D(m)],CTNAmont,CTNAval,PSAmo

'select ID_Project,NT,NAmont,NAval,Q as [D(m)],CTNAmont,CTNAval,PSAmont,PSAval,Long,Reguosite as [Reguosite Abs] from Trancons where NT > 0 and ID_Project='+Form2.ID_Project);

313: FDQuery2.Active := true;314: AutoSizeGrid(StringGrid2,FDQuery2);315: if StringGrid2.RowCount > 4 then316: begin317: GroupBox3.Height := StringGrid2.RowHeight * StringGrid2.RowCount + 100;318: {$IF DEFINED(iOS)or DEFINED(ANDROID)}319: ScrollBox4.Height := GroupBox3.Height + 10;320: {$ENDIF}321: end;322: Except323: ShowMessage('Requate invalide');324: end;325: 326: Except327: ShowMessage('Connection échouée');328: Close;329: end;330: end;331: procedure TForm5.StringGrid1SelectCell(Sender: TObject; const ACol,332: ARow: Integer; var CanSelect: Boolean);333: begin334: if (ACol = 10) and (ARow <= StringGrid1.RowCount) then335: begin336: ComboBox1.ItemIndex := -1;337: {$IF DEFINED(Win32)or DEFINED(Win64)}338: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X+2;339: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+22;340: ComboBox1.Width := StringGrid1.Columns[ACol].Width;341: ComboBox1.Height := StringGrid1.RowHeight;342: {$ENDIF}343: {$IF DEFINED(iOS)or DEFINED(ANDROID)}344: ComboBox1.Position.X := StringGrid1.Position.X+StringGrid1.Columns[ACol].Position.X-4;345: ComboBox1.Position.Y := StringGrid1.Position.Y+(StringGrid1.RowHeight*ARow)+32;346: ComboBox1.Width := StringGrid1.Columns[ACol].Width+5;347: ComboBox1.Height := StringGrid1.RowHeight+5;348: {$ENDIF}349: ComboBox1.Visible := True;350: CanSelect := true;351: end352: else353: ComboBox1.Visible := False;354: 355: end;356: 357: procedure TForm5.StringGrid2SelectCell(Sender: TObject; const ACol,358: ARow: Integer; var CanSelect: Boolean);359: var Col : integer;360: begin361: if Form2.Type_Reseau = 'Maille' then362: Col := 13363: else364: Col := 10;365: if (ACol = 6) and (ARow <= StringGrid2.RowCount) and (Form2.Type_Reseau = 'Maille') then366: begin

Page 177: Bouheniche rida memoire final

367: ComboBox3.ItemIndex := -1;368: {$IF DEFINED(Win32)or DEFINED(Win64)}369: 370: ComboBox3.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X+2;371: ComboBox3.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+22;372: ComboBox3.Width := StringGrid2.Columns[ACol].Width;373: ComboBox3.Height := StringGrid2.RowHeight;374: {$ENDIF}375: {$IF DEFINED(iOS)or DEFINED(ANDROID)}376: ComboBox3.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X-4;377: ComboBox3.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+32;378: ComboBox3.Width := StringGrid2.Columns[ACol].Width+5;379: ComboBox3.Height := StringGrid2.RowHeight+5;380: {$ENDIF}381: ComboBox3.Visible := True;382: //StringGrid2.SelectRow(ARow);383: CanSelect := true;384: end385: else386: if (ACol = Col) and (ARow <= StringGrid2.RowCount) then387: begin388: ComboBox2.ItemIndex := -1;389: {$IF DEFINED(Win32)or DEFINED(Win64)}390: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X+2;391: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+22;392: ComboBox2.Width := StringGrid2.Columns[ACol].Width;393: ComboBox2.Height := StringGrid2.RowHeight;394: {$ENDIF}395: {$IF DEFINED(iOS)or DEFINED(ANDROID)}396: ComboBox2.Position.X := StringGrid2.Position.X+StringGrid2.Columns[ACol].Position.X-4;397: ComboBox2.Position.Y := StringGrid2.Position.Y+(StringGrid2.RowHeight*ARow)+32;398: ComboBox2.Width := StringGrid2.Columns[ACol].Width+5;399: ComboBox2.Height := StringGrid2.RowHeight+5;400: {$ENDIF}401: ComboBox2.Visible := True;402: //StringGrid2.SelectRow(ARow);403: CanSelect := true;404: end405: else406: begin407: ComboBox2.Visible := False;408: ComboBox3.Visible := False;409: end;410: end;411: 412: procedure TForm5.AutoSizeGrid(Grid: TStringGrid; Query : TFDQuery);413: var414: C : integer;415: begin416: for C := 0 to Grid.ColumnCount - 1 do begin417: if Grid.Columns[C].Header.Length > Query.FieldByName(Grid.Columns[C].Header).DisplayWidth

then418: Grid.Columns[C].Width := Grid.Columns[C].Header.Length * 8419: else420: Grid.Columns[C].Width := Query.FieldByName(Grid.Columns[C].Header).DisplayWidth * 8;421: if Grid.Equals(StringGrid1) and ((C = 0)or(C = 1)) then Grid.Columns[C].Visible := false;422: if Grid.Equals(StringGrid2) and (C = 0) then Grid.Columns[C].Visible := false;423: 424: end;425: 426: end;427: function TForm5.WidthCol(Grid: TStringGrid; Col : Integer): Real;428: var429: C : integer;430: Sum : Real;431: begin432: Sum := 0;433: for C := 0 to Col do434: begin435: Sum := Sum + Grid.Columns[C].Width;436: end;437: Result := Sum;438: end;439: 440: 441: end.

Page 178: Bouheniche rida memoire final

1: unit Unit7;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,8: FMX.StdCtrls, FMX.Objects, FMX.Controls.Presentation, FireDAC.Stan.Intf,9: FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,

10: FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,11: Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX.ScrollBox, FMX.Memo;12: 13: type14: TForm7 = class(TForm)15: ToolBar1: TToolBar;16: Label1: TLabel;17: exit: TButton;18: Image1: TImage;19: Memo1: TMemo;20: procedure exitClick(Sender: TObject);21: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);22: private23: { Private declarations }24: public25: { Public declarations }26: end;27: 28: var29: Form7: TForm7;30: 31: implementation32: 33: uses CRDEP_Unit;34: {$R *.fmx}35: {$R *.SmXhdpiPh.fmx ANDROID}36: {$R *.Windows.fmx MSWINDOWS}37: 38: procedure TForm7.exitClick(Sender: TObject);39: begin40: Form2.Show;41: Self.Release;42: end;43: 44: procedure TForm7.FormCloseQuery(Sender: TObject; var CanClose: Boolean);45: begin46: Form2.Show;47: Self.Release;48: 49: end;50: 51: end.

Page 179: Bouheniche rida memoire final

1: unit CRDEP_Unit;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,8: FMX.Objects, FMX.Menus, FMX.Controls.Presentation, FMX.Edit,9: FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,

10: FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,11: FireDAC.Stan.Async, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet,12: FireDAC.Comp.Client, FireDAC.UI.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,13: FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,14: FireDAC.Stan.ExprFuncs, FireDAC.FMXUI.Error, FireDAC.FMXUI.Wait,15: FireDAC.Comp.UI, FMX.Effects, FMX.Ani, System.Rtti, FMX.Layouts, FMX.Grid,16: Data.Bind.EngExt, Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs,17: Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope,18: FMX.ListBox, FMX.ComboEdit, FireDAC.FMXUI.Script, FireDAC.FMXUI.Async;19: 20: type21: TForm2 = class(TForm)22: Image1: TImage;23: FDConnection1: TFDConnection;24: FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;25: FDGUIxErrorDialog1: TFDGUIxErrorDialog;26: FDGUIxWaitCursor1: TFDGUIxWaitCursor;27: btn_start: TButton;28: ToolBar1: TToolBar;29: Label1: TLabel;30: btn_exit: TButton;31: btn_Setting: TButton;32: Rectangle1: TRectangle;33: Rectangle11: TRectangle;34: Button2: TButton;35: Button3: TButton;36: Button1: TButton;37: Rectangle12: TRectangle;38: Rectangle13: TRectangle;39: Rectangle2: TRectangle;40: Rectangle5: TRectangle;41: Label3: TLabel;42: Pwd: TEdit;43: Rectangle6: TRectangle;44: Cancel: TButton;45: Confirmer: TButton;46: Rectangle7: TRectangle;47: CheckBox1: TCheckBox;48: ShadowEffect2: TShadowEffect;49: Rectangle8: TRectangle;50: Label4: TLabel;51: Rectangle9: TRectangle;52: close_chois: TButton;53: btn_chois: TButton;54: Rectangle10: TRectangle;55: RadioButton1: TRadioButton;56: RadioButton2: TRadioButton;57: ShadowEffect3: TShadowEffect;58: ColorAnimation2: TColorAnimation;59: ColorAnimation3: TColorAnimation;60: ColorAnimation1: TColorAnimation;61: ColorAnimation4: TColorAnimation;62: ColorAnimation5: TColorAnimation;63: ColorAnimation6: TColorAnimation;64: FDQuery1: TFDQuery;65: MenuBar1: TMenuBar;66: fichier: TMenuItem;67: Option: TMenuItem;68: Help: TMenuItem;69: Nouveau_projet: TMenuItem;70: Exit: TMenuItem;71: Mod_pass: TMenuItem;72: propos: TMenuItem;73: Aide: TMenuItem;74: MenuItem2: TMenuItem;75: Button4: TButton;76: ColorAnimation7: TColorAnimation;

Page 180: Bouheniche rida memoire final

77: ColorAnimation8: TColorAnimation;78: Rectangle14: TRectangle;79: MenuItem3: TMenuItem;80: Button5: TButton;81: ColorAnimation9: TColorAnimation;82: ColorAnimation10: TColorAnimation;83: Rectangle15: TRectangle;84: GroupBox1: TGroupBox;85: GroupBox2: TGroupBox;86: Edit1: TEdit;87: Edit2: TEdit;88: Edit4: TEdit;89: Text1: TText;90: Text2: TText;91: Text3: TText;92: Text4: TText;93: Button6: TButton;94: Button7: TButton;95: Button8: TButton;96: Button9: TButton;97: ComboEdit1: TComboEdit;98: procedure loginClick(Sender: TObject);99: procedure FormCreate(Sender: TObject);

100: procedure CheckBox2Change(Sender: TObject);101: procedure CheckBox1Change(Sender: TObject);102: procedure CancelClick(Sender: TObject);103: procedure ConfirmerClick(Sender: TObject);104: procedure btn_CloseClick(Sender: TObject);105: procedure btn_SettingClick(Sender: TObject);106: procedure btn_exitClick(Sender: TObject);107: procedure close_choisClick(Sender: TObject);108: procedure btn_choisClick(Sender: TObject);109: procedure FormResize(Sender: TObject);110: procedure FormVirtualKeyboardShown(Sender: TObject;111: KeyboardVisible: Boolean; const Bounds: TRect);112: procedure FormVirtualKeyboardHidden(Sender: TObject;113: KeyboardVisible: Boolean; const Bounds: TRect);114: procedure Rectangle1Click(Sender: TObject);115: procedure Button2Click(Sender: TObject);116: procedure Button3Click(Sender: TObject);117: procedure Button1Click(Sender: TObject);118: procedure Nouveau_projetClick(Sender: TObject);119: procedure ExitClick(Sender: TObject);120: procedure Mod_passClick(Sender: TObject);121: procedure proposClick(Sender: TObject);122: procedure AideClick(Sender: TObject);123: procedure btn_startClick(Sender: TObject);124: procedure MenuItem2Click(Sender: TObject);125: procedure Button4Click(Sender: TObject);126: procedure MenuItem3Click(Sender: TObject);127: procedure Button5Click(Sender: TObject);128: procedure CheckBox3Change(Sender: TObject);129: procedure Button6Click(Sender: TObject);130: procedure Button7Click(Sender: TObject);131: procedure Button8Click(Sender: TObject);132: procedure Button9Click(Sender: TObject);133: 134: private135: show_keyboard : boolean;136: public137: ID_Project,Type_Reseau : String;138: Status : Integer;139: 140: end;141: 142: var143: Form2: TForm2;144: 145: 146: implementation147: 148: uses System.IOUtils,Unit5,Unit3,Unit7,Result_1,Result_2; // Automatically added by IDE149: 150: {$R *.fmx}151: {$R *.iPhone.fmx IOS}152: {$R *.Windows.fmx MSWINDOWS}

Page 181: Bouheniche rida memoire final

153: {$R *.SmXhdpiPh.fmx ANDROID}154: {$R *.Macintosh.fmx MACOS}155: {$R *.XLgXhdpiTb.fmx ANDROID}156: {$R *.NmXhdpiPh.fmx ANDROID}157: {$R *.LgXhdpiPh.fmx ANDROID}158: {$R *.Surface.fmx MSWINDOWS}159: 160: procedure TForm2.AideClick(Sender: TObject);161: var aid : TForm7;162: begin163: aid := TForm7.Create(Owner);164: aid.Show;165: Self.Hide;166: end;167: 168: procedure TForm2.btn_choisClick(Sender: TObject);169: var Form_Debut : TForm5;170: begin171: Rectangle1.Visible := false;172: Rectangle8.Visible := false;173: btn_start.TintColor := TAlphaColorRec.Green;174: FDQuery1.Close;175: FDQuery1.SQL.Clear;176: if RadioButton1.IsChecked then177: begin178: FDQuery1.SQL.Add('update Logins set Status=1,Type='+QuotedStr('Maille')+' where ID = '+ID_

ID_Project);179: Type_Reseau := 'Maille';180: end181: else182: begin183: FDQuery1.SQL.Add('update Logins set Status=1,Type='+QuotedStr('Ramifie')+' where ID = '+ID

ID_Project);184: Type_Reseau := 'Ramifie';185: end;186: FDQuery1.ExecSQL;187: Status := 1;188: Form_Debut := TForm5.Create(Owner);189: Form_Debut.Show;190: Self.Hide;191: end;192: 193: procedure TForm2.btn_CloseClick(Sender: TObject);194: begin195: if (Edit2.Text.IndexOf(Edit1.Text) = -1) and (Edit2.Text <> '') then196: begin197: FDQuery1.Close;198: FDQuery1.SQL.Clear;199: FDQuery1.SQL.Add('insert into Logins(Password,Project,Status)Values('+QuotedStr(Edit2.Text

)+','+QuotedStr(Edit2.Text)+',0)');200: FDQuery1.ExecSQL;201: ShowMessage('Create');202: 203: FDQuery1.Close;204: FDQuery1.SQL.Clear;205: FDQuery1.SQL.Add('select * from logins where Project='+QuotedStr(Edit2.Text));206: FDQuery1.Active := true;207: ID_Project := FDQuery1.FieldByName('ID').AsString;208: Status := 0;209: 210: FDQuery1.Close;211: FDQuery1.SQL.Clear;212: FDQuery1.SQL.Add('insert into Trancons(ID_Project,NT)values('+ID_Project+',0)');213: FDQuery1.ExecSQL;214: 215: Rectangle1.Visible := false;216: Rectangle2.Visible := false;217: {$IF DEFINED(Win32)or DEFINED(Win64)}218: MenuBar1.Enabled := true;219: {$ENDIF}220: 221: end222: else223: ShowMessage('Re-saisissez le nom du projet');224: end;225:

Page 182: Bouheniche rida memoire final

226: procedure TForm2.btn_exitClick(Sender: TObject);227: begin228: ShowMessage('Merci pour votre vésite');229: Sleep(1000);230: Close;231: end;232: 233: procedure TForm2.btn_SettingClick(Sender: TObject);234: begin235: Rectangle1.Opacity := 0;236: Rectangle1.Visible := true;237: Rectangle11.Visible := true;238: end;239: 240: procedure TForm2.btn_startClick(Sender: TObject);241: begin242: if Status = 0 then243: begin244: //btn_start.Text := 'Choisie un type de réseau'245: btn_chois.Width := Rectangle9.Width / 2;246: close_chois.Width := Rectangle9.Width / 2;247: Rectangle1.Visible := true;248: Rectangle8.Visible := true;249: FormResize(sender);250: end251: else if Status = 1 then252: begin253: //btn_start.Text := 'Entre le donner'254: TForm5.Create(Owner).Show;255: Self.Hide;256: end257: else if Status = 2 then258: begin259: //btn_start.Text := 'Choix Diameter'260: TResult1.Create(Owner).Show;261: Self.Hide;262: end263: else if Status >= 3 then264: begin265: //btn_start.Text := 'Résulta & Itération';266: TResult2.Create(Owner).Show;267: Self.Hide;268: end;269: btn_start.TintColor := TAlphaColorRec.Green;270: end;271: 272: procedure TForm2.Button1Click(Sender: TObject);273: begin274: Rectangle1.Visible := false;275: Rectangle11.Visible := false;276: Rectangle1.Opacity := 0.5;277: try278: FDQuery1.Active := true;279: pwd.Text := FDQuery1.FieldByName('Password').Text;280: Cancel.Width := Rectangle6.Width / 2;281: Confirmer.Width := Rectangle6.Width / 2;282: Rectangle1.Visible := true;283: Rectangle5.Visible := true;284: FormResize(sender);285: Except286: ShowMessage('Connection échouée');287: end;288: 289: end;290: 291: procedure TForm2.Button2Click(Sender: TObject);292: var propos : TForm3;293: begin294: Rectangle1.Visible := false;295: Rectangle11.Visible := false;296: Rectangle1.Opacity := 0.5;297: propos := TForm3.Create(Owner);298: propos.Show;299: Self.Hide;300: end;301:

Page 183: Bouheniche rida memoire final

302: procedure TForm2.Button3Click(Sender: TObject);303: var aid : TForm7;304: begin305: Rectangle1.Visible := false;306: Rectangle11.Visible := false;307: Rectangle1.Opacity := 0.5;308: 309: aid := TForm7.Create(Owner);310: aid.Show;311: Self.Hide;312: end;313: 314: procedure TForm2.Button4Click(Sender: TObject);315: begin316: try317: Rectangle11.Visible := false;318: Rectangle1.Opacity := 0.5;319: Rectangle1.Visible := true;320: Rectangle2.Visible := true;321: FDQuery1.Close;322: FDQuery1.SQL.Clear;323: FDQuery1.SQL.Add('select Project from Logins order by ID');324: FDQuery1.Active := true;325: ComboEdit1.Items.Clear;326: while not(FDQuery1.Eof) do327: begin328: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);329: FDQuery1.Next;330: end;331: Except332: Close;333: end;334: show_keyboard := true;335: 336: end;337: 338: procedure TForm2.Button5Click(Sender: TObject);339: var mes :String;340: begin341: Rectangle11.Visible := false;342: Rectangle1.Visible := false;343: Rectangle1.Opacity := 0.5;344: 345: mes := 'ATTENTION vous allez suprimer un projet,Etes-vous sur de vouloir le suprimer?';346: MessageDlg(mes, System.UITypes.TMsgDlgType.mtConfirmation,347: [348: System.UITypes.TMsgDlgBtn.mbOK,349: System.UITypes.TMsgDlgBtn.mbCancel350: ], 0,351: // Use an anonymous method to make sure the acknowledgment appears as expected.352: procedure(const AResult: TModalResult)353: begin354: case AResult of355: mrOk:356: begin357: FDQuery1.Close;358: FDQuery1.SQL.Clear;359: FDQuery1.SQL.Add('delete from Logins where ID ='+ID_Project+' ; ');360: FDQuery1.SQL.Add('delete from Trancons where ID_Project ='+ID_Project+' ; ');361: FDQuery1.SQL.Add('delete from DNTrancons where ID_Project ='+ID_Project+' ; ');362: try363: FDQuery1.ExecSQL;364: ShowMessage('Le Projet est Supprimer');365: Rectangle1.Visible := true;366: Rectangle2.Visible := true;367: FDQuery1.Close;368: FDQuery1.SQL.Clear;369: FDQuery1.SQL.Add('select Project from Logins order by ID');370: FDQuery1.Active := true;371: ComboEdit1.Items.Clear;372: while not(FDQuery1.Eof) do373: begin374: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);375: FDQuery1.Next;376: end;377: show_keyboard := true;

Page 184: Bouheniche rida memoire final

378: Except379: ShowMessage('Requate invalide');380: end;381: end;382: mrCancel:383: end;384: 385: end386: 387: )388: 389: 390: end;391: 392: procedure TForm2.Button6Click(Sender: TObject);393: begin394: begin395: if (Edit2.Text.IndexOf(Edit1.Text) = -1) and (Edit2.Text <> '') then396: begin397: FDQuery1.Close;398: FDQuery1.SQL.Clear;399: FDQuery1.SQL.Add('insert into Logins(Password,Project,Status)Values('+QuotedStr(Edit1.Text

)+','+QuotedStr(Edit2.Text)+',0)');400: FDQuery1.ExecSQL;401: ShowMessage('Create');402: 403: FDQuery1.Close;404: FDQuery1.SQL.Clear;405: FDQuery1.SQL.Add('select * from logins where Project='+QuotedStr(Edit2.Text));406: FDQuery1.Active := true;407: ID_Project := FDQuery1.FieldByName('ID').AsString;408: Status := 0;409: 410: FDQuery1.Close;411: FDQuery1.SQL.Clear;412: FDQuery1.SQL.Add('insert into Trancons(ID_Project,NT)values('+ID_Project+',0)');413: FDQuery1.ExecSQL;414: 415: Rectangle1.Visible := false;416: Rectangle2.Visible := false;417: {$IF DEFINED(Win32)or DEFINED(Win64)}418: MenuBar1.Enabled := true;419: {$ENDIF}420: 421: end422: else423: ShowMessage('Re-saisissez le nom du projet');424: end;425: end;426: 427: procedure TForm2.Button7Click(Sender: TObject);428: begin429: begin430: ShowMessage('Merci pour votre visite');431: Sleep(1000);432: Close;433: end;434: end;435: 436: procedure TForm2.Button8Click(Sender: TObject);437: begin438: if ComboEdit1.ItemIndex <> -1 then439: begin440: try441: FDQuery1.Close;442: FDQuery1.SQL.Clear;443: FDQuery1.SQL.Add('select * from Logins where Project = '+QuotedStr(ComboEdit1.Items[ComboE

ComboEdit1.ItemIndex]));444: FDQuery1.Active := true;445: if FDQuery1.FieldByName('Password').Text = Edit4.Text then446: begin447: ID_Project := FDQuery1.FieldByName('ID').AsString;448: Status := FDQuery1.FieldByName('Status').AsInteger;449: Type_Reseau := FDQuery1.FieldByName('Type').AsString;450: Rectangle1.Visible := false;451: Rectangle2.Visible := false;

Page 185: Bouheniche rida memoire final

452: {$IF DEFINED(Win32)or DEFINED(Win64)}453: MenuBar1.Enabled := true;454: {$ENDIF}455: end456: else457: begin458: ShowMessage('mot de passe incorrect');459: end;460: Except461: ShowMessage('Erreur inconnu');462: end;463: end464: else465: ShowMessage('Choisir un project ou create nouveau project!');466: 467: 468: end;469: 470: 471: procedure TForm2.Button9Click(Sender: TObject);472: begin473: begin474: ShowMessage('Merci pour votre visite');475: Sleep(1000);476: Close;477: end;478: end;479: 480: procedure TForm2.CancelClick(Sender: TObject);481: begin482: CheckBox1.IsChecked := false;483: Rectangle1.Visible := false;484: Rectangle5.Visible := false;485: end;486: 487: procedure TForm2.CheckBox1Change(Sender: TObject);488: begin489: Pwd.Password := not(CheckBox1.IsChecked);490: end;491: 492: procedure TForm2.CheckBox2Change(Sender: TObject);493: begin494: edit1.Password := not(CheckBox1.IsChecked);495: end;496: 497: procedure TForm2.CheckBox3Change(Sender: TObject);498: begin499: Edit1.Password := not(CheckBox1.IsChecked);500: end;501: 502: procedure TForm2.close_choisClick(Sender: TObject);503: begin504: Rectangle1.Visible := false;505: Rectangle8.Visible := false;506: btn_start.TintColor := TAlphaColorRec.Green;507: 508: end;509: 510: procedure TForm2.ConfirmerClick(Sender: TObject);511: begin512: FDQuery1.Close;513: FDQuery1.SQL.Clear;514: FDQuery1.SQL.Add('update logins set Password = '+QuotedStr(Pwd.Text)+' where ID = 1');515: FDQuery1.ExecSQL;516: ShowMessage('Le mot de passe est modifié');517: FDQuery1.Close;518: FDQuery1.SQL.Clear;519: FDQuery1.SQL.Add('select * from logins');520: Rectangle1.Visible := false;521: Rectangle5.Visible := false;522: end;523: 524: procedure TForm2.ExitClick(Sender: TObject);525: begin526: Close;527: end;

Page 186: Bouheniche rida memoire final

528: 529: procedure TForm2.loginClick(Sender: TObject);530: begin531: if ComboEdit1.ItemIndex <> -1 then532: begin533: try534: FDQuery1.Close;535: FDQuery1.SQL.Clear;536: FDQuery1.SQL.Add('select * from Logins where Project = '+QuotedStr(ComboEdit1.Items[ComboE

ComboEdit1.ItemIndex]));537: FDQuery1.Active := true;538: if FDQuery1.FieldByName('Password').Text = Edit1.Text then539: begin540: ID_Project := FDQuery1.FieldByName('ID').AsString;541: Status := FDQuery1.FieldByName('Status').AsInteger;542: Type_Reseau := FDQuery1.FieldByName('Type').AsString;543: Rectangle1.Visible := false;544: Rectangle2.Visible := false;545: {$IF DEFINED(Win32)or DEFINED(Win64)}546: MenuBar1.Enabled := true;547: {$ENDIF}548: end549: else550: begin551: ShowMessage('mot de passe incorrect');552: end;553: Except554: ShowMessage('Erreur inconnu');555: end;556: end557: else558: ShowMessage('Choisir un project ou create nouveau project!');559: 560: 561: end;562: 563: procedure TForm2.MenuItem2Click(Sender: TObject);564: var mes :String;565: begin566: mes := 'ATTENTION vous allez suprimer un projet,Etes-vous sur de vouloir le suprimer?';567: if MessageDlg(mes, System.UITypes.TMsgDlgType.mtConfirmation,[System.UITypes.TMsgDlgBtn.mbCanc

mbCancel, System.UITypes.TMsgDlgBtn.mbOK],1) = mrOk then568: begin569: FDQuery1.Close;570: FDQuery1.SQL.Clear;571: FDQuery1.SQL.Add('delete from Logins where ID = '+ID_Project+';');572: FDQuery1.SQL.Add('delete from Trancons where ID_Project = '+ID_Project+';');573: FDQuery1.SQL.Add('delete from DNTrancons where ID_Project = '+ID_Project+';');574: try575: FDQuery1.ExecSQL;576: ShowMessage('Le Projet est Supprimer');577: try578: Rectangle1.Visible := true;579: Rectangle2.Visible := true;580: FDQuery1.Close;581: FDQuery1.SQL.Clear;582: FDQuery1.SQL.Add('select Project from Logins order by ID');583: FDQuery1.Active := true;584: ComboEdit1.Items.Clear;585: while not(FDQuery1.Eof) do586: begin587: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);588: FDQuery1.Next;589: end;590: Except591: Close;592: end;593: show_keyboard := true;594: Except595: ShowMessage('Requate invalide');596: end;597: end;598: end;599: 600: procedure TForm2.MenuItem3Click(Sender: TObject);601: begin

Page 187: Bouheniche rida memoire final

602: 603: try604: Rectangle1.Visible := true;605: Rectangle2.Visible := true;606: FDQuery1.Close;607: FDQuery1.SQL.Clear;608: FDQuery1.SQL.Add('select Project from Logins order by ID');609: FDQuery1.Active := true;610: ComboEdit1.Items.Clear;611: while not(FDQuery1.Eof) do612: begin613: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);614: FDQuery1.Next;615: end;616: Except617: Close;618: end;619: show_keyboard := true;620: 621: end;622: 623: procedure TForm2.Mod_passClick(Sender: TObject);624: begin625: try626: FDQuery1.Active := true;627: pwd.Text := FDQuery1.FieldByName('Password').Text;628: Rectangle1.Visible := true;629: Rectangle5.Visible := true;630: Except631: ShowMessage('Connection échouée');632: end;633: 634: end;635: 636: procedure TForm2.Nouveau_projetClick(Sender: TObject);637: begin638: if Status = 0 then639: begin640: //btn_start.Text := 'Choisie un type de réseau'641: Rectangle1.Visible := true;642: Rectangle8.Visible := true;643: end644: else if Status = 1 then645: begin646: //btn_start.Text := 'Entre le donner'647: TForm5.Create(Owner).Show;648: Self.Hide;649: end650: else if Status = 2 then651: begin652: //btn_start.Text := 'Choix Diameter'653: TResult1.Create(Owner).Show;654: Self.Hide;655: end656: else if Status >= 3 then657: begin658: //btn_start.Text := 'Résulta & Itération';659: TResult2.Create(Owner).Show;660: Self.Hide;661: end;662: end;663: 664: 665: procedure TForm2.proposClick(Sender: TObject);666: var propos : TForm3;667: begin668: propos := TForm3.Create(Owner);669: propos.Show;670: Self.Hide;671: end;672: 673: procedure TForm2.Rectangle1Click(Sender: TObject);674: begin675: if Rectangle11.Visible then676: begin677: Rectangle1.Visible := false;

Page 188: Bouheniche rida memoire final

678: Rectangle11.Visible := false;679: Rectangle1.Opacity := 0.5;680: end;681: end;682: 683: procedure TForm2.FormCreate(Sender: TObject);684: begin685: {$IF DEFINED(Win32)or DEFINED(Win64)}686: MenuBar1.Visible := true;687: MenuBar1.Enabled := false;688: FDConnection1.Close;689: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';690: FDConnection1.Params.Values['Database']:='test.db';691: {$ENDIF}692: {$IF DEFINED(iOS)or DEFINED(ANDROID)}693: FDConnection1.Close;694: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';695: FDConnection1.Params.Values['Database']:=TPath.Combine(TPath.GetDocumentsPath,'test.db');696: {$ENDIF}697: 698: try699: FDConnection1.Connected := true;700: Rectangle1.Opacity := 0.5;701: Rectangle1.Visible := true;702: Rectangle2.Visible := true;703: FDQuery1.Close;704: FDQuery1.SQL.Clear;705: FDQuery1.SQL.Add('select Project from Logins order by ID');706: FDQuery1.Active := true;707: while not(FDQuery1.Eof) do708: begin709: ComboEdit1.Items.Add(FDQuery1.Fields[0].AsString);710: FDQuery1.Next;711: end;712: 713: Except714: ShowMessage('Connection échouée');715: Close;716: end;717: show_keyboard := true;718: end;719: 720: 721: 722: procedure TForm2.FormResize(Sender: TObject);723: begin724: {$IF DEFINED(iOS)or DEFINED(ANDROID)}725: if Rectangle2.Visible then726: begin727: btn_Close.Width := Rectangle3.Width / 2;728: login.Width := Rectangle3.Width / 2;729: end;730: if Rectangle5.Visible then731: begin732: Confirmer.Width := Rectangle6.Width / 2;733: Cancel.Width := Rectangle6.Width / 2;734: end;735: if Rectangle8.Visible then736: begin737: btn_chois.Width := Rectangle9.Width / 2;738: close_chois.Width := Rectangle9.Width / 2;739: end;740: {$ENDIF}741: end;742: 743: procedure TForm2.FormVirtualKeyboardHidden(Sender: TObject;744: KeyboardVisible: Boolean; const Bounds: TRect);745: begin746: {$IF DEFINED(iOS)or DEFINED(ANDROID)}747: Rectangle2.Margins.Bottom := 0;748: Rectangle5.Margins.Bottom := 0;749: Rectangle8.Margins.Bottom := 0;750: show_keyboard := true;751: {$ENDIF}752: end;753:

Page 189: Bouheniche rida memoire final

754: procedure TForm2.FormVirtualKeyboardShown(Sender: TObject;755: KeyboardVisible: Boolean; const Bounds: TRect);756: begin757: {$IF DEFINED(iOS)or DEFINED(ANDROID)}758: if show_keyboard then759: begin760: if Rectangle2.Visible then761: if Bounds.Height+50 >= Rectangle2.Position.Y then762: Rectangle2.Margins.Bottom := Bounds.Height+50 - Rectangle2.Position.Y;763: 764: if Rectangle5.Visible then765: if Bounds.Height+50 >= Rectangle5.Position.Y then766: Rectangle5.Margins.Bottom := Bounds.Height+50 - Rectangle5.Position.Y;767: 768: if Rectangle8.Visible then769: if Bounds.Height+50 >= Rectangle8.Position.Y then770: Rectangle8.Margins.Bottom := Bounds.Height+50 - Rectangle8.Position.Y;771: show_keyboard := false;772: end;773: {$ENDIF}774: end;775: 776: end.

Page 190: Bouheniche rida memoire final

1: unit Rapport;2: 3: interface4: 5: uses6: System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7: FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,8: FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,9: FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,

10: FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,11: FireDAC.Stan.ExprFuncs, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,12: FireDAC.DApt, FMX.Controls.Presentation, FMX.StdCtrls, Data.DB,13: FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX.frxClass, FMX.frxDBSet,14: FireDAC.FMXUI.Wait, FireDAC.Comp.UI, FMX.frxExportPDF, FMX.frxExportRTF,15: FMX.frxExportHTML, FMX.frxExportCSV, FMX.frxExportImage, FMX.frxExportText;16: 17: type18: TForm1 = class(TForm)19: frxReport1: TfrxReport;20: frxDBDataset1: TfrxDBDataset;21: FDConnection1: TFDConnection;22: FDQuery1: TFDQuery;23: print: TButton;24: FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;25: FDGUIxWaitCursor1: TFDGUIxWaitCursor;26: FDQuery2: TFDQuery;27: FDQuery3: TFDQuery;28: frxDBDataset2: TfrxDBDataset;29: frxDBDataset3: TfrxDBDataset;30: frxBMPExport1: TfrxBMPExport;31: frxRTFExport1: TfrxRTFExport;32: frxHTMLExport1: TfrxHTMLExport;33: frxReport2: TfrxReport;34: procedure FormCreate(Sender: TObject);35: procedure printClick(Sender: TObject);36: procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);37: private38: { Private declarations }39: public40: { Public declarations }41: end;42: 43: var44: Form1: TForm1;45: 46: implementation47: 48: uses System.IOUtils,CRDEP_Unit;49: {$R *.fmx}50: 51: procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);52: begin53: Self.Release;54: end;55: 56: procedure TForm1.FormCreate(Sender: TObject);57: begin58: FDConnection1.Close;59: FDConnection1.Params.Values['ColumnMetadataSupported']:='False';60: FDConnection1.Params.Values['Database']:='test.db';61: try62: FDConnection1.Connected := true;63: FDQuery1.Close;64: FDQuery1.SQL.Clear;65: if Form2.Type_Reseau = 'Maille' then66: FDQuery1.SQL.Add('Select NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[

'Select NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+Form2.IID_Project+';')

67: else68: FDQuery1.SQL.Add('Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)]

'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project 'Select NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPR(m)],[CP1(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TReservoir where ID_Project = '+Form2.ID_Project+';');

69: 70: FDQuery1.Active := true;71: if Form2.Type_Reseau = 'Maille' then72: begin

Page 191: Bouheniche rida memoire final

73: FDQuery2.Close;74: FDQuery2.SQL.Clear;75: FDQuery2.SQL.Add('select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]

'select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Project='select MP,printf("%.5f",[Som DH]) AS [Som DH],printf("%.5f",[Som DH/Q]) AS [Som DH/Q],printf("%.5f",[D q(m3/s)]) AS [Dq(m3/s)] from Erreur_mailles where ID_Project='+Form2.ID_Project);

76: FDQuery2.Active := true;77: end;78: 79: FDQuery3.Close;80: FDQuery3.SQL.Clear;81: if Form2.Type_Reseau = 'Maille' then82: FDQuery3.SQL.Add('select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[

'select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[Q Corrige(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_Tranc'select NT,MP,MA,NAmont,NAval,[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[Q Corrige(m3/s)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconMaille where ID_Project = '+Form2.ID_Project+';')

83: else84: FDQuery3.SQL.Add('select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(

'select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie whe'select NT,NAmont,NAval,[Qp(m3/s)],[DC(m)],TC,[DN(m)],[V(m/s)],[PDCT(m)],[CPAmont(m)],[CPAval(m)],[PSAmont(m.c.e)],[PSAval(m.c.e)] from VResulta_TranconRamifie where ID_Project = '+Form2.ID_Project+';');

85: FDQuery3.Active := true;86: Except87: ShowMessage('Connection échouée');88: Close;89: end;90: 91: end;92: 93: procedure TForm1.printClick(Sender: TObject);94: begin95: if Form2.Type_Reseau = 'Maille' then96: begin97: frxReport1.PrepareReport(true);98: frxReport1.ShowPreparedReport;99: end

100: else101: begin102: frxReport2.PrepareReport(true);103: frxReport2.ShowPreparedReport;104: end;105: Close;106: end;107: 108: end.