PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Affichage de ##### dans une partie de la table mémoire
Affichage de ##### dans une partie de la table mémoire
Débuté par minsk, 02 aoû. 2019 15:24 - 14 réponses
Posté le 02 août 2019 - 15:24
Bonjour,

J'utilise une table mémoire basée sur une requête.A l'exécution, je transforme la source de la table en une source basée sur la même requête écrite avec plusieurs autres paramètres et que j'exécute avec HExécuteRequêteSQL.

Il ne devrait pas y avoir de problème, seulement voilà,la table affiche les 24 premiers enregistrements sur 70 et toutes les autres lignes sont ##### sur toutes les colonnes.

Qu'est ce qui pourrait en être la cause ?

merci d'avance pour vos réponses
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 04 août 2019 - 10:02
Bonjour,
1-Pourrait-on avoir le code de ta "Transformation"
2-Combien de lignes sont affichées dans ton champ table ? 24 ?

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 04 août 2019 - 10:03
Posté le 04 août 2019 - 16:09
Bonjour, merci de ton apport

Là, il s'agit de la requête source initiale de la table
SELECT
SORTIE_STOCK_MATIERE.IDBASE,
SORTIE_STOCK_MATIERE.IDSORTIE_STOCK_MATIERE,
SORTIE_STOCK_MATIERE.Date_sortie_matiere,
SORTIE_STOCK_MATIERE.Enregistre_par,
SORTIE_STOCK_MATIERE.Observations,
SORTIE_STOCK_MATIERE.Reference_sortie_matiere,
BASE.Nom_Base
FROM
SORTIE_STOCK_MATIERE,BASE
WHERE
SORTIE_STOCK_MATIERE.IDBASE = BASE.IDBASE
AND
SORTIE_STOCK_MATIERE.Date_sortie_matiere >= {param_date_debut}
AND
SORTIE_STOCK_MATIERE.Date_sortie_matiere < {param_date_fin}
ORDER BY Date_sortie_matiere,Reference_sortie_matiere ASC


Maintenant le code de modification
ls_sourceDeDonnees est une Source dede Données
param1,param2,param3 est une chaîne = ""

param1 = "AND SORTIE_STOCK_MATIERE.Date_sortie_matiere >= '"+pd_date_debut+"'"
param2 = "AND SORTIE_STOCK_MATIERE.Date_sortie_matiere < '"+pd_date_fin+"'"
SI Combo_base..ValeurAffichée <> "" ALORS
param3 = "AND SORTIE_STOCK_MATIERE.IDBASE = '" + Combo_base..Valeur +"'"
FIN

ls_chaineDeDonnees est une chaîne =[
SELECT
SORTIE_STOCK_MATIERE.IDBASE,
SORTIE_STOCK_MATIERE.IDSORTIE_STOCK_MATIERE,
SORTIE_STOCK_MATIERE.Date_sortie_matiere,
SORTIE_STOCK_MATIERE.Enregistre_par,
SORTIE_STOCK_MATIERE.Observations,
SORTIE_STOCK_MATIERE.Reference_sortie_matiere,
BASE.Nom_Base
FROM
SORTIE_STOCK_MATIERE,BASE
WHERE
SORTIE_STOCK_MATIERE.IDBASE = BASE.IDBASE
%1
%2
%3
ORDER BY Date_sortie_matiere DESC
]

ls_chaineDeDonnees = ChaîneConstruit(ls_chaineDeDonnees,param1,param2,param3)

Table_sortie_stock_matiere..FichierParcouru = ls_sourceDeDonnees
SI PAS HExécuteRequêteSQL(ls_sourceDeDonnees,hRequêteDéfaut,ls_chaineDeDonnees) ALORS
Erreur(HErreurInfo())
RETOUR
FIN
TableAffiche(Table_sortie_stock_matiere)


Le seul paramètre qui s'est ajouté à part les dates c'est IDBASE. La requête devrait normalement renvoyer 70 résultats mais elle affiche uniquement 48 résultats dans la table dont 24 lignes parfaitement normales et 24 autres contenant uniquement des #

Je précise qu'en passant le remplissage de la table par programmation tout fonctionne normalement avec le résultat de cette même requête transformée.
Membre enregistré
3 846 messages
Popularité : +227 (347 votes)
Posté le 05 août 2019 - 13:23
Une petite précision : comme ton champ table est relié à une requête on est dans le cas d'une table fichier.

En fait, ta requête modifiée ne sert qu'à filtrer ta recherche en fonction de IDBase.
Pourquoi ne pas utiliser la requête suivante comme source initiale ?
SELECT
SORTIE_STOCK_MATIERE.IDBASE,
SORTIE_STOCK_MATIERE.IDSORTIE_STOCK_MATIERE,
SORTIE_STOCK_MATIERE.Date_sortie_matiere,
SORTIE_STOCK_MATIERE.Enregistre_par,
SORTIE_STOCK_MATIERE.Observations,
SORTIE_STOCK_MATIERE.Reference_sortie_matiere,
BASE.Nom_Base
FROM
SORTIE_STOCK_MATIERE,BASE
WHERE
SORTIE_STOCK_MATIERE.IDBASE = BASE.IDBASE
AND
SORTIE_STOCK_MATIERE.Date_sortie_matiere >= {param_date_debut}
AND
SORTIE_STOCK_MATIERE.Date_sortie_matiere < {param_date_fin}
AND
SORTIE_STOCK_MATIERE.IDBASE = {pBaseSélectionnée}
ORDER by Date_sortie_matiere,Reference_sortie_matiere Asc

et de passer Null ên 3° paramètre dans l'initialisation de la requête. (Null correspond au joker dans ce cas).
En poussant un peu plus le vice, on peut cocher "Null si vide" dans la partie "Détail" de la description de Combo_Base.
Si les paramètres sont liés à des champs de saisie le passage de "Null" se fera alors sans douleur.

En ce qui concerne ton code, je me demande si le problème ne vient pas de l'utilisation des simples cotes. Dans ce cas, pourquoi le problème n'est-il pas global ? J'avoue que je sèche peut être le mode d'accès (chargé en mémoire ou accès direct)

--
Il y a peut être plus simple, mais, ça tourne
Posté le 06 août 2019 - 00:19
Le mode d'accès est "chargé en mémoire"

J'avoue que je ne sais vraiment pas d'où vient le problème.Je crois que pour le moment je vais le contourner en passant par le remplissage par programmation (là ça marche).Je continuerai tout de même à rechercher une solution.

Merci pour ton apport, je reviendrai dès que j'aurai du nouveau
Posté le 29 octobre 2019 - 16:00
Bonjour,

je reviens pour dire que je n'ai pas pu résoudre le problème.Prochainement je tenterai en version 23 pour voir si le problème persiste.
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 30 octobre 2019 - 08:48
@minsk
As-tu vérifié que les données récupérées par ta requête était toutes correctes ?

La remarque faite par @Voroltinquo sur ta requête est plus qu'intéressante, ta table serait alors une table fichier et le problème ne se produirait peut-être pas.

Ta table n'était-elle pas une table fichier avec des liaisons multiples sur les colonnes auparavant ?

Regarde également la fonction ChampErreur() elle peut t'aiguiller sur le type d'erreur rencontré.

--
Cordialement,

Philippe SAINT-BERTIN
Message modifié, 30 octobre 2019 - 08:54
Posté le 30 octobre 2019 - 18:23
Bonjour Philippe,

Les résultats de la requête sont corrects et il n'y a aucune erreur. J'ai dû pour forcer l'affichage,utiliser la technique suivante : récupérer la valeur de l'enregistrement qui est censé être le dernier dans la table avec la variable ls_chaine et là magie.

Table_sortie_stock_matiere..FichierParcouru = ls_sourceDeDonnees
TableAffiche(Table_sortie_stock_matiere.)

li_resultat = HNbEnr(ls_sourceDeDonnees)

SI li_resultat > 0 ALORS
ls_chaine est une chaîne = Table_sortie_stock_matiere.[li_resultat]
ListeSelectPlus(Table_sortie_stock_matiere.,1)
SINON
ToastAffiche("Aucun résultat ne correspond à votre requête",toastCourt,cvMilieu,chCentre,BleuFoncé)
RETOUR
FIN
Sablier(Faux)


ça contourne le problème mais ne m'avance pas quant à la cause et j'ai plusieurs ligne de codes avec des tables se remplissant sur ce principe donc galère
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 31 octobre 2019 - 09:06
tu es sur quelle version de windev ?

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 31 octobre 2019 - 14:47
Je suis sur la 22
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 31 octobre 2019 - 15:56
toutes les maj sont faites ?

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 31 octobre 2019 - 16:12
OUI, je suis à la 73h
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 31 octobre 2019 - 16:33
alors là ca s'apparente à un joli bug. Tu as ce comportement tout le temps sur toutes les tables ?

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 31 octobre 2019 - 16:48
Toutes les tables remplies par cette méthode présentent ce comportement.Au début je ne l'avais pas remarqué mais dès que le nombre d'enregistrements a évolué le problème est apparu.C'est vraiment incompréhensible
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 02 novembre 2019 - 20:24
est-ce que tu n'aurais pas un problème de mémoire ? Essaye des passer ton appli en 64 bits voir si cela règle ton problème

--
Cordialement,

Philippe SAINT-BERTIN