PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Structure vs requête
Structure vs requête
Débuté par GB, 11 mai 2021 21:48 - 2 réponses
Membre enregistré
312 messages
Popularité : +8 (10 votes)
Posté le 11 mai 2021 - 21:48
Bonsoir à tous,

J'ai une fenêtre devis qui contient des champs liés au fichier devis et une table liée au fichier ligne devis.
A l'heure actuelle je filtre ma table pour n'afficher que les lignes devis rattachées à devis (via ID_Devis) et les lignes devis différentes d'un critère "type ligne".
Ceci m'occasionne des lenteurs d'ouverture et de traitement.

Je veux donc essayer de simplifier le process de gestion des données de la fenetre pour éviter d'avoir a filtrer la table.

En terme de fonctionnement je dois pouvoir gérer :

- ajout de lignes devis
- suppression de lignes devis
- copie de lignes devis

Une ligne devis peut avoir des composants (rattaché par le champs ID_lignedevis_parent.
Les lignes devis, les lignes devis "composant" sont dans le même fichier (différenciées par un champs type)

Je me pose la question de passer soit par une requête (avec modification fichier) soit par une structure et un tableau de structure.

je pensais par la même occasion mettre en place la rédaction provisoire, à savoir ne prendre en compte les modifications qu'a l'enregistrement du devis. Cela veut dire que la structure et le tableau de structure seraient adaptés à ces contraintes, mais je ne sais comment gérer les suppressions ou les ajouts => on supprime une ligne de la table, comment répercuter uniquement au moment de l'enregistrement la suppression de la ligne_devis et éventuellement de son composant.

Idem pour les ajouts. Comment gérer l'ajout d'une ligne qui n'a pas encore d'ID et éventuellement un composant.

Faut il avoir un champs dans la structure qui attribut un ID provisoire (l'indice éventuellement ?).


Je n'ai pas l'expérience de mettre en place des gestions de données intermédiaires entre fichier et IHM... vos éclaircissement seront donc précieux.


Bonne soirée
Membre enregistré
199 messages
Popularité : +3 (7 votes)
Posté le 12 mai 2021 - 10:08
Bonjour,

Si j'ai bien compris:

Niveau performance:
- Effectivement, il ne faut pas charger la table des lignes des devis avec tout le fichier puis filtrer ensuite. Il vaut mieux charger uniquement les lignes devis liées au devis affiché (à vous de voir si vous passer par une requête avec paramètre, une requête SQL...). Sans cela la lenteur va s'accentuer à chaque nouveau devis ajouté dans la base.

Pour la gestion des lignes des devis, voici une méthode assez simple à mettre en place :
Dans la table des lignes des devis vous ajoutez 2 colonnes : COL_ID_LigneDevis et COL_ASupprimer (interrupteur)
- Ajout :
Dans la table quand vous ajoutez une ligne de devis COL_ID_LigneDevis sera à 0 car la ligne n’existe pas encore dans la base.
- Suppression :
Lors de la suppression d’une ligne vous rendez la ligne invisible et mettez la colonne COL_ASupprimer à « vrai » (permet de ne pas supprimer directement si l'utilisateur veut annuler la suppression)
- Copie :
Vous copiez une ligne mais vous remettez la colonne COL_ID_LigneDevis à 0 (pour dire que c'est une nouvelle ligne)

Comme cela lors de l’enregistrement du devis vous parcourez ensuite la table des lignes du devis avec les tests suivants:
SI COL_ASupprimer = Vrai _ET_ COL_ID_LigneDevis > 0 ALORS
//Ligne existante dans la base (ID > 0) et à supprimer
HSupprime(...)
SINON
SI COL_ID_LigneDevis = 0 ALORS
//Nouvelle ligne
HAjoute(…)
SINON
//Ligne existante
HModifie(…)
FIN
FIN

Ceci est uniquement pour décrire la méthode, on peut encore largement améliorer le tout. En espérant avoir été assez clair...
Membre enregistré
312 messages
Popularité : +8 (10 votes)
Posté le 12 mai 2021 - 21:57
C est très clair merci.

Il faut etendre la methode aux composants, donc rajouter une colonne pour un id de liaison provisoire. Sinon enregistrer la ligne avant d affecter un composant.