Re: Demande de Conseils/Astuces pour Table inversée (Colonne=enregistrement, Ligne=Champ)

Posté par drcharly93 le 12/11/2004 0:25:10
Bonjour Juliane,

Oui, je pense que l'utilisation d'une table mémoire soit surement la meilleure solution à envisager.

L'idée
Créer une requête standart pour alimenter une Source de données avec les données à manipuler.

Cette source de données devra contenir l'identifiant des enregistrements à manipuler suivies des autres données nécessaires

Vous devrez donc créer une table mémoire qui contiendra dans la premiere colonne les identifiants des enregistrements. cette colonne sera bien sûre invisible.

Méthode :
en immaginant que le résultat de la requête soit stockée dans une source de données nommée Rs
La table mémoire : TableM

Rs est une source de donnees
Sql est une chaine

Sql = "SELECT FicIdent AS Ident, etc..."
SI PAS HExecuteRequeteSQL(Rs,HRequeteDefaut,Sql) Alors
 Erreur(HErreurInfo()
 Retour
FIN 
TableSupprimeTout(TableM)
Ajoute(TableM,"ColIdent",Rs,"Ident",Vrai)
//ColIdent nom de la colonne Identifiant
//Ident Nom du champ de la source de donnees
Ajoute(TableM,"ColTotalBilan,Rs,<Total Bilan>)
Ajoute(TableM,"ColCA",Rs,<Chiffre d'affaire>)
//Etc..pour chaque colonne
//pour chaque colonne à alimenter

Code de la procédure Ajoute()
PROCEDURE Ajoute(pTable,pColonneNom,pRs,pChamp,pCreeLigne=Faux)
i est un entier
HLitPremier(Rs)
 TantQue pas HEndehors(Rs)
  i++ //pour se déplacer dans la table
  SI pCreeLigne alors TableAjoute({pTable}..Nom)  
  pColonneNom[i] = {Rs+"."+pChamp}
 HLitSuivant(Rs)
Fin

Voila, tout est saisie à la volée et non testé pas le temp
pColonneNom[i] = {Rs+"."+pChamp}, j'ai un doute???

A chaque changement de colonne:
il faut rechercher l'enregistrement correspondant àla ligne via ColIdent
HlitRecherche(<Fichier>,<Identifant enreg>,ColIdent[TableM])
Si HTrouve() alors
 SI PAS HModifie(<Fichier>) alors
  // Traitement de l'erreur
 FIN
Fin 

Bon, c'est déjà un début.

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=12&topic_id=1455&post_id=5989