PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Table vers fichier
Table vers fichier
Iniciado por Saliou NDIAYE, abr., 04 2020 3:08 PM - 19 respostas
Membro registado
12 mensagems
Publicado em abril, 04 2020 - 3:08 PM
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.
Membro registado
3.878 mensagems
Popularité : +227 (347 votes)
Publicado em abril, 04 2020 - 5:12 PM
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
Publicado em abril, 05 2020 - 12:25 AM
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...
Publicado em abril, 05 2020 - 12:40 AM
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).
Publicado em abril, 05 2020 - 12:59 AM
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).
Publicado em abril, 05 2020 - 1:17 AM
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).
Membro registado
6 mensagems
Publicado em abril, 05 2020 - 8:24 AM
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
Publicado em abril, 05 2020 - 5:14 PM
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
Publicado em abril, 05 2020 - 5:14 PM
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.
Membro registado
6 mensagems
Publicado em abril, 05 2020 - 11:42 PM
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
Publicado em abril, 06 2020 - 11:27 PM
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.
Publicado em abril, 06 2020 - 11:36 PM







Membro registado
6 mensagems
Publicado em abril, 07 2020 - 10:18 AM
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
Publicado em abril, 07 2020 - 1:50 PM
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é.












Membro registado
3.878 mensagems
Popularité : +227 (347 votes)
Publicado em abril, 07 2020 - 8:26 PM
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
Publicado em abril, 08 2020 - 2:58 PM
bonjour Voroltinquo peux-tu m'aider à trouver une solution?
La je tourne en rond depuis un mois.
Merci
Membro registado
3.878 mensagems
Popularité : +227 (347 votes)
Publicado em abril, 08 2020 - 5:58 PM
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
Publicado em abril, 08 2020 - 9:58 PM
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é.
Membro registado
3.878 mensagems
Popularité : +227 (347 votes)
Publicado em abril, 09 2020 - 7:57 AM
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
Publicado em abril, 09 2020 - 9:59 PM
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.