PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Databinding sur Structure et FichierVersMemoire()
Databinding sur Structure et FichierVersMemoire()
Iniciado por Esteban VENANT, jan., 21 2020 4:41 PM - 2 respostas
Membro registado
11 mensagems
Popularité : +1 (1 vote)
Publicado em janeiro, 21 2020 - 4:41 PM
Bonjour,

J'aurais besoin d'information et d'aide concernant le databinding, et le FichierVersMemoire().

J'ai un projet déjà bien avancé. Le problème de ce projet, c'est que le code métier et UI n'a pas été séparé. J'aimerais donc séparer les codes et utiliser une architecture type 3-tiers en utilisant des structures et procédures. Je ne maitrise pas assez les classes et POO pour programmer en objet donc je ne souhaite pas m'aventurer dans de la POO même si apparemment c'est le mieux à faire.

J'ai généré automatiquement mes procédures globales avec mes structures via windev "Modélisation UML > Générer code", cependant, dans mes structures générées, les clés des liaisons ont été traduites en membres à structures, qui pointent vers les structures correspondantes, ce qui est certainement logique, mais comment les remplir automatiquement via la fonction fichierversmemoire()?


Un petit exemple :

J'ai une table société :
IDsociete
Nom
Adresse
...

Une table civilité :
IDcivilite
Nom
NomAbr

Une table Contact :
IDcontact
Nom
Prenom
IDcivilite (liaison avec la table civilité)
IDsociete (liaison avec la table société)
Adresse
...

Lorsque je génère mes procédures et structures, j'obtiens les 3 structures suivantes :
STCOL_Societe est une structure
IDsociete est un entier sur 8 octets
Nom est une chaîne
Adresse est une chaîne
tabContact est un tableau de 0 STCOL_Contact dynamique // (????)
FIN

STCOL_Civilite
IDcivilite est une entier sur 8 octets
Nom est une chaîne
NomAbr est une chaîne
tabContact est un tableau de 0 STCOL_Contact dynamique // (????)
FIN

STCOL_Contact
IDcontact est un entier sur 8 octets
Nom est une chaîne
Prenom est une chaîne
Adresse est une chaîne
refIDcivilite est STCOL_Civilite dynamique // (????)
refIDsociete est STCOL_Societe dynamique // (????)
FIN


Je ne comprends pas les (????) ci-dessus, pourquoi il m'a créé un membre à structure pour IDcivilite et IDsociete dans ma structure Contact par exemple ? Car quand je fais une recherche sur un contact, je n'ai que l'ID civilité et l'ID société et de ce fait, fichierversmemoire() ne remplie pas automatiquement les membres IDcivilité et IDsociete de ma structure Contact.

exemple de recherche d'un contact :
Procedure LitContact(nID est un entier)
stContact est un STCOL_Contact
HLitRecherchePremier(Contact,IDcontact,nID)
SI HTrouve()
FichierVersMémoire(stContact,Contact)
FIN


Ici, mon FichierVersMémoire() va bien remplir les membres IDcontact,Nom,Prenom,Adresse de ma structure Contact, mais l'IDsociete et l'IDcivilite ne sont pas remplis. Il faudrait faire manuellement stContact.refIDcivilite.IDcivilite = Contact.IDcivilite et stContact.refIDsociete.IDsociete = Contact.IDsociete pour que cela fonctionne apparemment mais cela perd l'intérêt de FichierVersMémoire(). Comment le rendre automatique ?

Faut-il que je remplace dans ma structure Contact les :
refIDcivilite est STCOL_Civilite dynamique
refIDsociete est STCOL_Societe dynamique

Par
IDcivilite est un entier
IDsociete est un entier

Ou il y a t-il un moyen de faire correspondre stContact.refIDcivilite.IDcivilite et stContact.refIDsociete.IDsociete automatiquement avec le FichierVersMémoire(stContact,Contact) ?

Autre question également :
- Quel est le but des "Dynamique" générés automatiquement pour certains des membres de mes structures? Sont-ils indispensables ici ?
- Vaut-il mieux mettre les mêmes noms des membres de mes structures que ceux présents dans ma base ou utiliser <MAPPING=ChampTable) pour chaque membre de ma structure ?


J'espère avoir été assez claire dans ma demande, les réponses doivent certainement être évidentes, mais pas moyen de les trouver. Les exemples que j'ai trouvé montraient simplement le cas pour une table sans liaison vers une autre table...


Merci d'avance,
Cordialement
Esteban
Membro registado
11 mensagems
Popularité : +1 (1 vote)
Publicado em janeiro, 22 2020 - 11:53 PM
Bonsoir,

Mon sujet n'attire pas tellement à ce que je vois, peut-être que je me suis mal exprimé dans ma demande, je suis un peu perdu, mais si quelqu'un pouvait m'éclaircir sur certains points concernant la programmation procédurale et architecture 3 tiers, ça m'aiderait beaucoup. J'ai bien compris le principe théorique du 3 tiers, mais j'ai un peu de mal à saisir certains points qui me bloquent, qui sont probablement pas compliqués mais pas moyen de trouver les réponses.

Je souhaite utiliser la méthode procédurale pour du 3-tiers car je ne m'y connais pas assez en POO. Voici mes questions :

1°) Dois-je créer une collection de procédure pour CHAQUE table de l'analyse et CHAQUE requête avec la structure et le mapping correspondant ? Exemple Table Contact => créer une collection COL_Contact et une structure globale STCOL_Contact mappé sur ma table Contact

2°) Pour une table possédant des clés étrangères. Comment les modéliser dans ma structure ?
Exemple : Table contact (IDcontact, nom, prénom, IDsociete (clé étrangère de la table Société)
Dois-je écrire pour ma Structure STCOL_Contact : IDsociete est un entier OU refIDsociete est STCOL_Societe dynamique ?

3°) Pour initialiser une variable tableau de structure STCOL_Contact, dois-je utiliser tabContact est un tableau de STCOL_Contact ou bien tabContact est un tableau de STCOL_Contact DYNAMIQUE ? Et que permet le "Dynamique" dans ce cas ?

4°) Lorsque j'initialise ma table mémoire contact dans ma fenêtre via databinding (sur ma variable tabContact donc), si j'ajoute ou modifie un élément de la table contact, dois-je rafraîchir simplement la table via TableAffiche() ou rééxécuter la requête sur la BDD qui me permet de remplir ma variable tabContact et ensuite d'afficher de nouveau ? (Car si je rafraîchi uniquement ma table mémoire via tableaffiche(), les ajouts/modification/suppression entre temps des autres utilisateurs ne seront donc pas visibles sauf si je ferme puis reouvre la fenêtre, est-ce un fonctionnement normal ou faut-il rafraîchir toutes les données ?)

5°) Lorsque je veux modifier une ligne de ma table mémoire contact, je suppose qu'il faut que je fasse :
pstContactCourant est un STCOL_Contact dynamique
pstContactCourant = TABLE_Contact

SI Ouvre(FEN_GestionContact,pstContactCourant ) ALORS
TableAffiche(TABLE_Contact,taCourantBandeau)
FIN


Mais une fois dans ma FEN_GestionContact, dois-je faire une recherche sur la BDD à l'initialisation via pstContactCourant.IDcontact pour remplir la fiche du contact à modifier ? (Dans le cas où ce contact aurait été modifié entre temps par un autre utilisateur). Ou j'affecte simplement mes champs par databinding via ma variable pstContactCourant passée dans la fenêtre, mais qui n'est donc peut-être plus à jour entre temps ?

J'ai un peu de mal à saisir quand est-ce que je dois reutiliser la couche donnée pour mettre à jour mes variables structures.


6°) Dans le cas de suppression d'un contact dans ma table mémoire TABLE_Contact, est-il possible de supprimer à la fois l'élément dans la table mémoire TABLE_Contact ET dans la variable tableau tabContact (lié à la table mémoire pour le databinding) ? Car si je fais un TableSupprimeSelect(), l'élément disparaît bien de ma table TABLE_Contact, mais est toujours présent dans mon tableau tabContact. Donc si je fais de nouveau un TableAffiche(), il réapparaît dans la table TABLE_Contact.



Si certains d'entre-vous auraient des réponses à m'apporter sur les points ci-dessus afin de m'aider à y voir plus claire et me permettre d'avancer, ça serait sympa car là je bloque...

Merci d'avance,
Bonne soirée,
Esteban
Membro registado
1.144 mensagems
Popularité : +50 (142 votes)
Publicado em janeiro, 23 2020 - 7:21 PM
Bonsoir,

Pourquoi utiliser une structure ? Personnellement j'utiliserai une classe
dans l'explorateur de projet :
1 : clic droit sur le fichier
2 : clic sur générer la classe
3 : ajouter les méthodes et propriétés dans la classe qui est généré
4 : Utiliser la classe dans les fenêtres (en DataBinding)

Je vous conseille d'aller voir sur Youtube les vidéos de Jérôme Aerts qui explique très bien comment ça fonctionne

Thierry