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 :

Insertion echoue - FRM-40608


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut Insertion echoue - FRM-40608
    Bonjour,

    dans mon application, j'utilise 2 blocs, un qui va afficher les enregistrements pour une table, et l'autre qui permet l'insertion dans cette table.

    J'ai donc B_VISU_TABLE, et B_TABLE.

    - un trigger "général" WHEN-NEW-FORM-INSTANCE qui me permet d'afficher dans mon bloc "tabulaire" les enregistrements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GO_BLOCK('B_VISU_PATIENTS');
    EXECUTE_QUERY;
    - un trigger local qui permet d'insérer dans le bloc VISU les attributs saisie. (via un bouton)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    GO_BLOCK('B_VISU_PATIENTS');
    LAST_RECORD;
    CREATE_RECORD;
     
    :B_VISU_PATIENTS.NUMPAT := :B_PATIENTS.NUMPAT;
    :B_VISU_PATIENTS.PRENOM := :B_PATIENTS.PRENOM;
    :B_VISU_PATIENTS.NOM    := :B_PATIENTS.NOM;
    :B_VISU_PATIENTS.TAUX   := :B_PATIENTS.TAUX;
    - et mon trigger final rattaché à un bouton pour commit les données saisies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    go_block('B_VISU_PATIENTS');
    commit_form;
    L'insertion dans le bloc de vue se déroule correctement. Mais lorsque je clique sur mon bouton de commit, j'ai un message d'erreur suivant.

    FRM-40508: Erreur oracle: INSERTION (INSERT) d'enregistrement impossible.
    Puis, avec les détails(Aide/Affiche l'erreur), j'ai :
    Erreur d'instruction SQL:
    INSERT INTO PATIENTS(NUMPAT,PRENOM,NOM,TAUX) VALUES (:1,:2,:3,:4)
    Erreur:
    ORA-00001: violation de contrainte unique (LIC12.PK_PATIENTS)
    Je vous rassure tout de suite, il n'est pas seulement question de clef primaire (je ne serais pas là sinon). En effet, la même ligne insérée via SQLplus ne produira pas d'erreur(insertion correct). D'où mon incapacité à trouver la source de cette erreurs.

    Merci de votre aide.

  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
    C'est pas super clair : Tu peux nous donner le détail des 2 blocs (basés, et nom de la table)

    Si j'ai bien compris le fonctionnement :
    B_VISU_PATIENTS est un block multi-record, basé sur PATIENT, dont tu affiches les records au WNFI.

    B_PATIENTS est une block de contrôle, non basé, qui permet de renseigner des infos dans B_VISU_PATIENT par un bouton.

    Un bouton permet d'enregistrer les modifications en base.
    Ce fonctionnement parait correct.
    Pour vérifier ce que forms insère : Mets un trigger PRE-INSERT sur le block basé et mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    message('Pre Insert : '|| :B_VISU_PATIENTS.NUMPAT); 
    message(' ');
    Tu verras pour chaque ligne le n° inséré.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    bonjour,
    le probleme est que si tes 2 block sont basé sur la même table, si de plus les enreg insérés dans un block sont insérés dans l'autre (via le bouton), et bien
    form va insérer 2 fois l'enregistrement.
    Si c'est le cas, le solution et de ne pas baser le block B_TABLE.
    Seul le block de visu doit être basé (ou inversement selon la complexité du form)

    Bonne recherche

  4. #4
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Erreur de ma part, pour corriger cela, je devais mettre la valeur

    "Bloc de données de base de données" à NON

    sur un des blocs, en l'occurence sur le formulaire.

    En espérant que cela puisse servir un jour !

    Merci

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

Discussions similaires

  1. erreur FRM-40508 insertion de données
    Par kalserg dans le forum Forms
    Réponses: 1
    Dernier message: 29/10/2009, 15h40
  2. [C#] Pourquoi mon insertion dans un control DetailView echoue ?
    Par Manwë06 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 26/09/2006, 08h21
  3. Réponses: 1
    Dernier message: 30/11/2005, 13h44
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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