IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Problème de suppression d'un enregistrement [WD19]


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut Problème de suppression d'un enregistrement
    Bonjour,

    Je rencontre un problème à la suppression d'un enregistrement dans une table, voici l'erreur retournée:
    Erreur à la ligne 13 du traitement Clic sur BTN_Supprimer.
    Vous avez appelé la fonction HSupprime.
    L'enregistrement n°<52> se trouve en dehors du fichier <Recup_Demande_formations>.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	TableSupprime(TABLE_Demandes,TableSelect(TABLE_Demandes))
     
    	HLitRecherchePremier(Recup_Demande_formations,IDRecup_Demande_formations,gnIdDeTableFormations)
    	SI HTrouve(Recup_Demande_formations) ALORS
    		bEtatsupp = HSupprime(Recup_Demande_formations,gnIdDeTableFormations)
    		SI bEtatsupp = Vrai ALORS
    			Info("La demande de formation a été supprimée")
    		SINON 
    			HErreurInfo(hErrComplet)
    		FIN
    		//HLitSuivant(Recup_Demande_formations)
    	FIN
    Qu'en pensez-vous ? dans la variable gnIdDeTableFormations, avec le débogueur, je récupère bien le bon enregistrement à l'exécution de ma requête.
    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Perso je mettrais pas le gnIdDeTableFormations dans le hSupprime() donc juste hSupprime(Recup_Demande_formations)
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 324
    Points : 40
    Points
    40
    Par défaut
    En effet c'était tout simple, merci beaucoup pour le coup de main !

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par mimi1255 Voir le message
    [CODE]
    TableSupprime(TABLE_Demandes,TableSelect(TABLE_Demandes))

    HLitRecherchePremier(Recup_Demande_formations,IDRecup_Demande_formations,gnIdDeTableFormations)
    SI HTrouve(Recup_Demande_formations) ALORS
    bEtatsupp = HSupprime(Recup_Demande_formations,gnIdDeTableFormations)
    Bonjour,

    Tout d'abord, il ne faut pas confondre l'Id ou identifiant automatique et le n° d'enregistrement optionnel attendu par HSupprime.
    Le n°

    <Résultat> = HSupprime([<Nom du fichier> [, <Numéro d'enregistrement> [, <Options>]]])
    --------------------------------------------------------------------------------

    <Résultat> : Booléen

    <Numéro d'enregistrement> : Entier optionnel
    Numéro de l'enregistrement à supprimer. Si ce paramètre n'est pas précisé (est égal à 0 ou à la constante hNumEnrEnCours), l'enregistrement en cours sera supprimé. Cependant, l'enregistrement en cours restera l'enregistrement supprimé.

    ATTENTION : Il ne faut pas confondre le numéro d'enregistrement avec l'identifiant automatique associé à l'enregistrement.

    Dans une utilisation normale, ces deux numéros ne sont pas identiques. Le numéro d'enregistrement peut être connu par la fonction HNumEnr.
    De là sans doute, le conseil de michel.souris.

    Donc, il faut
    • soit vous positionner logiquement sur l'enregistrement (votre HLitRecherchePremier), puis procéder au HSupprime sans préciser de n° d'enregistrement.
    • soit mémoriser à un moment ou à un autre (par exemple quand vous alimentez votre table, mais aussi bien par un HLitRecherchePremier) le n° physique via HNumEnr, et procéder au HSupprime en indiquant le n° physique

    Je comprends que cela semble plus sécurisant de désigner l'enregistrement à supprimer de manière précise, mais le pointeur attendu est trompeur ... !

    Je suppose que vous avez mémorisé votre n° logique (autoidentifiant) dans votre table (sinon, faites le dans une colonne invisible).
    Utilisez directement cette information pour vous positionner sur le bon record avant le HSupprime, plutôt que de passer par une variable intermédiaire.

    Par ailleurs, vous utilisez une variable globale gnIdDeTableFormations. Est-ce indispensable que sa portée soit globale ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de suppression d'enregistrement
    Par alexdj59 dans le forum IHM
    Réponses: 7
    Dernier message: 17/12/2010, 12h36
  2. Réponses: 3
    Dernier message: 30/09/2010, 13h06
  3. Réponses: 19
    Dernier message: 26/08/2008, 15h03
  4. Problème de suppression d'enregistrement dans un fichier vb6
    Par alighieri dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/06/2008, 11h51
  5. Problème lors de la suppression d'un enregistrement
    Par Salamander24 dans le forum Modélisation
    Réponses: 3
    Dernier message: 15/03/2008, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo