FORUMS PROFESSIONNELS
WINDEV
,
WEBDEV
et
WINDEV Mobile
Accueil
|
Messages récents
|
Connexion
|
Déconnexion
|
Français
Accueil
→
WINDEV 2024
→
Indice dans une table inexistant
Indice dans une table inexistant
Débuté par Gibier Antoine, 23 avr. 2018 16:17 - 5 réponses
Connectez-vous…
Gibier Antoine
#1
Posté le 23 avril 2018 - 16:17
Bonjour à tous!
Je me retrouve face à un problème plus qu'étrange
J'ai deux tables:
-une de 16 lignes remplis par un fichier avec 3 colonnes (Ttrk_vrai, Ttrk_grav et Ttrk_risk_id)
-une seconde remplis par fichier avec deux colonnes (Sans_Nom1 et SansNom2 (très original
)
J'utilise ce code à la sélection d'une ligne:
n
B_ligne
est un entier
=
TABLE_
MaTable
..
Occurrence
i
est un entier
=
0
BOUCLE
i
=
i
+
1
SI
CO
L_SansNom1
..
ValeurAffichée
=
TABLE_
MaTable.COL_Ttrk_vrai
[i]
..
ValeurAffichée
ALORS
SI
CO
L_SansNom2
..
ValeurAffichée
=
TABLE_
MaTable.COL_Ttrk_grav
[i]
..
ValeurAffichée
ALORS
risk_id
=
TABLE_
MaTable.COL_Ttrk_risk_id
[i]
..
ValeurAffichée
FIN
FIN
À
FAIRE TANTQUE
i
<
n
B_ligne
Comme précisé, la table contient 16 lignes et le programme plante avec l'erreur suivante:
Erreur à la ligne 27 du traitement Sélection d'une ligne de TABLE_Scénarii.
L'indice spécifié [14] est invalide.
TABLE_MaTable utilise un fichier ou une requête comme source de données.
Seuls les éléments visibles sont disponibles en programmation.
----- Informations techniques -----
Projet : Outil d'analyse de risque
Appel WL :
Traitement de 'Sélection d'une ligne de TABLE_Scénarii' (FEN_Couverture_des_scénarii_par_les_mesures_de_sécurité.TABLE_Scénarii), ligne 27, thread 0
Que s'est-il passé ?
L'indice spécifié [14] est invalide.
TABLE_MaTable utilise un fichier ou une requête comme source de données.
Seuls les éléments visibles sont disponibles en programmation.
Code erreur : 10068
Niveau : erreur fatale
Dump de l'erreur du module 'wd230obj.dll' (23.0.407.12).
Identifiant des informations détaillées (.err) : 10068
Informations supplémentaires :
EIT_PILEWL :
Sélection d'une ligne de TABLE_Scénarii (FEN_Couverture_des_scénarii_par_les_mesures_de_sécurité.TABLE_Scénarii), ligne 27
EIT_DATEHEURE : 23/04/2018 16:15:01
EIT_TYPE_WDFILE : <2>
EIT_IDCODE : <33>
Assistance
Avez-vous une idée de la provenance de cette erreur?
Merci d'avance!
Signaler
0
0
François C.
#2
Membre enregistré
1 623 messages
Popularité : +100 (114 votes)
Posté le 23 avril 2018 - 16:48
Ttrk_vrai, Ttrk_grav et Ttrk_risk_id sont ils tous de type conteneur ? Ca m'etonnerais
C'est ce que le code laisse penser en tout cas
Essaye plutot la synthaxe suivante :
POUR i
=
1
_A_
TABLE_
MaTable
..
Occurrence
SI
CO
L_SansNom1
=
TABLE_
MaTable
[i]
.
COL_Ttrk_vrai
_ET_
CO
L_SansNom2
=
TABLE_
MaTable
[i]
.
COL_Ttrk_grav
ALORS
risk_id
=
TABLE_
MaTable
[i]
.
COL_Ttrk_vrai
FIN
FIN
Ca devrait fonctionner !
Attention, cependant, je pense qu'il faut ajouter SORTIR apres "risk_id = TABLE_MaTable[i].COL_Ttrk_vrai" afin de stopper la boucle une fois trouvé ?
PS : Evite dans tes developpements de mettre les noms par défaut
ex: COL_SansNom1
Si tu prend cette mauvaise habitude tu va vite te retrouver dans un bordel sans nom avec des gros risques d'erreurs.
Message modifié, 23 avril 2018 - 16:50
Signaler
1
0
Antoine GIBIER
#3
Membre enregistré
6 messages
Popularité : +1 (1 vote)
Posté le 23 avril 2018 - 17:00
En effet ils sont tous de type Texte. J'avoue ne pas avoir encore une grande connaissance en Windev, le type conteneur apporte beaucoup?
Ton code fonctionne à merveille MERCI beaucoup
Yep merci pour le conseil, en général les noms sont fait automatiquement en fonction du fichier du coup je m'en sors mais ceux là sont passé à la trappe ahah!
Message modifié, 23 avril 2018 - 17:03
Signaler
0
0
mlion
#4
Membre enregistré
326 messages
Popularité : +15 (19 votes)
Posté le 23 avril 2018 - 17:08
Bonjour.
Le message est explicite -> sur une table fichier tu ne peux travailler que sur les éléments visibles.
Quand tu dis 16 lignes : ce sont les lignes visibles ou le total des lignes de ton fichier ?
Attention : si tu as un fichier de 1000 lignes, tu en visualises 16 à l'écran si tu fais une boucle du premier éléments au 1000 ème : plantage !!!
Seul les 16 peuvent être vus ??? Windev ne stocke en mémoire que les éléments visibles du fichier. Les autres lui sont inconnus.
Vu que ton traitement plante à la 14 ème ligne je suppose que ton écran ne visualise que 13 lignes.
Il faut bien différencier une table fichier d'une table mémoire. Si tu passes tout en table mémoire ton traitement est OK.
J'espère que tu as compris.
Vu ce que tu as à faire, je ne ferai pas comme cela et je ferai une requête avec une jointure entre tes 2 fichiers pour récupérer risk_id
Select Ttrk_risk_id from fichier1, fichier2 where fichier1.Ttrk_vrai = fichier2.? and fichier1.trk_grav = fichier2.?
-> j'ai des doutes sur ta table fichier avec col_sansnom comme nom de colonne : cela est une table mémoire à moins que celle ci soit alimentée par programmation.
Michel.
Signaler
0
0
François C.
#5
Membre enregistré
1 623 messages
Popularité : +100 (114 votes)
Posté le 23 avril 2018 - 18:17
En fait, ton code était louche et faisait penser que tes colonne contenaient des champs de type combo et non du texte.
tu n'a pas besoin de faire ..ValeurAffichée sur chaque colone, un simple appel a celle ci te permet d'en lire le contenu.
L'indice de parcours, (ici " i ") se place généralement après le nom de la table :
Table_MaTABLE[I]
Ainsi, tu sais que tu va lire la ligne I de la table MaTABLE.
En notant :
MaTable.Col_MaColonne[i]..ValeurAffichée .. on peut croire que cette colone contien un champ combo et que tu souhaite lire la valeur affichée a l'indice i de cette combo de la ligne en cours du tableau
Message modifié, 23 avril 2018 - 18:18
Signaler
0
0
Miche
#6
Posté le 24 avril 2018 - 08:41
Bonjour,
Je vois que tu utilise i dans ta boucle.
Pour info moi aussi j'ai eu ce genre d'erreur en utilisant i ou autre plusieurs fois dans une méme procédure
exemple :
procedure toto()
Pour i 1 a 25
info(i)
fin
pour i = 1 a 20
tableaffiche(table,i)
fin
fin de la procedure
j'avais une erreur au tableaffiche car pas d'indice 25 dans ma table
le second i n'est pas initialisé à la valeur 1 de la 2ème boucle.
Ceci depuis la dernière mise à jour de Windev
pour résoudre le problème j'ai utilisé i_1 et i_2 pour chaque boucle
Plus d'erreur
Signaler
0
0
→ Revenir à WINDEV 2024
WINDEV 2024
WEBDEV 2024
WINDEV Mobile 2024
WINDEV (précédentes versions)
WEBDEV (précédentes versions)
WINDEV Mobile (précédentes versions)
Etats & Requêtes
Hors-sujet
Outils
Français
English
Español
Portuguesa
Fermer cette fenêtre
Type de recherche
Uniquement les sujets
Tous les messages
Période de recherche
Date indifférente
Moins d'une heure
Moins de 24 heures
Moins d'une semaine
Moins d'un mois
Moins d'un an
Annuler
Aperçu de votre message
Ajouter une image
Importer une image depuis une URL
Envoyer une image depuis un fichier de votre disque
Déposez ici un fichier ou cliquez sur "Parcourir..."
ou
Annuler
0%
WLangage
SQL
XML, HTML
JAVA, Javascript
Texte