PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Liaison de 2 lignes d'une table
Liaison de 2 lignes d'une table
Started by djay06, Jul., 09 2024 4:31 PM - 11 replies
Registered member
11 messages
Posted on July, 09 2024 - 4:31 PM
Bonjour à tous,

J'aurais besoin d'aide svp, j'ai importé un fichier Excel, j'ai stocké ses données dans une table de données et je les affiches dans une fenêtre dans un tableau.

Je souhaite lier manuellement des lignes entre elles, pour ce faire je peux déjà avec la touche ctrl + clic de la souris sélectionner les lignes à lier.

Evidement je souhaite sauvegarder ces liaisons en bdd, j'ai prévu à cet effet un emplacement dans la bdd.

Pouvez-vous m'aider?

en vous remerciant
Cordialement.
Registered member
2,676 messages
Posted on July, 09 2024 - 5:00 PM
Bonjour,

Qu'est-ce que tu ne sais pas faire en fait ?

--
Cordialement,

Philippe SAINT-BERTIN
Registered member
4,111 messages
Posted on July, 09 2024 - 5:17 PM
Bonjour,
Qu'appelle tu "lier les lignes" ?
Un truc du type précède/succède (un chaînage) ou les regrouper dans une même sous famille ?

--
Il y a peut être plus simple, mais, ça tourne
Registered member
11 messages
Posted on July, 10 2024 - 8:30 AM
Bonjour

je souhairetais lier les 2 lignes oranges et faire une sauvegarde de la liaison des ID

merci
Message modified, July, 10 2024 - 8:35 AM
Registered member
11 messages
Posted on July, 10 2024 - 8:35 AM


Registered member
2,676 messages
Posted on July, 10 2024 - 8:52 AM
Pour faire ce que tu souhaites, il te faut un fichier stockant les ID sélectionnés et un ID de référence, comme lorsque l'on fait un lettrage en comptabilité.

Il te faut donc générer un ID unique pour relier ces fameux ID. Tu peux utiliser un UUID par exemple.

--
Cordialement,

Philippe SAINT-BERTIN
Registered member
11 messages
Posted on July, 10 2024 - 11:16 AM
Je suis arrivé à ceci mais cela ne fonctionne pas, je ne sais pas par quoi remplacer TableRecherche
Pouvez-vous m'aider svp?

bddImport est un xlsDocument
Sfichier est une chaîne
// Ouvre le sélecteur de fichiers
Sfichier = fSélecteur("", "", "Sélectionnez un fichier...", "Tous les fichiers (*.*)" + TAB + "*.*", "*.*")

//ouverture du fichier Excel
bddImport = xlsOuvre(Sfichier)

//On vide la table et réinitialise les variables
HSupprimeTout(Articles)
HRAZ(Articles)

//Choix de la feuille à importer
bddImport..Feuille = 1

// Utilisation d'une table de hachage pour stocker les combinaisons uniques de Marque et RefMarque
TableRef est un tableau associatif (dynamique de 8 octets)

// on parcours toute la feuille Excel à partir de la 2e ligne
POUR i = 2 À bddImport..NombreLigne
SI HLitRecherche(Articles, IdArticle, xlsDonnée(bddImport, i, 2)) = Faux ALORS
Articles.Entite = xlsDonnée(bddImport, i, 1)
Articles.IdArticle = xlsDonnée(bddImport, i, 2)
Articles.OwnNumber_IDunique_Alias = xlsDonnée(bddImport, i, 3)
Articles.Freq = xlsDonnée(bddImport, i, 4)
Articles.CodeArticle = xlsDonnée(bddImport, i, 5)
Articles.NomArticle = xlsDonnée(bddImport, i, 6)
Articles.Description = xlsDonnée(bddImport, i, 7)
Articles.Marque = xlsDonnée(bddImport, i, 8)
Articles.Marque_Corrigée = xlsDonnée(bddImport, i, 9)
Articles.Compare_Marque = xlsDonnée(bddImport, i, 10)
Articles.LibMarque = xlsDonnée(bddImport, i, 11)
Articles.RefMarque = xlsDonnée(bddImport, i, 12)
Articles.RefMarque_Corrigée = xlsDonnée(bddImport, i, 13)
Articles.Compare_Ref = xlsDonnée(bddImport, i, 14)
Articles.Cat1 = xlsDonnée(bddImport, i, 15)
Articles.Cat2 = xlsDonnée(bddImport, i, 16)
Articles.Cat3 = xlsDonnée(bddImport, i, 17)
Articles.Hauteur = xlsDonnée(bddImport, i, 18)
Articles.Largeur = xlsDonnée(bddImport, i, 19)
Articles.Profondeur = xlsDonnée(bddImport, i, 20)
Articles.Poids = xlsDonnée(bddImport, i, 21)
Articles.Image_filename = xlsDonnée(bddImport, i, 22)
Articles.CredateTime = xlsDonnée(bddImport, i, 23)
Articles.UpdDateTime = xlsDonnée(bddImport, i, 24)
Articles.DelDateTime = xlsDonnée(bddImport, i, 25)
Articles.PU_HT = xlsDonnée(bddImport, i, 26)

// Création d'une clé unique pour Marque et RefMarque
CléUnique est une chaîne = Articles.Marque + "-" + Articles.RefMarque

// Vérification de la combinaison Marque et RefMarque
SI TableRecherche(TableRef, CléUnique) ALORS
Articles.IDPivot = TableRef[CléUnique]
SINON
// Générer un nouvel IDPivot
IDPivotNouveau est un entier = HLitDernier(Articles) + 1
TableRef[CléUnique] = IDPivotNouveau
Articles.IDPivot = IDPivotNouveau
FIN

HAjoute(Articles)
FIN
FIN

xlsFerme(bddImport)
Remplir()
Registered member
698 messages
Posted on July, 10 2024 - 12:31 PM
Bonjour,
Vous pourriez faire quelque chose qui ressemble à ceci :
il faut une colonne Liaison (Entier , clé avec doublon) qui recevra le numéro de lien

MaRequete est une Source dede Données
HExécuteRequêteSQL(MaRequete , "SELECT MAX(FichierHFSQL.Liaison) AS maximum_Liaison FROM FichierHFSQL")

POUR TOUT LIGNELIGNE SELECTIONNEESELECTIONNEE DE MaTable
MaTable.Liaison = MaRequete .maximum_Liaison + 1
FIN


Il faut ensuite enregistrer dans le fichier HFSQL.
Attention si vous avez oublié de sélectionner une ligne, il ne faut plus utiliser ce code

La solution de Philippe SB est une autre solution efficace.
Cdlt

edit : POUR TOUT LIGNE SÉLECTIONNÉE DE MaTable
Message modified, July, 10 2024 - 12:32 PM
Registered member
11 messages
Posted on July, 10 2024 - 12:56 PM
merci je vais essayer cette solution

--
Merci de votre aide, je débute avec windev et junior en code :-)
Registered member
4,111 messages
Posted on July, 10 2024 - 7:13 PM
Ta boucle d'importation serait plus lisible avec un HImporteXLS. L'affectation du pivot pourrait se faire grâce à un trigger après sur HAjoute.
Dans ton HLitDernier, il serait bien de préciser la rubrique de parcours. Pars ailleurs, HLitDernier renvoie 0 ou 1 donc IDPivotNouveau vaut 1 ou 2. Cela correspond il à ce que tu désires.
--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué utilise l'option RTFM
Message modified, July, 10 2024 - 7:42 PM
Registered member
11 messages
Posted on July, 11 2024 - 10:18 AM
Bonjour merci pour cette réponse je n'ai jamais utilisé de trigger mais cela me semble être une bonne solution, effectivement j'ai regardé pour le HImporteXLS, ce que j'ai fait c'est que je ne sais pas quel fichier l'utilisateur veut charger, d'où mon choix qui n'est pas le meilleur je pense.
donc je vais me renseigner pour le trigger, à savoir comment l'utiliser etc...
Registered member
4,111 messages
Posted on July, 11 2024 - 9:09 PM
Jay a écrit :
...ce que j'ai fait c'est que je ne sais pas quel fichier l'utilisateur ...

Où est le problème ? Pour déclarer ton xlsDocument tu utilises une chaine issue de fSélecteur. Le paramètre concernant le chemin du classeur dans HImporteXLS est lui aussi une chaine ...

--
Il y a peut être plus simple, mais, ça tourne