(1) 2 »


[RESOLU]Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
Bon j'ai beaucoup hésité à poser mes questions car elles doivent être vraiment facile pour vous mais pour moi, elle me pose problème et je ne trouve pas mes réponses dans l'aide donc je me permets de les poser. Ce sont donc des questions qui concerne une table :

1-J'aimerai faire la somme de tous les résultats d'une colonne afin de la mettre dans un champ. Est ce qu'il faut que je le fasse à la main ou il y a une fonction spéciale? Merci de me donner un exemple de méthodes dans le cas de la deuxième situation.

2-Si dans une table qui contient des informations en relations avec un fichier, si j'utilise la fonction Hajoute(), qu'est ce qui va s'enregister : tout le contenus de la table ou uniquement la ligne sélectionnée dans la table. Car moi c'est toute la table que je veux enregistrer.

Voilà, je vous remercie d'avance.

Contribution le : 13/02/2004 14:55
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Salut AngelMJ,

1-En WinDev 7.x il est nécessaire de faire le calcul soit même.
Cependant il diffère selon que l'on utilise une table fichier ou bien une table mémoire.

Pour une table mémoire :
sTable est une chaine = <Ma table>
sChampsAComptabiliser est une chaine = <Nom de la colonne>
i est un entier
nTotal est un reel
Nb est un entier = {sTable}..Occurrence

SI Nb = 0 Alors RETOUR

POUR i = 1 à Nb
 nTotal += {sChampsAComptabiliser}[i]
FIN
INFO("Montant de la colonne : " + nTotal)


Si il s'agit d'une table fichier il est préférable d'utiliser une requete SQL pour connaître le montant
Rs est une Source de Donnees
Sql est une chaine

Sql = "SELECT SUM(<Nom de ma rubrique>) AS TOTAL FROM <Nom du fichier>

SI PAS HExecuteRequeteSql(Rs,HrequeteDefaut,Sql) ALORS
 ERREUR(HErreurInfo())
 RETOUR
FIN
HlitPremier(Rs)
Info("Le montant total est : " + Rs.TOTAL)


2-Pour enregistrer des information saisie dans une table qui est en relation avec un fichier il ne faut pas utiliser HAjoute mais plutot TableEnregistre()
La fonction Déterminera il il s'agit d'une modification ou bien d'un ajout de données.

Contribution le : 13/02/2004 16:46
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
Au niveau de la somme dans la table, mon cas est une table mémoire que l'utilisateur remplit lui même.

Je rencontre une erreur à partir de cette ligne :

Nb est un entier = {sTable}..Occurrence


Le message d'erreur est le suivant :

Erreur à la ligne 8 du traitement Sortie d'une ligne de Tab_Détail.
L'élément '2' est inconnu.

Sauf erreur de ma part, il se peut que je n'ai pas placé l'évènement au bon endroit. Par logique, je l'ai mis dans l'évènement "Sortie de {MaTable}".

A cela, j'ajoute une autre question sur un autre problème que j'ai rencontré en réalisant ma fenêtre :

J'aimerai savoir comment ajouter une donnée dans une colonne de ma table à toutes les lignes de cette dernière.

Merci d'avance.

Contribution le : 16/02/2004 09:20
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Angel
Quand j'écris:
sTable est une Chaine =
Il faut remplacer par le nom de ta table.

Je ne saisi pas très bien ta deuxième question!
En admettant que la colonne existe déjà dans la table et qu'elle soit reliée au fichier
Le principe reste le même que pour le calcul d'une colonne.
Pour chaque lignes via une boucle on va modifier la valeur de la colonne désirée puis on effectue un TableEnregistre()

Citation :

Extrait de l'aide sur TableEnregistre:
Modifie ou ajoute l'enregistrement associé à la ligne en cours dans la table fichier. L'enregistrement est mis à jour dans le fichier lié à la table fichier.


Contribution le : 16/02/2004 10:48
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
Bien sûr que j'ai remplacé les informations par les miennes. Voici mon code tel qu'il l'est avec mes infos :

//Création d'une requête permettant de connaître
//le montant total du devis
sTable est une chaîne = Frm_Devis.Tab_Détail
sChampsAComptabiliser est une chaîne = Frm_Devis.Tab_Détail.Prix_Total
i est un entier
nTotal est un réel
Nb est un entier = {sTable}..Occurrence
SI Nb = 0 ALORS 
	RETOUR
	POUR i = 1 A Nb 
		//+= équivalent de nTotal=nTotal+...	
		nTotal += {sChampsAComptabiliser}[i]
	FIN
	Frm_Devis.Zs_MontantTot=nTotal
FIN


Pour l'autre question, tu as raison : le mieux et de le faire avant l'insertion. j'essaierai dès que mon soucis de somme sera réglé.

Contribution le : 16/02/2004 10:59
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Essai plutot:
Remplace
sTable est une chaîne = Frm_Devis.Tab_Détail
Par
sTable est une chaîne = "Tab_Détail"
//On attent une chaine qui est le nom de la table
Remplace
sChampsAComptabiliser est une chaîne = Frm_Devis.Tab_Détail.Prix_Total
Par
sChampsAComptabiliser est une chaîne = "Prix_Total"
En effet la syntaxe
{sTable}..Occurrence
sTable doit être le nom de la table sous forme de chaine.

Contribution le : 16/02/2004 12:12
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
Okay ça marche. le problème venait de là : le logiciel voulait des chaines :p

par contre, comme je voulais mettre le résultat dans une zone de saisie, il ne fallait pas oublié de changer son type car en le laissant en chaine, les chiffres ne s'aditionnaient pas mais se concaténer :p

merci pour ton aide Doc

Contribution le : 16/02/2004 12:44
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Anonyme
Oops! Il y a un autre problème que je viens juste de rencontrer : les informations contenus dans ma table doivent être enregistrés dans un fichier.

Ce n'est pas la fonction TableAjoute() qui permet de faire cela?

De plus, impossible d'attribuer une liaison entre les différentes lignes et les informations de la table.

J'ai donc eu une idée :

prendre une par une chaque ligne du tableau, les mettre dans des variables intermédiaires puis les ajouter au fur et à mesure dans le fichier.

Est ce que c'est une bonne idée ou il y a plus simple?

Contribution le : 16/02/2004 15:22
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
Désolé, c'est moi l'anonyme...

je n'ai pas vu que j'étais déconnecté...

Contribution le : 16/02/2004 15:25
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Animateur WDF
Inscrit:
05/06/2003 14:23
De Québec
Post(s): 511
As tu essaye avec une table fichier ???

Ca l'avantage d'etre pointe sur ton fichier et d'ecrire directement.

a+++

Contribution le : 16/02/2004 16:52
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Si il s'agit d'une table fichier alors il faut utiliser la fonction TableEnregistre()
Si tu Utilise un table mémoire alors il te faut pouvoir pointer sur l'enregistrement du fichier qui correspond à la ligne de la table via la fonction HLitRecherche()
Pour cela il est interressant lors du remplissage de la table d'utiliser une colone invisible qui stockera l'identifiant unique du fichier afin de facilité la recherche à partir de cette valeur.

Ensuite il ne te reste plus qu'a affecter directement les rubrique de ton fichier au valeur contenu dans ta ligne
du style
Indice est un entier
bOk est un booleen
Indice = ListeSelect(<MaTable>)
bOk = HLitrecherche(<MonFichier>,<Identifiant>,<ColonneInvisible>[Indice])
SI bOk = Faux ALORS HRAZ(<MonFichier>
<MonFichier>.<Rubrique1> = <MaColonne1>[Indice]
<MonFichier>.<Rubrique2> = <MaColonne2>[Indice]
SI bOk ALORS 
 HModifie(<MonFichier>)
SINON
 HAjoute(<MonFichier>)
FIN


Contribution le : 16/02/2004 17:05
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
Okay... bon j'ai réussi à établir un code final pour mon cas... mais j'ai chaque fois un message d'erreur concernant l'intégrité de mes données. Pourtant, tout mes champs renseignent les différentes infos des fichiers.

Voici donc le code de mon bouton OK, s'il y a des soucis dedans, c'est sans doute la source de mes problèmes.

PROCEDURE Ok_F_Devis()

//On vérifie que les champs sont bien remplis
SI (Frm_Devis.Zs_Date>DateDuJour()) OU (Frm_Devis.Zs_Date="") ALORS
	Info("La date du devis est erronée.")
	RepriseSaisie(Frm_Devis.Zs_Date)
	RETOUR
FIN
SI Frm_Devis.Zs_MontantTot=0 ALORS
	Info("La devis doit avoir obligatoirement un montant.")
	RepriseSaisie(Frm_Devis.Tab_Détail)
	RETOUR
FIN
//Au cas où, si il n'y a pas de numéro de RDV
SI Frm_Devis.Zs_IDRDV="" ALORS
	Info("Une erreur dans la réalisation du Devis est survenu. Le formulaire va se fermer.")
	Ferme(Frm_Devis)
FIN
//Dans ce cas, tout est bon donc on enregistre le devis
HAjoute(DEVIS)
//On récupère le numéro du devis est on le met dans chaque ligne
//du détail du devis
HLitDernier(DEVIS)
numdev est un entier = DEVIS.IDDEVIS
//Maintenant, on va prendre chaque ligne de la table
//Et on va les ajouter dans le fichier LIGNEDEVIS
nbocc est un entier=Frm_Devis.Tab_Détail..Occurrence
i est un entier
//On fait l'affectation pour chaque ligne dans la table
POUR i = 1 A nbocc
	//On affecte les colonnes aux différentes infos de LIGNEDEVIS
	LIGNEDEVIS.IDDEVIS=numdev
	LIGNEDEVIS.PrixTotalLigne=Frm_Devis.Tab_Détail.Prix_Total[i]
	LIGNEDEVIS.PuLigne=Frm_Devis.Tab_Détail.PU[i]
	LIGNEDEVIS.QteLigne=Frm_Devis.Tab_Détail.Quantité[i]
	LIGNEDEVIS.DesignationLigne=Frm_Devis.Tab_Détail.Designation[i]
	LIGNEDEVIS.UniteLigne=Frm_Devis.Tab_Détail.Unité[i]
	//On ajoute les infos dans LIGNDEVIS
	HAjoute(LIGNEDEVIS)
FIN
Ferme(Frm_Devis)


Merci.

Contribution le : 17/02/2004 09:46
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Angel

Pour facilité la recherche de l'erreur qui selon tes dire serait une erreur d'intégrité rajoute ces quelques lignes au debut du code
QUAND EXCEPTION
 ERREUR(HErreurIntegrité())
 RETOUR
FIN

Cela aura pour but d'afficher un message clair sur l'erreur d'intégrité et de mensionner quelles sont les rubriques en causes ainsi que leurs cardinalités

Dans ton analyse, il est important de regarder que ton devis puisse etre ajouté sans qu'il y aient de lignes de devis en relations(1-0), puisque tu les ajoutes après avoir ajouté ton devis.(Un devis n'a pas forcement de lignes) cela peut paraitre illogique mais de la facon dont tu le programme c'est ainsi qu'il te faut gerer la relation.

Contribution le : 17/02/2004 10:36
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Anonyme
En fait il faut PARCOURIR la Table, donc i doit correspondre
à 1 N° de Ligne précis de la table.
Personnellement j'utilise:
TableSelectplus(MaTable,i)
Mais il faut que la table soit en sélection simple, dans l'onglet "Détail" de la description de la table.
Ainsi pour ta boucle on aurait:
POUR i = 1 A nbocc	
	//On affecte les colonnes aux différentes infos de LIGNEDEVIS	
	TableSelectPlus(Frm_Devis.Tab_Détail,i)
	LIGNEDEVIS.IDDEVIS=numdev	
	LIGNEDEVIS.PrixTotalLigne=Frm_Devis.Tab_Détail.Prix_Total[i]
	LIGNEDEVIS.PuLigne=Frm_Devis.Tab_Détail.PU[i]
	LIGNEDEVIS.QteLigne=Frm_Devis.Tab_Détail.Quantité[i]
	LIGNEDEVIS.DesignationLigne=Frm_Devis.Tab_Détail.Designation[i]
	LIGNEDEVIS.UniteLigne=Frm_Devis.Tab_Détail.Unité[i]
	//On ajoute les infos dans LIGNDEVIS	
	HAjoute(LIGNEDEVIS)
FIN

Contribution le : 17/02/2004 10:42
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
C'est ce que j'ai pensé au début mai sayant rencontré ce problème à de nombreuses reprises, j'ai presque mis du 0,n partout. Donc mon erreur ne vient pas de là.

Ou faut-il que je mette le code que tu me proposes? j'ai essayé de le mettre à cpoté de mon hajoute() mais il me sort un drôle de message (Il me marque "1" O_o').

merci encore de m'aider sur ce problème Doc :)

Contribution le : 17/02/2004 10:44
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Anonyme
Ah oui, l'erreur est donc due au fait
que tu ajoutes toujours la première ligne de la table,
d'où erreur d'intégrité.

Contribution le : 17/02/2004 10:45
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Anonyme
Ah oui, l'erreur est donc due au fait
que tu ajoutes toujours la première ligne de la table,
d'où erreur d'intégrité.

Contribution le : 17/02/2004 10:45
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Anonyme
Le QUAND EXCEPTION se place avant la fonction qui risque de générer une erreur.
Si tu te mets en mode débogage, tu verras que le programme "revient" sur QUAND EXCEPTION.
Pour plus d'info, l'aide en ligne est très claire.

Contribution le : 17/02/2004 10:49
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Tu peut ajouter le code du QUAND EXCEPTION en debut de code de procédure, c'est juste pour récuperer le message d'erreur complet sur l'erreur d'intégrité.
Il est d'ailleurs préférable que tu parcours ce code en mode débuggage afin de pouvoir récuperer le message pour nous le communiquer.
Je pense qu'avec ce message il sera plus facile de t'aider.

Contribution le : 17/02/2004 10:59
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Diverses questions concernant les Tables
Utilisateur WDF
Inscrit:
15/01/2004 11:33
De Etoile (26)
Post(s): 70
Bon... j'ai trouvé où est mon soucis...

En fait, c'est parce que DEVIS est relié avec une cardinalité 1,1 avec un autre fichier. Le truc c'est que je pensais qu'il était pris car j'exportais l'ID du fichier dans un champ caché. Mai sle problème n'est pas que là :

En fait, tous les champs qui sont censés être en relation avec une des rubriques de la table DEVIS mais au moment du Hajoute() ben en fait le programme ne prend rien o_O'

Moi je pensais que juste le Hajoute() suffisait à enregistrer les infos si les champs contenaient une relation avec le fichier...

Je vais devoir passer par une méthode du genre :

DEVIS.DateDevis=Frm_Devis.Zs_Date
...
...
hajoute(DEVIS)

?

Contribution le : 17/02/2004 11:35
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 »




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2