PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Problème création fichier dynamique
Problème création fichier dynamique
Started by Melissa MOUHEB, Nov., 28 2023 4:27 PM - 9 replies
Registered member
29 messages
Posted on November, 28 2023 - 4:27 PM
bonjour,

J'essaye à la création d'un nouveau client de lui créer un fichier dans l'analyse.
J'ai suivi l'aide en ligne de la fonction Hcréation mais cela me ressort une erreur.

Si quelqu'un à une idée du problème ... je suis toute ouïe :)


ci dessous le code :
Procedure Création_BDD_Client_Kiosks(IdEntreprise est un entier)

IdInterne est un entier = IdEntreprise

UnFichier est une Description dede Fichier
UneRubrique est une Description dede Rubrique
Client est une Source dede Données

// Description du fichier de données "Client"
UnFichier.Nom = "BDD_VIRTUAL_DEVICES_" + IdInterne
UnFichier.Type = hFichierNormal
UnFichier.CryptageFic = hCryptageStandard

// Description de la rubrique "IdTwelve"
UneRubrique.Nom = "TWELVE_ID_VirtualDevice"
UneRubrique.Type = hRubEntier4
UneRubrique.Taille = 4
UneRubrique.TypeClé = hCléDoublon
HDécritRubrique(UnFichier, UneRubrique)

// Description de la rubrique "Prénom"
UneRubrique.Nom = "TWELVE_NomVirtualDevice"
UneRubrique.Type = hRubTexte
UneRubrique.Taille = 40
HDécritRubrique(UnFichier, UneRubrique)

// Valide la description du fichier de données
HDécritFichier(UnFichier)

// Création du fichier de données Client (reconnu car déclaré comme source de données)
HCreation(Client)



Ainsi que l'erreur :

Vous avez appelé la fonction 'HCréation'.
La source de données <_SOURCE_Client_1> n'est pas initialisée.
- S'il s'agit d'un fichier de données, le fichier n'a pas été trouvé dans l'analyse <C:\Mes Projets\AGP_RECUP\AGP_RECUP.wdd> ou n'a pas été décrit avec les fonctions HDéclare / HDéclareExterne.
- S'il s'agit d'une requête ou d'une vue, l'exécution a peut-être échoué.
Pour récupérer l'erreur correspondante, testez le résultat des fonctions HExécuteRequête / HExécuteRequêteSQL / HCréeVue.

Pile des appels :
Procédure locale Création_BDD_Client_Kiosks (FEN_Ajout_clients.PROCEDURE.Création_BDD_Client_Kiosks), ligne 43
Clic sur BTN_Ajouter (FEN_Ajout_clients.BTN_Ajouter), ligne 11



Merci d'avance
Registered member
1,921 messages
Popularité : +53 (65 votes)
Posted on November, 28 2023 - 5:07 PM
Bonjour,

Dans l'exemple que vous avez copié :
Client est une Source dede Données

// Description du fichier de données "Client"
UnFichier.Nom = "Client"

La Source de données porte le nom du Fichier.

Dans la mesure où ici votre nom de fichier n'est pas fixe ("BDD_VIRTUAL_DEVICES_" + IdInterne), je ne sais pas trop comment s'en sortir...

>> Les paramètres Source de données et UnFichier.Nom doivent être identiques.
Regardez les autres paramètres de HDECRITFICHIER() pour répondre à votre besoin.

--
Bon dev,
Jean-Pierre
Message modified, November, 28 2023 - 5:13 PM
Registered member
3,810 messages
Popularité : +227 (347 votes)
Posted on November, 28 2023 - 5:37 PM
Bonjour,
Dans ton cas, dans la mesure ou la SD a un nom différent du nom de fichier, il faut utiliser la 2° syntaxe
...
HDécritFichier(Client,UnFichier)
...

La SD (Client) est alors initialisée avec la description de fichier.

Attention : Pour utiliser cette syntaxe, il est nécessaire d'utiliser une source de données "automatique". (Description du projet/Compilation)
--
Il y a peut être plus simple, mais, ça tourne
Message modified, November, 28 2023 - 5:40 PM
Registered member
29 messages
Posted on December, 01 2023 - 12:47 AM
Voroltinquo a écrit :
Bonjour,
Dans ton cas, dans la mesure ou la SD a un nom différent du nom de fichier, il faut utiliser la 2° syntaxe
...
HDécritFichier(Client,UnFichier)
...

La SD (Client) est alors initialisée avec la description de fichier.

Attention : Pour utiliser cette syntaxe, il est nécessaire d'utiliser une source de données "automatique". (Description du projet/Compilation)
--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 28 novembre 2023 - 17:40




Bonsoir, la création fonctionne bien avec cette ligne, mais du coup le fichier (présent dans le répertoire de Exe de l'appli et sur le serveur) n'apparait pas dans l'analyse et donc je ne peut écrire dedans.

Je pourrais passer par HdéclareExterne mais du coup il faudrait que j'utilise une boucle d'indirection (seule solution que je vois)
y a t-il une façon automatique d'ajouter le fichier créé à l'analyse ?
je suppose qu'il me manque quelque chose, mais je ne trouve pas quoi malgré des heures de recherches

Merci
Registered member
3,810 messages
Popularité : +227 (347 votes)
Posted on December, 01 2023 - 8:08 AM
Pour manipuler le fichier, il faut utiliser la source de données.

--
Il y a peut être plus simple, mais, ça tourne
Registered member
3,810 messages
Popularité : +227 (347 votes)
Posted on December, 01 2023 - 1:51 PM
Ton problème d'utilisation des tables créées vient aussi d'une erreur de modélisation.
Tu crées n Tables avec la même structures, analytiquement, c'est la même entité.
L'idée est donc de créer, dans ton MLD, une relation entre ton entité BDD_VIRTUAL_DEVICES et Entreprise avec une FK pointant sur Entreprise.

--
Il y a peut être plus simple, mais, ça tourne
Message modified, December, 01 2023 - 1:54 PM
Registered member
29 messages
Posted on December, 01 2023 - 4:53 PM
Salut Voroltinquo,

Tout d'abord merci pour ton retour.
La FK est bien présente dans mon entité BDD_Virtual_Devices.
Je souhaitait créer des fichiers distincts car ce fichier se remplit avec une récupération de données provenant d'une API qui à lieu toutes les minutes.
Apres plusieurs tests, j'ai remarqué que ce qui prenait le plus de temps était la ré indexation du fichier (écriture en Hécrit pas Hajoute pour éviter la lenteur).

Comme j'ai une 100aine de clients pour à peu près 4Mlignes (à date, qui ne fait qu'augmenter), je me suis dit qu'il était peut être plus judicieux d'utiliser un fichier par client afin de ne pas avoir à réindexer le fichier entier lorsque je récupère les données d'un seul client.

Je ne sais pas si c'est assez clair comme explications ...

Merci
Registered member
26 messages
Posted on December, 01 2023 - 9:18 PM
Un fichier par client c'est galère à gérer, mieux vaut utiliser un seul fichier avec une rubrique client et inclure celle ci dans les clés que tu utilises.
Si hajoute prend trop de temps c'est souvent qu'il y a trop de rubriques indexées, en utilisant hécrit tu repousses juste le problème à plus tard.
Posted on December, 02 2023 - 1:50 PM
Bonjour
Peut-être créer un répertoire par client, et contenant la table concernée.
Du coup, même structure, à utiliser en jonglant avec HChangeRep.
(A voir si c'est réalisable, je n'ai jamais fait ça....:))
Registered member
29 messages
Posted on December, 04 2023 - 5:17 PM
bonsoir,

Merci a tous pur vos réponses,
N'ayant pas trouvé de solutions optimales, je pense que je vais rester sur une table simple avec une rubrique clé pour la distinction.
Peut être archiver les données tout les ans pour éviter d'avoir une table trop importante sur l'année en cours.

En espérant que cela tienne la route

Merci encore !
Je reste à l'écoute si quelqu'un a un problème identique et trouve une solution fonctionnelle :)