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

Requêtes et SQL. Discussion :

ERREUR 3067:Insérer une donnée à condition qu'elle n'existe pas déjà


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut ERREUR 3067:Insérer une donnée à condition qu'elle n'existe pas déjà
    Bonjour à tous,
    (bonne année 2009)
    Je suis sur un conflit lors de l'édition de requête SQL manuellement dans ACCESS 2007.
    Je possede une table LANGUE dans laquelle je veux ajouter un enregistrement si il n'existe pas déjà. Voici les colonnes de la table (la_CodLangue,la_CodTexte,la_LibTexte).
    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    INSERT INTO Langue (la_CodLangue,la_CodTexte,la_LibTexte)
    VALUES ('ALL','PAM00','Strom')
    WHERE NOT EXISTS
    (SELECT 1
    FROM langue L2
    WHERE L2.la_CodLangue = 'ALL'
    AND L2.la_CodTexte='PAM00'
    AND L2.la_LibTexte='Strom')
    ACCESS me donne l'erreur suivante :
    La requête doit être construite à partir d'au moins une table ou une requête source. (Erreur 3067)

    Malgré plusieurs heures de recherche, je panne.

    Merci d'avance.

    Xpmich.

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut Xpmich et bienvenu,

    tu ne peux réaliser l'ajout sous condition en sql.

    pour ce que tu veux faire je te conseil:
    la création d'un index sur: <la_CodLangue>, <la_CodTexte>, <la_LibTexte>
    et de retirer les messages d'erreur dû à l'ajout d'un doublon.

    sinon en vba:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if dcount("*","langue","la_CodLangue = 'ALL' AND la_CodTexte='PAM00' AND la_LibTexte='Strom'")=0 then
       docmd.runsql "INSERT INTO Langue (la_CodLangue,la_CodTexte,la_LibTexte) VALUES ('ALL','PAM00','Strom')"
    end if

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut
    Ok mais je ne travaille pas sous VBa mais via DELPHI qui commande une base ACCESS.
    Mais cela n'importe peu, ce que je recherche, c'est la ligne SQL. Je connais pas les balises, peux tu m'expliquer ?

    Merci d'avance.
    Xpmich

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    dans les icones d'outils du message tu trouve un dièse #
    tu sélectionnes le code que tu poste et tu cliques dessus: cela permet de différencier du message et c'est plus pratique pour la lecture (défilement) et le copie/coller.

    pour en revenir à ton soucis, il faut dans ce cas vérifier l'existe de l'enregistrement avant de faire l'ajout.
    par exemple tu demande le compte d'enregistrement du recordset (.recordcount) que renvoie le:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Langue WHERE (la_CodLangue = 'ALL') AND (la_CodTexte='PAM00') AND (la_LibTexte='Strom')
    s'il est null tu fait ton insert.

    sinon tu défini un index sur les trois champs ce qui empêche l'insertion s'il existe déjà un enregistrement avec ces trois champs.

    mais je ne pourrais t'aider plus sur delphi, je ne l'ai plus cotoyé depuis qq année.

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

Discussions similaires

  1. [XL-2003] Création d'une nouvelle feuille si elle n'existe pas
    Par panda31 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/08/2011, 14h22
  2. Pourquoi ai-je une erreur lors d'une recherche si la valeur n'existe pas ?
    Par blackndoor dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/03/2009, 11h22
  3. Insérer une donnée si elle n'existe pas.
    Par ShortcutZ dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/03/2008, 16h07
  4. Créer une PROC STOCK si elle n'existe pas.
    Par bilay dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 23/02/2007, 09h47
  5. Requête SQL pour insérer une donnée BINAIRE ?
    Par Najdar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/05/2006, 10h21

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