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 :

Problème avec une requête de mise à jour


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut Problème avec une requête de mise à jour
    Salut tout le monde
    Je reçois le message d'erreur suivant "L'opération doit utiliser une requête qui peut être mise à jour " après l'excution de cette requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sqlUpdate = " UPDATE T_Agent SET Matricule = " & ValeurDeMask(oblmskMatricule(0)) & ", Prenom = '" & obltxtPrenom(1) & "', Nom = '" & obltxtNom(2) & "',DateDeNaissance = " & ValeurDeMask(oblmskDateDeNaissance(3)) & ",   " & _
                " LieuDeNaissance = '" & txtLieuDeNaissance(4) & "', DateEmbauche = " & ValeurDeMask(mskDateEmbauche(5)) & ", Adresse = '" & txtAdresse(6) & "' , Telephone = '" & txtTelephone(7) & "',SoldeAgent = " & txtSolde(8) & ", " & _
                " idFonction = (SELECT idFonction FROM T_Fonction WHERE NomFonction = '" & obldcFonction(9) & "' ),idService = (SELECT idService FROM T_Service WHERE NomService = '" & obldcService(10) & "' ),EnActivite = '" & txtActivite(11) & "',Observation='" & txtObservation(12) & "' ,Photo = '" & txtPhoto(13) & "' " & _
                " WHERE Matricule = '" & frmPrincipal.Matricule & "' "
    Quand j'enlève la partie en gras tout sa passe bien .
    Est ce qu'il y'a un moyen de contourner le problème ?
    Scuse me while I kiss the sky ! Jimi Hendrix

  2. #2
    Invité
    Invité(e)
    Par défaut Pourquoi ne pas...
    Salut Bujuman,

    Pourquoi ne pas récupérer les variables qui te posent problème, séparément !?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim ValId1
    ValId1 = dlookup("idFonction","T_Fonction","NomFonction = '" & obldcFonction(9) & "'" )
    Et dans la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     " idFonction = " & ValId1 &", etc...
    Ce n'est pas trop pro, mais ça permet de contourner le problème, du moins je pense !

    A+

  3. #3
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    En fait l'interface est faite en VB6.
    Scuse me while I kiss the sky ! Jimi Hendrix

  4. #4
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    Si tu es en VB6 tu peux toujours utiliser les Recordset si tu as en Référence une bibliothèque DAO.
    On peut remplacer le Dlookup() par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    Dim Bd as Database , Rs as Recordset
    Dim ValId1
     
    Set Bd = OpenDatabase( "C:\APP\MaBase.mdb") 
    Set Rs = Bd.Openrecordset( SELECT idFonction FROM T_Fonction 
     WHERE NomFonction = '" & obldcFonction(9) & "'", DbOpenDynaset)
    If not Rs.eof then 
       ValId1 = Rs!idFonction
    Endif
     
    Rs.close
    Set Bd=nothing
     
     
    SqlUpdate = ...... " idFonction = " & ValId1 &", etc...

  5. #5
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Donc Access n'accepte pas les sous-requêtes dans une requête de mise à jour ?
    Scuse me while I kiss the sky ! Jimi Hendrix

  6. #6
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Honnêtement moi je n'utilise pas ce type d'écriture SQL, mais je crois pouvoir affirmer que l'on peut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ' Exemple
    Msql= " Select * From ( Select * From Table1 Where x=10) "
    Par contre d'attribuer une valeur via un Update là je suis pas sûr que cela fonctionne, mais je le répète je n'utilise pas cette syntaxe.

    Peut-être d'autres avis

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 263
    Points : 19 428
    Points
    19 428
    Billets dans le blog
    63
    Par défaut
    @ trini:

    si je t'ais bien compris tu souhaites remplacer le dlookup par une fonction prédéfinie (utilisant DAO) et que tu incorpore dans le sql initiale à la place de la partie en gras ???

    Mais sous VB6 le sql accepte t'il les fonctions prédéfinies ???

    @+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    lut User

    en fait j'ai oublié un petit guillement avant le select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set Rs = Bd.Openrecordset( "SELECT idFonction FROM T_Fonction 
     WHERE NomFonction = '" & obldcFonction(9) & "'", DbOpenDynaset)
    Là je construis en fait une chaîne de caractère, comme sous Access et obldcFonction(9) doit retourner une valeur, donc ça doit marcher.

    Et Bujuman il en pense quoi

  9. #9
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Citation Envoyé par Trini
    lut User

    en fait j'ai oublié un petit guillement avant le select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set Rs = Bd.Openrecordset( "SELECT idFonction FROM T_Fonction 
     WHERE NomFonction = '" & obldcFonction(9) & "'", DbOpenDynaset)
    Là je construis en fait une chaîne de caractère, comme sous Access et obldcFonction(9) doit retourner une valeur, donc ça doit marcher.

    Et Bujuman il en pense quoi
    J'ai pas essayé. Mon intuition me dit que ça doit marcher. Sauf que :

    - dans ce cas il me faudra excuter deux requêtes.
    - si la sous-requête envoie plusieurs valeurs ça devient plus compliqué

    Merci tout de même
    Scuse me while I kiss the sky ! Jimi Hendrix

  10. #10
    Membre éclairé Avatar de Le Pharaon
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 880
    Points : 742
    Points
    742
    Par défaut
    Scuse me while I kiss the sky ! Jimi Hendrix

Discussions similaires

  1. [MySQL-5.5] Problème avec une requête de mise à jour entre deux tables
    Par hermes1383 dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/11/2014, 10h52
  2. Problème sur une requête de mise à jour entre 2 tables
    Par Throbb dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/03/2009, 14h43
  3. Problème avec une requête
    Par ringostarr dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/04/2005, 20h34
  4. Problème avec une requête
    Par snoopy69 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2005, 12h39
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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