PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Table vers fichier
Table vers fichier
Débuté par Saliou NDIAYE, 04 avr. 2020 15:08 - 19 réponses
Membre enregistré
12 messages
Posté le 04 avril 2020 - 15:08
Bonjour, je suis nouveau sur windev, je développe une application et j'ai une table et un fichier base de données HFSQL.
Ma table a deux colonne Désignation et prix. Mon fichier a des colonnes suivante: prenom, nom, designation1, designation2, designation3, prix, total.
Je remplis ma table avec un combo et un champs Saisie (le combo c'est desigantion et saisie le prix)
Je voudrais remplir le fichier base avec le table si un client achete 2 articles je remplis le tableau avec les deux articles et j'enregistre dans la base dans designation1 et designation2, si le client achete un article il est enregistrer dans designation2 meme si les autres colonne designation sont vide.
Merci pour votre aide.
Membre enregistré
4 328 messages
Posté le 04 avril 2020 - 17:12
Bonjour,
TU fais une grosse erreur de conception.
Les tables clients et produits doivent êtres séparés.
Avant de te lancer dans le développement je te conseilles de te documenter sur la conception des bases des données.

--
Il y a peut être plus simple, mais, ça tourne
Posté le 05 avril 2020 - 00:25
Bonsoir Voroltinquo,
Merci pour la réponse rapide.
Au faite je pense que vous m'avez pas bien compris, j'ai dit j'ai un fichier de base de données avec des colonnes comme nom, designation1, designation2, designation3, prix, total.
cette base je dois la remplir à partir d'une table qui a deux colonnes Designation et Prix.
Maintenant quand un client se presente et qu'il achete un article, l'article doit etre enregistrer dans designation1
s'il achete 2 articles les deux articles doivent etre enregistré dans designation1 et designation2 etc...
Posté le 05 avril 2020 - 00:40
Bonsoir Voroltinquo, merci pour votre réponse au faite je pense que vous m'avez pas bien compris,
j'ai une table avec deux colonnes (Designation et Prix) que je dois remplir et une base de données avec des colonnes (nom, designation1, designation2, designation3, prix)
Une fois que je remplis seulement la premiere ligne du tableau de Designation et Prix ces infos doivent venir enregistrer dans la bases au niveau de designation1 et prix, si je remplis les deux premiere ligne du tableau que ca s'enregistre dans designation1, designation2 et prix.

voici mon code

nNumIndice est un entier
POUR nNumIndice = 1 A TableOccurrence(TABLE_zale)

SI TABLE_zale..Vide = Faux
//HLitPremier(patients,IDpatients)
TANTQUE PAS HEnDehors() = Faux
patients.prestaton1 = TABLE_zale.COL_SansNom1[nNumIndice]
patients.prestation2 = TABLE_zale.COL_SansNom1[nNumIndice + 1]
FIN
// HLitSuivant(patients,IDpatients)

FIN
HAjoute(patients)
RAZ()
FIN

Mais j'ai cette erreur:

Vous avez appelé l'opérateur [] sur le champ TABLE_zale.
L'indice spécifié [2] est invalide.
Les valeurs valides sont comprises entre 1 et 1 (inclus).
Posté le 05 avril 2020 - 00:59
Merci pour votre réponse Voroltinquo,
Voici mon code et l'erreur que j'ai en bas

nNumIndice est un entier
POUR nNumIndice = 1 A TableOccurrence(TABLE_zale)
patients.prestaton1 = TABLE_zale.COL_SansNom1[nNumIndice]
patients.prestation2 = TABLE_zale.COL_SansNom1[nNumIndice + 1]

HAjoute(patients)
RAZ()
FIN
FIN

j'ai cette erreur

Vous avez appelé l'opérateur [] sur le champ TABLE_zale.
L'indice spécifié [2] est invalide.
Les valeurs valides sont comprises entre 1 et 1 (inclus).
Posté le 05 avril 2020 - 01:17
Voici mon code et l'erreur que j'ai
nNumIndice est un entier
POUR nNumIndice = 1 A TableOccurrence(TABLE_zale)
SI TABLE_zale..Vide = Faux
patients.prestaton1 = TABLE_zale.COL_SansNom1[nNumIndice]
patients.prestation2 = TABLE_zale.COL_SansNom1[nNumIndice + 1]

RAZ()
FIN
FIN

Erreur:

Vous avez appelé l'opérateur [] sur le champ TABLE_zale.
L'indice spécifié [2] est invalide.
Les valeurs valides sont comprises entre 1 et 1 (inclus).
Membre enregistré
6 messages
Posté le 05 avril 2020 - 08:24
Bonjour,
En fait, tu veux concevoir une gestion commerciale, pour cela, il te faut au minimum 4 tables:
- table des clients
- table de produits / articles
- table des livraison où chaque enregistrement va contenir le détail de la vente
- table facture où chaque enregistrement va contenir la synthèse de la vente
Etc...
Bon courage

--
Rogers
Posté le 05 avril 2020 - 17:14
Merci Roger,
Ma question est la suivante:
J'ai une base qui a des colonnes suivantes: Prenom, Designation1, Designation2, Designation3 et prix et une table quand je remplie la table qui a deux colonnes: "Dasignations" et "Prix" je voudrais que ces lignes s'enregistrent dans la base a savoir si je met dans la table une designation et un prix que ca s'enregistre dans la base au niveau de designation1. si c'est deux articles que ca s'enregistrent dans designation1 et designation2.
Merci
Posté le 05 avril 2020 - 17:14
Voila j'ai une table avec deux colonnes: "Designation" et "Prix" et une fichier HFSQL qui a "Prenom", "Designation1", "Designation2", "Designation3", et "Prix".
Un client qui achete un article je remplie la table et j'enregistre les données doivent aller dans le fichier dans "Designation1" et "Prix".
Si un client achete 2 articles les articles irons dans "Designation1", "Designation2" et "Prix".
Le probleme c'est que si je remplis seulement "Designation1 sans "Designation2", "Designation3" j'ai une erreur.
Merci.
Membre enregistré
6 messages
Posté le 05 avril 2020 - 23:42
Bonsoir,
Remplace
POUR nNumIndice = 1 A TableOccurrence(TABLE_zale)
Par
POUR TableOccurrence(TABLE_Zale) = nNumIndice _A_ 1 PAS -1

Regarde dans le forum
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/190318-enregistrer-table-dans-fichier/read.awp

Bon courage

--
Rogers
Posté le 06 avril 2020 - 23:27
Bonsoir Roger j'ai mis le code mais j'ai une erreur suyivante:

Vous avez appelé l'opérateur [] sur le champ TABLE_zale.
L'indice spécifié [2] est invalide.

Voici le code:
nNumIndice est un entier
POUR nNumIndice = TableOccurrence(TABLE_zale) _A_ 1 PAS -1
produit.Designation1 = TABLE_zale.COL_SansNom1[nNumIndice]
produit.Designation2 = TABLE_zale.COL_SansNom1[nNumIndice + 1]
HAjoute(produit)
RAZ()
FIN

Si la colonne de la table est remplie je voudrais qu'elle s'enregistre dans designation1.Si les deux premieres lignes de la premiere colonne est remplies qu'elles s'enregistrent dans designation1 et designation2.
Merci.
Posté le 06 avril 2020 - 23:36







Membre enregistré
6 messages
Posté le 07 avril 2020 - 10:18
Bonjour Saliou,

Ton calcul d'indice n'est pas bon, incrémente de 1

patients.prestaton1 = TABLE_zale.COL_SansNom1[nNumIndice]
nNumIndice++
patients.prestation2 = TABLE_zale.COL_SansNom1[nNumIndice ]

OU
patients.prestation2 = TABLE_zale.COL_SansNom1[nNumIndice ++]
OU
patients.prestation2 = TABLE_zale.COL_SansNom1[nNumIndice + nNumIndice + 1]

Bon courage

--
Rogers
Posté le 07 avril 2020 - 13:50
Bonjour Rogers,
Merci pour vos réponses rapide et intéressante.
Le code génère une erreur suivante:
Vous avez appelé l'opérateur [] sur le champ TABLE_zale.
L'indice spécifié [2] est invalide.

Bon j'ai fais des captures d’écrans pour que vous compreniez bien ce que je veux en réalité.












Membre enregistré
4 328 messages
Posté le 07 avril 2020 - 20:26
Tu essayes simplement d'affecter une donnée qui n'existe pas.
Dans ton cas, tu essaye sans doute de faire une affectation dans prestation 2 alors qu'il n'y a qu'une seule prestation..
Comment vas tu faire s'il y a 7 prestations ?

--
Il y a peut être plus simple, mais, ça tourne
Posté le 08 avril 2020 - 14:58
bonjour Voroltinquo peux-tu m'aider à trouver une solution?
La je tourne en rond depuis un mois.
Merci
Membre enregistré
4 328 messages
Posté le 08 avril 2020 - 17:58
Bonjour,
Je t'ai déjà dit de commencer par revoir la conception de ta base.
Pour plus d'infos : https://sqlpro.developpez.com/cours/modelisation/merise/ pour commencer, et http://georges.gardarin.free.fr/Livre_BD_Contenu/XX-TotalBD.pdf en particulier le chapitre XVII. Après avoir lu cela tu verra que ta base n'est pas normalisée car elle ne respecte pas la 1° forme normale.
Une relation est en 1NF si elle possède au moins une clé et si tous ses attributs sont atomiques.
Un attribut est atomique si il ne contient qu'une seule valeur pour un tuple donné, et donc s'il ne regroupe pas un ensemble de plusieurs valeurs

Ce n'est pas le cas chez toi car l'attribut prestation peut contenir jusque 6 valeurs

--
Il y a peut être plus simple, mais, ça tourne
Posté le 08 avril 2020 - 21:58
Bon je sais que je vous saoul avec mes questions. Je m'en excuse.
Il se trouve que c'est une applications pour un hôpital.
Un patient peut se présenter et ne faire qu'une prestation dans ce cas cette prestation va s'enregistrer dans prestation1.
Un autre patient peut aller au laboratoire et faire des analyses(glycémie à jeun, calcémie, Aghbs, NFS) qui peut etre grouper en 4 prestations du coup c'est 4 prestations vont s'enregistrer dans prestation1, prestation2, prestation3, prestation4 etc....
C'est ce que je veux faire en réalité.
Membre enregistré
4 328 messages
Posté le 09 avril 2020 - 07:57
Au niveau bases de données relationnelles telles que HFSQL, Postgre, ORACLE ... , Prestation1, prestation2, prestation3 prestationx, c'est la même chose c'est une prestation. Donc cet attribut ne doit apparaître qu'une seule fois dans une entité.
De même, le service n'a rien à voir avec le patient, mais avec la prestation. Si un patient passe par plusieurs service, comment faire...
Comme l'expliquait Rogers, il faut scinder la table Patient en plusieurs tables.
Les données à afficher ou à enregistrer le sont grâce à des requêtes.
Ton MLD peut ressembler à ça :




--
Il y a peut être plus simple, mais, ça tourne
Posté le 09 avril 2020 - 21:59
Merci, je vais reprendre ma base de données.
Juste une dernière question.
J'ai déjà réaliser un état pour les tickets de patient mais je voudrais le générer en deux (02) exemplaires comment faire.
Merci.