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 :

Suppression d'un enregistrement Impossible


Sujet :

Forms Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut Suppression d'un enregistrement Impossible
    Bonsoir à tous
    Je voudrais souhaiter un debut de semaine à tous.
    Mon problème se situe au niveau d'une supprssion d'un enregistrement.
    Je vouddrais suprimer un enregistrement que je retrouve en faisant une recherche.
    Mon code utilisé est ceci:
    /*

    ** Procédure interne : DELETE_RECORD
    ** Exemple : Marquer l'enregistrement en cours dans le bloc
    ** en cours afin qu'il soit supprimé.
    */
    BEGIN
    Go_Block('Mir_Appartement');
    Delete_Record;
    Commit;
    END;


    Ma table st Mir_Appartement
    Lorsque que j'essaie de faire la supprssion , j'ai l'erreur suivante :
    FRM-40510 Erreur Oracle :Suppression (Delete) d'enregistrement impossible.
    Et lorsque je vais verifier dans la base l'enregistrement que j'ai voulu supprimer y est toujours.
    Merci bien pour votre soutient.

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Bonsoir,

    Je ne suis pas très "Forms", mais voici un début de réponse :

    FRM-40510: ORACLE error: unable to DELETE record.

    Cause: A fatal error occurred while trying to delete a record. The table associated with the current block of the form might not exist, your username might not have authority to perform the specified action on the table, or some other reason might have caused the fatal error.
    Action: Contact your DBA.
    Level: >25
    Type: Error
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut
    Mais ma table existe belet bien .
    Que me conseille tu , quelle code utiliser pour faire une suppression parceque cette procedure , je l'ais recupéré dans l'aide de Oracle ( Delete_Record)
    Merci.

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Et si tu exécutes le code directement sous sql*plus, ca donne quoi ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Le block 'Mir_Appartement' est un block maitre d'un autre block?

    Essaie de voir cette discussion
    http://www.developpez.net/forums/showthread.php?t=71410

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut
    Mon block est basé sur une block simple (table mir_appartement)
    Et lorsque je fais dans sql/plus un :

    Delete from Mir_Appartement Where Cod_Appart = FG01;
    J'ai l'érreur suivante:
    Erreur à la ligne 1:
    ORA-00904: Nom de colonne non valide

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut
    J'ai supprimé le code présédent qui était dans le declencheur , puis je l'ais remplacé par le code suivant:
    DELETE FROM Mir_Appartement WHERE cod_Appart = :MIR_APPARTEMENT.COD_APPART;
    Et voici l'erreur ORA que j'ai :
    FRM-40735 le declencheur When _Button_Pressed à détécté une exeption 0RA_02292 non traité.
    Que dois-je faire pour effectué ma suppression en base a l'aide du bouton Supprimer .
    Merci

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut
    Mir_Appartement c'est le block et cod_appart est le champ .
    Merci

  9. #9
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Citation Envoyé par Bayoro Voir le message
    Mon block est basé sur une block simple (table mir_appartement)
    Et lorsque je fais dans sql/plus un :

    Delete from Mir_Appartement Where Cod_Appart = FG01;
    J'ai l'érreur suivante:
    Erreur à la ligne 1:
    ORA-00904: Nom de colonne non valide
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Delete from Mir_Appartement Where Cod_Appart = 'FG01';
    Est ce que la propriété delete de ton block Mir_Appartement est à YES?

    Citation Envoyé par Bayoro Voir le message
    J'ai supprimé le code présédent qui était dans le declencheur , puis je l'ais remplacé par le code suivant:
    DELETE FROM Mir_Appartement WHERE cod_Appart = :MIR_APPARTEMENT.COD_APPART;
    Et voici l'erreur ORA que j'ai :
    FRM-40735 le declencheur When _Button_Pressed à détécté une exeption 0RA_02292 non traité.
    Que dois-je faire pour effectué ma suppression en base a l'aide du bouton Supprimer .
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    forms_ddl('DELETE FROM Mir_Appartement WHERE cod_Appart 
    = '||:MIR_APPARTEMENT.COD_APPART);
    forms_ddl('commit');
    go_block('MIR_APPARTEMENT')
    excute_query;

  10. #10
    Membre éclairé Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Points : 773
    Points
    773
    Par défaut
    Je ne suis pas expert en FORMS mais as-tu vu ce post : http://www.developpez.net/forums/showthread.php?t=71410
    Philippe CEROU,

    Architecte Systèmes & Bases de données.

  11. #11
    Membre actif Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Points : 208
    Points
    208
    Par défaut
    Quelle est la version de Forms ?

  12. #12
    Membre actif Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Points : 208
    Points
    208
    Par défaut
    l'erreur ORA-02292 est une erreur d'intégrité, tu essaies de supprimer un enregistrement qui a des fils dans une autre table.
    Essaies de voir de ce coté là

  13. #13
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut
    Bonjour à tous honorable personne
    Effectivement mon la propeiété delete de mon block est à yes .
    Puis comme Salim11 et Nounoursonne le dise mon block , mon Cod_Appart , est une clé etrangère dans une autre table du nom de Mir_Contrat
    qui est :create table MIR_CONTRAT (
    COD_CONTRAT VARCHAR2(10) not null,
    COD_APPART VARCHAR2(10) not null,
    COD_LOC VARCHAR2(10) not null,
    DATE_CONTRAT DATE,
    CAUTION NUMBER(20),
    STATUT Varchar2(50),
    REMBOURSEMENT NUMBER(20),
    DEVOIR NUMBER(20),
    constraint PK_MIR_CONTRAT primary key (COD_CONTRAT)
    );
    Merci je vais essayer le code de Salim11 et je vous en direz la suite .Merci

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut
    Salim11
    Lorsque je met le code forms_ddl('DELETE FROM Mir_Appartement WHERE cod_Appart
    = '||:MIR_APPARTEMENT.COD_APPART);
    forms_ddl('commit');
    go_block('MIR_APPARTEMENT')
    excute_query;

    dans le trigger When_Button_Pressed et que je compile il me marque :
    Erreur 201 ligne 6 ,colonne1
    l'indicateur execute_query; doit etre déclaré .

  15. #15
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 105
    Points : 48
    Points
    48
    Par défaut
    Je tente d'executer la procedure de Finkel qui
    PROCEDURE P_delete_record IS

    str_cur_blk VARCHAR2(60);-- Le nom du block sur lequel on veut faire un delete
    str_first_itm VARCHAR2(60);-- Le 1er item du block
    str_last_itm VARCHAR2(60);-- Le dernier item du block
    str_cur_itm VARCHAR2(60);-- L'item courant que l'on est en train de lire
    str_pk VARCHAR2(10);-- Variable indiquant si l'item fais partie de la clé primaire
    str_colname VARCHAR2(60);-- Nom de la colonne auquel se réfère l'item
    str_type VARCHAR2(20);-- Type de donné de l'item (char, nimber, etc...)
    str_where VARCHAR2(5000);-- Chaine de carctère dans laquelle on sotcke la clause where
    str_value VARCHAR2(2000);-- Variable stoquant la valeur du champ que l'on est en train de lir
    str_delete VARCHAR2(5000);-- Varaible contenant l'instrucation SQL a executer correspondant au delete
    str_nomtable VARCHAR2(60);-- Le nom de la table sur lequel se réfère le block
    str_typedonne VARCHAR2(30); -- Type de source de donnée du block (table, procédure, etc...

    num_bouton NUMBER;

    Exit_Procedure EXCEPTION;
    Cle_etrangere EXCEPTION;

    -- On définie une exception avec le code ORA correspondant
    -- a l'erreur du à l'intégrité référentiel.
    PRAGMA EXCEPTION_INIT(Cle_etrangere, -2292);

    BEGIN


    -- Initialisation des variables
    str_where := '';
    str_nomtable := '';
    str_typedonne := '';

    str_cur_blk := :System.Cursor_Block;

    --On repère le 1er item du block et on se positionne dessus
    str_first_itm := Get_Block_Property(str_cur_blk, FIRST_ITEM );
    str_last_itm := Get_Block_Property(str_cur_blk, LAST_ITEM );

    str_cur_itm := str_first_itm;


    WHILE str_cur_itm != str_last_itm LOOP

    -- On regarde si l'item fait partie d'une clé primaire
    str_pk := GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm,PRIMARY_KEY);

    IF str_pk = 'TRUE' then

    -- On recupère le nom de la colonne associée à l'item (en général identique mais pas toujours)
    str_colname := nvl(GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm,COLUMN_NAME),str_cur_itm);

    -- On récupère le type de variable
    str_type := GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm,DATATYPE);

    IF str_type IN ('ALPHA', 'CHAR', 'LONG') then
    str_value := ''''||GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm, DATABASE_VALUE)||'''';
    elsif str_type IN ('INT', 'RINT', 'NUMBER', 'RNUMBER', 'MONEY', 'RMONEY') then
    str_value := GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm, DATABASE_VALUE);
    elsif str_type = 'DATE' then
    str_value := 'to_date('||GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm, DATABASE_VALUE)||',''DD-MON-YY'')';
    elsif str_type = 'JDATE' then
    str_value := 'to_date('||GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm, DATABASE_VALUE)||',''MM/DD/YY'')';
    elsif str_type = 'EDATE' then
    str_value := 'to_date('||GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm, DATABASE_VALUE)||',''DD/MM/YY'')';
    elsif str_type = 'DATETIME' then
    str_value := 'to_date('||GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm, DATABASE_VALUE)||',''DD-MON-YY HH24:MI:SS'')';
    else
    -- On ne sait pas gérer ce cas type
    Raise Exit_Procedure;
    end IF;

    -- L'item courant faisant partie de la clé primaire (donc basé et non nul) on le rajoute à la clause Where
    str_where := str_where||' AND '||str_colname||' = '||str_value;

    End IF;

    str_cur_itm := GET_ITEM_PROPERTY(str_cur_blk||'.'||str_cur_itm,NEXTITEM);

    END LOOP;

    -- Si la chaine where n'est pas vide alors cela veut dire qu'elle commence par un AND qu'on doit enlever
    IF str_where IS NOT NULL then
    str_where := LTRIM(str_where,'AND ');
    end IF;

    --On récupère le nom de la table sur lequel est basé le block
    str_typedonne := GET_BLOCK_PROPERTY(str_cur_blk, QUERY_DATA_SOURCE_TYPE);

    IF str_typedonne = 'TABLE' then
    str_nomtable := GET_BLOCK_PROPERTY(str_cur_blk, QUERY_DATA_SOURCE_NAME);

    -- Si le nom de la table est un synonyme, alors on va prendre plutot le nom
    -- de la table en enlevant le 's' devant car le delete sera executé depuis
    -- une procèdure sotckée
    str_nomtable := LTRIM(str_nomtable,'s');

    end IF;

    -- Si le block n'est pas basé sur une table
    -- ou si la clause where ne s'est pas construite
    -- (car le block n'a pas de clé primaire défini par exemple)
    -- Alors on ne sais pas gérer le cas
    IF str_nomtable IS NULL OR str_where IS NULL then
    Raise Exit_Procedure;
    end IF;

    -- Construction de la requete
    str_delete := 'delete from '||str_nomtable||' where '||str_where;


    -- On execute l'instruction SQL a l'aide d'un EXECUTE IMMEDIATE placé en procédure stocké
    sps_com_exec_sql(str_delete);

    execute_query;


    EXCEPTION
    when Cle_etrangere then
    message('L''enregistrement est référencé');
    raise form_trigger_failure
    --Echec de la tentative de delete, on laisse l'appilcation gérer la suppresion
    when Exit_Procedure then
    delete_record;
    END;
    Mais j'ai le curseur qui clignote sur l'avant dernière ligne qui est delete_record
    et erreur 103 , ligne119 colone1 en me disant symbole 'Wen' rencontré a la place d'un symbole suivant";" à été substitué à "When" pôur continuer.

  16. #16
    Membre actif Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Points : 208
    Points
    208
    Par défaut
    il manque juste le ";" sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    raise form_trigger_failure ;

  17. #17
    Membre actif Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Points : 208
    Points
    208
    Par défaut
    ce que je ne comprends pas c'est pourquoi tu ne supprimes pas les fils avant de supprimer le père, ça serait tellement plus simple

  18. #18
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Citation Envoyé par Bayoro Voir le message
    Salim11
    Lorsque je met le code forms_ddl('DELETE FROM Mir_Appartement WHERE cod_Appart
    = '||:MIR_APPARTEMENT.COD_APPART);
    forms_ddl('commit');
    go_block('MIR_APPARTEMENT')
    excute_query;

    dans le trigger When_Button_Pressed et que je compile il me marque :
    Erreur 201 ligne 6 ,colonne1
    l'indicateur execute_query; doit etre déclaré .
    Je m'execuse erreur de frappe, execute_query qui correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    forms_ddl('DELETE FROM Mir_Appartement WHERE cod_Appart 
    = '||:MIR_APPARTEMENT.COD_APPART);
    forms_ddl('commit');
    go_block('MIR_APPARTEMENT');
    execute_query;

  19. #19
    Membre actif Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Points : 208
    Points
    208
    Par défaut
    Salim11, il aura toujours le même problème à cause des clés étrangères, non ?

  20. #20
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Citation Envoyé par salim11 Voir le message
    Salut,

    Le block 'Mir_Appartement' est un block maitre d'un autre block?

    Essaie de voir cette discussion
    http://www.developpez.net/forums/showthread.php?t=71410
    Je corrige mon erreur seulement.

Discussions similaires

  1. Suppression d'enregistrements impossible
    Par miwbath dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/12/2007, 16h14
  2. [VB][rdo] Strategie de suppression massive d'enregistrements
    Par Bicky dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 12/10/2005, 14h12
  3. suppression automatique des enregistrements
    Par abdou.sahraoui dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/08/2005, 13h45
  4. [VB.NET]Suppression d'un enregistrement dans un DataGrid
    Par San Soussy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/06/2005, 10h30
  5. Suppression d'un enregistrement
    Par denisfavre dans le forum IHM
    Réponses: 3
    Dernier message: 04/10/2004, 11h03

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