PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Suppression multiple à partir d'une table fichier
Suppression multiple à partir d'une table fichier
Iniciado por Max, 20,mar. 2019 15:31 - 7 respuestas
Miembro registrado
13 mensajes
Publicado el 20,marzo 2019 - 15:31
Bonjour à tous, j’ai un petit souci avec mon application j’aimerais solliciter votre aide svp.
Voila, j’ai une table rempli a partir d’une requête et la requête en question comporte plusieurs fichiers de données dont deux sont relié. Je veux faire une suppression a partir de ma table, avant ca posait problem a cause du contrainte d’intégrité, j’ai finalement par faire la suppression. Mais le problem c’est que veux faire une suppression multiple ou du moins une suppression ou il y a repetition de la clé étrangère dans le fichier qui concerne la suppression, cela me retourne encore l’erreur d’intégrité. Aider moi svp a cerné ce problème. Merci
Voici mon code :
i est un entier
NbSelectionne est un entier = TableSelectOccurrence(TABLE_Liste_Commande)
TitreSuivant("Confirmation")
SI OuiNon("Voulez-vous vraiment faire la suppression")= Oui ALORS
POUR i = NbSelectionne A 1 PAS -1 HLitRecherchePremier(Ligne_commande,Numero_commande,COL_Numero_commande)
SI HTrouve()=Vrai ALORS
POUR TOUT Ligne_commande AVEC Numero_commande=COL_Numero_commande
HSupprime(Ligne_commande)
TableAffiche(TABLE_Liste_Commande,taRéExécuteRequete)

FIN
FIN
FIN

ToastAffiche("Commande(s) supprimée(s)",toastCourt,cvMilieu,chCentre)
FIN
Miembro registrado
2.321 mensajes
Publicado el 21,marzo 2019 - 08:01
Et le message d'erreur est ???

--
Bon dev,
Jean-Pierre
Miembro registrado
299 mensajes
Publicado el 21,marzo 2019 - 08:38
Dans un cas comme celui là où vous passez des ordres successifs (Delete, Insert, Update) il est plus propre de travailler à l'intérieur d'une transaction.
cela vous permet d'eviter en cas d'erreur qu'une partie des ordres soit prise en compte pas le reste
HTransactionxxx



Dans votre cas précis il faut définir une variable chaine
La boucle de traitement va stocker dans cette variable les identifiants des lignes à supprimer sous la forme
x est une chaine = "1, 2, 5, 6, etc"

En sortie de la dernière boucle un seul ordre Delete supprime l'ensemble des lignes
lc_sql est une chaîne = "Delete from MaTable where ID in (" + x + ")"
SI PAS HExécuteRequêteSQL(Req,lc_sql)
Erreur("Requête interrompue : "+HErreurInfo())
FIN
Publicado el 21,marzo 2019 - 09:34
Bonjour,
je pense que tu ne supprimes pas les bonnes lignes de commande (donc rajout
du [i] pour plus de sécurité) d'ou peut-être l'erreur d'intégrité
d'autre part puisque la table est remplie à partir d'une requête, il faut
aussi supprimer "manuellement" l'entête de la commande.
Quant au rafraichissement de la table, je ne le ferais qu'à la fin du
traitement de suppression (mais je ne connais pas bien ce que fait
exactement ta requête)

i est un entier
NbSelectionne est un entier = TableSelectOccurrence(TABLE_Liste_Commande)
TitreSuivant("Confirmation")
SI OuiNon("Voulez-vous vraiment faire la suppression")= Oui ALORS
POUR i = NbSelectionne A 1 PAS -1
POUR TOUT Ligne_commande AVEC
Numero_commande=COL_Numero_commande[i]
HSupprime(Ligne_commande)
FIN
si
HLitRecherchePremier(commande,Numero_commande,COL_Numero_commande[i]) alors
hsupprime(commande)
FIN
TableAffiche(TABLE_Liste_Commande,taRéExecuteRequete)
FIN

Yves

"Max" a écrit dans le message de groupe de discussion :
2019231470d7b18047b862e8967901b44393@news.pcsoft.fr...

Bonjour à tous, j’ai un petit souci avec mon application j’aimerais
solliciter votre aide svp.
Voila, j’ai une table rempli a partir d’une requête et la requête en
question comporte plusieurs fichiers de données dont deux sont relié. Je
veux faire une suppression a partir de ma table, avant ca posait problem a
cause du contrainte d’intégrité, j’ai finalement par faire la suppression.
Mais le problem c’est que veux faire une suppression multiple ou du moins
une suppression ou il y a repetition de la clé étrangère dans le fichier qui
concerne la suppression, cela me retourne encore l’erreur d’intégrité. Aider
moi svp a cerné ce problème. Merci
Voici mon code :
i est un entier
NbSelectionne est un entier = TableSelectOccurrence(TABLE_Liste_Commande)
TitreSuivant("Confirmation")
SI OuiNon("Voulez-vous vraiment faire la suppression")= Oui ALORS
POUR i = NbSelectionne A 1 PAS -1
HLitRecherchePremier(Ligne_commande,Numero_commande,COL_Numero_commande)
SI HTrouve()=Vrai ALORS
POUR TOUT Ligne_commande AVEC Numero_commande=COL_Numero_commande
HSupprime(Ligne_commande)
TableAffiche(TABLE_Liste_Commande,taRéExecuteRequete)

FIN
FIN
FIN

ToastAffiche("Commande(s) supprimée(s)",toastCourt,cvMilieu,chCentre)
FIN
Miembro registrado
299 mensajes
Publicado el 21,marzo 2019 - 10:02
Dans une instruction comme celle-ci :
POUR TOUT Ligne_commande AVEC
Numero_commande=COL_Numero_commande[i]
HSupprime(Ligne_commande)
FIN


Vous supprimez les enregistrements de la sélection que vous êtes en train de parcourir.
Ca ne vous choque pas un peu ?
C'est un peu comme si vous étiez en train de scier la branche sur laquelle vous êtes monté.
Et cela indépendamment du fait que cela représente un nombre très important d'accès aux données donc quelque chose de mal optimisé.
Mensaje modificado, 21,marzo 2019 - 10:04
Miembro registrado
1.640 mensajes
Publicado el 21,marzo 2019 - 10:22
Hello,

Pourquoi ne pas crééer une requete plutot que s'embeter avec une boucle ?

MaReq est une requete SQL =
[
DELETE FROM Ligne_commande WHERE Ligne_commande.Numero_commande = {pNumero_commande}
]

MaReq.pNumero_commande = COL_Numero_commande[i]
SI HExécuteRequêteSQL(MaReq,hModifieFichier) ALORS
RENVOYER Vrai
SINON
RENVOYER Faux
FIN
Mensaje modificado, 21,marzo 2019 - 10:24
Miembro registrado
13 mensajes
Publicado el 21,marzo 2019 - 18:42
Bonsoir les amis,
Merci pour tous vos suggestion, vos aides étaient précieuses, ca a marcher avec l’idée de requête.
J’ai crée une requête pour chaque fichier et les executes dans une boutons. Merci.

Avant de termine avec ce sujet, j’ai une question.
J’ai l’habitude de formatter mes champs telephone ainsi: 99 99 9999. Mais à present je veux mettre une préfixe (509), ca ne marche pas avec masque de saisie (509)99 99 9999.
Si le premier chiffre de mon numéro est 7 ou 6, cela donne respectivement (507) xx xx xxxx, (506) xx xx xxxx. Une idée svp. Merci
Miembro registrado
13 mensajes
Publicado el 21,marzo 2019 - 18:43
Bonsoir les amis,
Merci pour tous vos suggestions, vos aides étaient précieuses, ça a marcher avec l’idée de requête.
J’ai crée une requête pour chaque fichier et les exécutes dans une bouton. Merci.

Avant de termine avec ce sujet, j’ai une question.
J’ai l’habitude de formater mes champs téléphone ainsi: 99 99 9999. Mais à présent je veux mettre une préfixe (509), ça ne marche pas avec masque de saisie (509)99 99 9999.
Si le premier chiffre de mon numéro est 7 ou 6, cela donne respectivement (507) xx xx xxxx, (506) xx xx xxxx. Une idée svp. Merci