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

Forms Oracle Discussion :

checkbox + supprimer


Sujet :

Forms Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut checkbox + supprimer
    bonjour tt le monde

    j'ai crée un bloc de données (de type tabulaire) d'une table :employé(numero,nom,...), et j'ai défini la colonne 'numero' comme une case à cocher
    comment procéder pour 'supprimer' les employés cochés avec un bouton "supprimer"

    merci d'avance

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Tu parcoures sur ton block, et quand la ligne est cochée, tu fais un delete_record.
    Attention, il y a un piège : quand tu fais un delete_record, le curseur passe sur la ligne suivante (donc faut pas faire de next_record dans ce cas)

    Exemple simplifié (reste à gérer le changement de record sur le delete_record et le fait de supprimer le dernier enregistrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    GO_BLOCK('mon_block');
    First_Record;
    LOOP
     IF checkbox_checked('mon_block.ck') THEN DELETE_RECORD; 
     END IF;
    EXIT WHEN :system.last_record = 'TRUE';
    NEXT_RECORD;
    END LOOP;

  3. #3
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    GO_BLOCK('mon_block');
    First_Record;
    LOOP
       IF checkbox_checked('mon_block.ck') THEN DELETE_RECORD; 
       Else
          If  :system.last_record <> 'TRUE' Then
             Next_Record ;
          End if ;
       END IF;
       EXIT WHEN :system.last_record = 'TRUE';
    END LOOP;

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Marche pas si les 2 dernières lignes sont cochées : Le delete record de l'avant dernière ligne passe à la dernière ligne, et tu sors.

    Voici un code que j'avais fait (mais qui faisait d'autres calculs donc plus compliqué : Il ne fallait surtout pas revérifier une ligne, d'où le test sur la variable i)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    FIRST_RECORD;
     
    LOOP
    	i := :SYSTEM.cursor_record;
     
    IF NOT checkbox_checked('block2.ck')
    THEN
     
      EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
      NEXT_RECORD;
     
    -- Sinon, on delete la ligne			
    ELSE
      DELETE_RECORD;	
      IF :SYSTEM.cursor_record < i THEN EXIT; END IF;
      IF :SYSTEM.LAST_RECORD = 'TRUE' AND NOT checkbox_checked('block2.ck')
      THEN EXIT;
      END IF;
    END IF;
     
    END LOOP;

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Le NEXT_RECORD n'est fait que si l'on ne DELETE pas, donc ça doit fonctionner dans tous les cas.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bein, non, j'ai testé justement

    imagine 2 lignes cochées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    GO_BLOCK('mon_block');
    First_Record;
    -- ligne1
    LOOP
       IF checkbox_checked('mon_block.ck') THEN DELETE_RECORD; 
    -- Ligne1 supprimée, le curseur passe à la ligne 2
     
     Else
    -- On n'y passe pas
          If  :system.last_record <> 'TRUE' Then
             Next_Record ;
          End if ;
       END IF;
    -- On sort, car on est sur la dernière ligne (ligne2 qui est devenue ligne1)
       EXIT WHEN :system.last_record = 'TRUE';
    END LOOP;
    Résultat il reste une ligne à l'écran (la ligne2) et elle est cochée.

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Effectivement.

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    merci d'avoir repondu

    le code marche bien et supprime l'enregistrement concerné,
    mais ne supprime pas depuis ma table

  9. #9
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Il faut commiter, ensuite, bien sur.
    Si le block est basé, les lignes correspondantes doivent être supprimés dans la table.

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Attention, dans mon post (#4), j'ai un clear_record et pas un delete_record.
    Je vais le corriger pour éviter les erreurs.

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    la valeur i est de quel type?

  12. #12
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    De type NUMBER, faut surtout pas le mettre en VARCHAR .
    Les variables :system renvoient toujours une chaine de caractère, mais là si tu testes '10' et '9', tu aura '10'<'9', alors qu'en NUMBER tu auras 9<10 (normal)

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    merci beaucoup
    le deuxième code marche bien
    j'ai juste ajouté deux lignes, pourque les enregistrements cochés puissent disparaitre et réexécuter à nouveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    GO_BLOCK('mon_block');
    First_Record;
    -- ligne1
    LOOP
       IF checkbox_checked('mon_block.ck') THEN
    begin
     DELETE_RECORD; 
    standard.commit;
    clear_block;
    execute_query;
    end;
    
    -- Ligne1 supprimée, le curseur passe à la ligne 2
      
     Else
    -- On n'y passe pas
          IF  :system.last_record <> 'TRUE' Then
             Next_Record ;
          End IF ;
       END IF;
    -- On sort, car on est sur la dernière ligne (ligne2 qui est devenue ligne1)
       EXIT WHEN :system.last_record = 'TRUE';
    END LOOP;
    vous êtes toujours les meuilleurs

  14. #14
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Houla, c'est quoi ce bout de code rajouté ? Tu ne peux avoir qu'une seule case de cochée, parce qu'à la première trouvée, tu la supprime et tu réaffiches tout (donc il n'y a plus de lignes cochées)...

    Normalement, ce code se met après le END LOOP.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    commit;
    clear_block;
    execute_query;

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    vous avez raison
    mais j'ai deux petit problèmes,
    le premier, est que le code ne supprime pas le dernier enregistrement coché
    (c-a-d: si j'avais 3 enregistrements 1,2,3 et je coche directement le 3 pour le supprimer, il ne le supprime pas)

    deuxième problème :
    est-il possible d'executer une requete LMD à ala place de : delete_record ?
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF checkbox_checked('mon_block.ck') THEN
    
    update employé set A=null;
    commit;
    merci

  16. #16
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Oui, dans votre boucle vous pouvez supprimer l'enregistrement dans la base avec Delete From...
    En sortie de boucle, raffaichissez avec execute_query sur le bloc.

  17. #17
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par killua86 Voir le message
    j'ai deux petit problèmes,
    le premier, est que le code ne supprime pas le dernier enregistrement coché
    (c-a-d: si j'avais 3 enregistrements 1,2,3 et je coche directement le 3 pour le supprimer, il ne le supprime pas)i
    Tu as lu mon post #4 ?

  18. #18
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 80
    Par défaut
    en fait le code cité dans le post #4 m'a crée des erreurs
    il coche aléatoirement un des enregistrement (généralement l'avant dernier!)
    et si j'essaye de le décocher il m'affiche cette boite de dialogue :
    reservation de l'enregistrement impossible (2 essais) voulez vous continuer
    et lorsque je consulte ma table dans un nouveau form, j'ai constaté que quelques valeurs de la colone "num" ont été changés par 'o' ou par 'n' qui sont les valeurs de la case à cocher (propriétés :valeur lorsque coché 'o', non coché 'n')
    et si je retire ces deux valeurs de la propriétés de la case à coché
    je ne peux pas executer, j'obtiens ce msg d'erreus : les valeurs coché et non cohé des case à cocher doivent être distincts

  19. #19
    Membre confirmé Avatar de Devlop++
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Par défaut
    Au lieu d'utiliser la colonne "num" comme une case à cocher, ajoute une autre colonne à ton bloc qui sera de ce type, elle ne sera pas liée avec ta table et les valeurs 'o' & 'n' ne seront pas enregistrées dans cette dernière.
    @+

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/06/2015, 16h01
  2. Réponses: 3
    Dernier message: 08/03/2010, 05h29
  3. [MySQL] supprimer une ligne d'une base de données via un checkbox
    Par sniper_marra dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 15/08/2008, 11h51
  4. [Conception] Supprimer une ligne d'un tableau à partir d'un CHECKBOX
    Par snakejl dans le forum PHP & Base de données
    Réponses: 71
    Dernier message: 30/05/2006, 08h43
  5. [MySQL] Plusieurs enregistrement à supprimer depuis un checkbox
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 26/12/2005, 14h08

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