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 :

Update entre une table et une vue


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 335
    Points : 112
    Points
    112
    Par défaut Update entre une table et une vue
    Bonjour,

    J'utilise dans mon application des tables et des vues liées.
    Je voudrais "updater" une table PARTS. Dans le SQL Query analyseur, l'expression suivante fonctionne parfaitement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE PARTS 
    SET PARTS.Price = SPMAST.[SPEUR] 
    FROM SPMAST
    WHERE PARTS.HPN = LTRIM(SPMAST.[PART#])
    Mais sous acces, j'ai une erreur me disant qu'il y a une erreur de syntaxe (opérateur manquant), et il me met entre '': SPMAST.[SPEUR] FROM SPMAST.

    Après un peu de recherche sur le forum, j'ai vu qu'une expression de ce type pouvait convenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    list = ""
        list = "Update PARTS INNER JOIN SPMAST ON LTRIM(SPMAST.[PART#]) = PARTS.HPN  "
        list = list & "Set PARTS.price = SPMAST.[SPEUR] "
    ;"

    Et là j'ai une erreur me disant que cette opération doit utiliser une requête "updatable"

    Si quelqu'un voit pourquoi l'une ou l'autre solution ne marche pas.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    bonsoir,

    si les deux tables PARTS et SPMAST sont sur le serveur SQL tu peux mettre le code de ta première requête dans une requête Access "SQL Direct"

    cette opération doit utiliser une requête "updatable"
    Peut-être la table a été liée sans clé.

    Sinon une alternative au deuxième code SQL Jet serait:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Update PARTS
    Set PARTS.price = DLookup("SPEUR", "SPMAST", "Trim([PART#])='" & PARTS.HPN & "'")
    WHERE EXISTS (SELECT [PART#] FROM SPMAST WHERE Trim([PART#]) = PARTS.HPN)

    A+

  3. #3
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 335
    Points : 112
    Points
    112
    Par défaut
    Merci pour ta réponse. Quand j'essaie d'exécuter le code, j'ai une erreur au niveau du DLookup, il me sélectionne le premier membre et me met le message d'erreur: Erreur de compilation. Attente de la fin de l'expression.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 335
    Points : 112
    Points
    112
    Par défaut
    Je précise que je n'ai pas les droits d'écriture sur la vue SPMAST avec que j'ai tous les droits sur la table PARTS, au cas où pourrait aider.

  5. #5
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 335
    Points : 112
    Points
    112
    Par défaut
    Voila encore une expression qui fonctionne dans le SQL Query analyser, mais qui me donne une erreur de syntaxe (opérateur manquant), et me sélectionne la fin de l'expression à partir de SPMAST.SPEUR.

    Update PARTS Set PARTS.price = SPMAST.SPEUR FROM SPMAST INNER JOIN PARTS ON LTrim(SPMAST.[PART#]) = PARTS.HPN;

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonsoir,

    j'ai une erreur au niveau du DLookup, il me sélectionne le premier membre et me met le message d'erreur: Erreur de compilation. Attente de la fin de l'expression.
    Le code était du SQL.
    Pour le mettre dans une variable String en vb, il faut doubler les " à l'intérieur de la chaîne de caractères (String).
    Il n'y a pas de caractère d'échapement.

    Par exemple si je veux mettre 12"05 dans une chaîne de caractères
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim strMaChaine As String
    strMaChaine = "12""05"
    MsgBox strMaChaine
    Pour la requête donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strSQL as String
     
    strSQL = "UPDATE PARTS " & _
    "SET PARTS.price = DLookup(""SPEUR"", ""SPMAST"", ""Trim([PART#])='"" & PARTS.HPN & ""'"")" & _
    "WHERE EXISTS (SELECT [PART#] FROM SPMAST WHERE Trim([PART#]) = PARTS.HPN)"

    Sinon pour que la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE PARTS INNER JOIN SPMAST ON PARTS.HPN = TRIM(SPMAST.[PART#]) 
    SET PARTS.price = [SPMAST].[SPEUR];
    fonctionne il faut une clé sur la table liée PARTS et sur la vue liée SPMAST.
    Cette clé se définie lorsqu'on lie les tables/vues, c'est à dire quand on crée les tables liées, lorsque Access demande "Sélectionner un identificateur unique d'enregistrement".
    On sélectionne alors un ou plusieurs champs qui permettront d'identifier de manière unique chaque enregistrement.


    Une dernière chose.
    La syntaxe du SQL de SQL Serveur diffère de celle du SQL d'Access (Jet).
    SQL Query analyseur ne peut valider que du code SQL pour SQL Serveur.

    Voila, je pense avoir tout dit.

    A+

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50

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