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

SQL Firebird Discussion :

INSERT INTO dans un champ avec contrainte.


Sujet :

SQL Firebird

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut INSERT INTO dans un champ avec contrainte.
    Bonjour à tous.

    Je me permets de poster pour parler d'un problème que je rencontre et pour lequel je n'ai pas trouvé de réponse dans les topics existants ni dans la FAQ (partie requête, notamment).
    Si j'avais loupé une entrée existante répondant à ce souci, j'en suis désolé !


    Développant un petit utilitaire PHP qui interagit avec une base Firebird, j'ai régulièrement besoin de créer ou updater des entrées. Cependant, je suis actuellement embêté car certains champs constituent des clés étrangères et requièrent donc une requête SQL dont j'ignore la bonne nomenclature.

    Avec la requête suivante (où param1 est une clé étrangère) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO ma_table(param1,param2,param3)
    VALUES ('a','b','c')
    j'ai évidemment une erreur : violation of FOREIGN KEY constraint "FK_param1" on table "autre_table"

    J'ai testé d'autres nomenclatures comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO ma_table(param1,param2,param3)
    VALUES ((SELECT param1 FROM autre_table WHERE param4='x'),'b','c')
    (où param4='x' permet de sélectionner le param1 pour qu'il vaille a), mais sans succès.

    Sauriez-vous m'indiquer quelle est la bonne forme pour une telle requête ?
    N'hésitez pas à demander plus de précisions si mon topic est incomplet.

    Merci d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 152
    Points : 1 414
    Points
    1 414
    Par défaut
    le problème n'est pas lié à la requête mais aux contraintes.

    Comme "Param1" est une clé étrangère liée à la table "autre_table", as-tu vérifié que la valeur "a" est bien existante dans cette table (autre_table) ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci de ta réponse rapide !

    Oui la valeur 'a' existe bien. Actuellement je travaille encore sur une base assez légère qui fait office de test, donc j'ai pas trop de mal à vérifier que tel ou tel truc existe bien.

    Mon problème est que si je rentre 'a' en dur, comme dans le premier code que j'ai donné, j'ai l'erreur indiquée et que je ne connais pas la nomenclature pour lui dire d'aller chercher la valeur de la clé pour la mettre.

    Petite précision aussi : la requête est exécutée via du PHP (donc fonction ibase avec les paramètres qui vont bien). Je ne crois pas que ça ait une influence mais par souci d'exhaustivité, je le précise.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 152
    Points : 1 414
    Points
    1 414
    Par défaut
    ???

    as tu fais attention à la casse (a versus A), à des espaces éventuels ?...

    pourrais-tu fournir le script de ces 2 tables avec les déclarations des clés primaires et secondaires ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui je suis très vigilant à la casse. En l'occurrence a = 101 donc la question ne se pose pas.

    Je peux aller chercher les scripts même si je ne suis pas encore très familier avec FB (c'est une table qu'on me fournit et sur laquelle je travaille), mais si je peux me permettre, je ne pense pas que ça soit le souci.

    Mon problème me semble assez clair, c'est juste qu'il me manque la bonne nomenclature : je ne peux pas indiquer la clé étrangère en dur (normal) et les quelques formulations comme le deuxième code de mon premier post ne sont pas les bonnes.
    J'ai tâché de farfouiller un peu pour trouver comme faire une sql insert dans un champ avec contrainte sur FB, mais peu de résultats sur le net. :/

  6. #6
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 576
    Points
    576
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO ma_table(param1,param2,param3)
    VALUES ((SELECT param1 FROM autre_table WHERE param4='x'),'b','c')
    Cette requête est parfaitement valable, mais est-tu sur que la sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT param1 FROM autre_table WHERE param4='x'
    retourne bien une ligne ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Normalement oui, mais bien vu, on va faire pas à pas histoire de spoter le souci ! ^^
    Je regarde ça et reviens dire ce qu'il en est.

    Merci de confirmer que c'était la bonne requête en tous cas.

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je suis une vraie ouiche, j'avais mal géré une des contraintes, c'est pourquoi la requête que je pensais fausse (mais que TryExceptEnd m'a confirmé être finalement bonne) ne fonctionnait pas.

    Merci de la rapidité de vos réponses, je pense que du coup je peux mettre en "résolu".

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

Discussions similaires

  1. [AC-2010] Insertion texte dans un champ avec VBA
    Par redojackson dans le forum VBA Access
    Réponses: 6
    Dernier message: 21/07/2014, 08h08
  2. Insert into dans un champ de type "timestamp"
    Par sylvette dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/10/2007, 17h35
  3. INSERT INTO dans un champ mémo
    Par Cri Cross dans le forum VBA Access
    Réponses: 12
    Dernier message: 05/03/2007, 16h24
  4. Insert Into dans une table avec select
    Par smail25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2006, 13h06
  5. insertion d'un nombre a virgule dans un champ avec un requete sql
    Par sundjata dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/05/2006, 16h29

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