none
requete d'insertion et mise à jour au même temp RRS feed

  • Question

  • salut, je cherche sur le net une requête qui permet de faire l'insertion s'il n'y a pas de doublons et de mise à jours si je trouve un doublons, je trouve cette syntaxe de requete 
    INSERT INTO table (a, b, c)
    VALUES (1, 20, 68)
    ON DUPLICATE KEY UPDATE a=a+1
    dans ce liens SQL ON DUPLICATE KEY UPDATE
    mais il dit que c'est une fonctionnalité de MySQL.
    y-a t-il un équivalent de ça dans access?
    vendredi 1 janvier 2016 15:48

Toutes les réponses

  • Bonjour,

    Si les index de la table cible permettent de gérer convenablement les doublons, plusieurs solutions existent :

    1. Vous pouvez utiliser un Recordset associé à la méthode Execute de l'objet CurrentDB avec le paramètre dbConsistent.
    2. Vous pouvez aussi user d'une gestion d'erreur optimiste où l'erreur 3022 est levée et faire un Resume Next afin d'ignorer l'erreur et continuer...

    On part plus alors du principe qu'il n'y a pas de "Si pas de doublons" mais plutôt d'une tentative de forcer l'insertion et laisser le moteur gérer les conflits de lui-même.

    Par contre pour lUPDATE, ce sera différent...

    Il vous faudra associer quels champs vous souhaitez mettre à jour or, cela, vous ne l'avez pas précisé dans votre question...

    En résumé, il n'existe pas de requêtes combinées qui permettent de faire les deux.


    Argy


    mardi 5 janvier 2016 12:57
    Modérateur
  • le sql d'access ne permet pas de faire ce type de requête le plus simple est de passer par vba. tu ouvre un recordet sur l'enregistrement, tu teste s'il est vide et en fonction tu fait l'ajout ou la modif.

    en gros :

    set rst = dbengine(0)(0).openrecordset("select a,b,c from table where table.a=1;",DAO.dbopendynaset)

    if rst.eof then

    rst.addnew

    rst!a= 1 : rst!b=20 : rst!c=68

    else

    rst!a = rst!a + 1

    end if

    rst.update

    rst.close

    ':) et oui c'est lent

    mercredi 23 mars 2016 16:41