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

Access Discussion :

Comment intégrer une requête dans une requète mise à jour ?


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment intégrer une requête dans une requète mise à jour ?
    je veux lancer en VBA l'exécution d'une requète mise à jour à partir d'une requête sélection sous Access 2000

    j'ai une erreur "Opération non valide" erreur 3219
    C'est le recordset Rs2 qui plante

    j'ai fais ça :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Function rechercheilotage()
     
    Dim Db As Database
    Dim Rs1 As DAO.Recordset
    Dim Rs2 As DAO.Recordset
    Dim ref_nat
    Dim NomCat As Variant
    Dim RefNat As Variant
    Dim Delais As Variant
    Dim IlotIDF As Variant
    Dim IlotOrefi As Variant
    Dim NonIlot As Variant
    Dim txt
     
    'Instancie la base de données
    Set Db = CurrentDb
     
    'Ouvre le recordset basé sur la requête "recherche_délai"
    Set Rs1 = Db.OpenRecordset(Db.QueryDefs("recherche_delais").SQL, dbOpenDynaset)
    'Set Rs1 = Db.OpenRecordset("SELECT Delais.N°, Delais.[Ilotage Soisson_Choisy], Delais.[Ilotage regions], Delais.[Reseau Orefi], Delais.[Non iloté], Delais.NomCat, Delais.NomRefNat, Delais.NomDelais FROM Delais")
     
    'Stocke dans les variables les données de la table Délais
    With Rs1
          NomCat = .Fields("NomCat").Value
          RefNat = .Fields("NomRefNat").Value
          Delais = .Fields("NomDelais").Value
          IlotIDF = .Fields("Ilotage Soisson_Choisy").Value
          IlotOrefi = .Fields("Reseau Orefi").Value
          NonIlot = .Fields("Non iloté").Value
          .Close
    End With
     
    Set Rs2 = Db.OpenRecordset("UPDATE (SELECT [" & NomCat & "].[" & RefNat & "], [Iloteidf-01].[ref nat x], [Iloteidf-01].[Total], [" & NomCat & "].[" & Delais & "] FROM [" & NomCat & "] LEFT JOIN [Iloteidf-01] ON [" & NomCat & "].[" & RefNat & "] = [Iloteidf-01].[ref nat x] WHERE ([Iloteidf-01].[Total])='O'), Delais SET [" & NomCat & "].[" & Delais & "] = [Delais].[Ilotage Soisson_Choisy]")
     
    End Function

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Re: Comment intégrer une requête dans une requète mise à jou
    Jenny_jen,
    Citation Envoyé par Jenny_jen
    je veux lancer en VBA l'exécution d'une requète mise à jour à partir d'une requête sélection sous Access 2000
    Je ne crois pas que le moteur de bases de données JET (utilisé par Access) accepte un UPDATE sur une sous-requête.
    Ton pb étant une mise à jour impliquant 2 tables, tu peux utiliser une requête UPDATE multi-table.

    La syntaxe est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE <table 1> INNER JOIN <table 2>
    ON <table 1>.<champ joint> =  <table 2>.<champ joint>
    SET <champ concerné> = <nouvelle valeur>
    WHERE <condition>
    ce qui donnerait dans ton cas...

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    Function rechercheilotage()
     
    Dim Db As Database
    Dim Rs1 As DAO.Recordset
    Dim Rs2 As DAO.Recordset
    Dim ref_nat
    Dim NomCat As Variant
    Dim RefNat As Variant
    Dim Delais As Variant
    Dim IlotIDF As Variant
    Dim IlotOrefi As Variant
    Dim NonIlot As Variant
    Dim txt
    Dim SQL as String
     
    'Référence la base de données
    Set Db = CurrentDb
     
    'Ouvre le recordset basé sur la requête "recherche_delais"
    Set Rs1 = Db.OpenRecordset("recherche_delais")
     
    'Stocke dans les variables les données de la table Délais
    With Rs1
          NomCat = .Fields("NomCat").Value
          RefNat = .Fields("NomRefNat").Value
          Delais = .Fields("NomDelais").Value
          IlotIDF = .Fields("Ilotage Soisson_Choisy").Value
          IlotOrefi = .Fields("Reseau Orefi").Value
          NonIlot = .Fields("Non iloté").Value
          .Close
    End With
     
    ' Construit la requête de mise à jour
    SQL ="UPDATE [" & NomCat & "] LEFT JOIN [Iloteidf-01] ON [" & NomCat & "].[" & RefNat & "] = [Iloteidf-01].[ref nat x] SET [" & NomCat & "].[" & Delais & "] = [Delais].[Ilotage Soisson_Choisy] WHERE ([Iloteidf-01].[Total])='O'"
     
    ' Exécute la requête de mise à jour
    Db.Execute SQL
     
    End Function

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment intégrer une requête dans une requète mise à jou
    Bonjour

    Merci pour ta réponse.

    Mais maintenant j'ai une erreur sur cette ligne "Db.Execute SQL"

    Erreur 3061 Trop peu de paramètres. 1 attendu.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Function rechercheilotage()
     
    Dim Db As Database
    Dim Rs1 As DAO.Recordset
    Dim Rs2 As DAO.Recordset
    Dim NomCat As Variant
    Dim RefNat As Variant
    Dim Delais As Variant
    Dim IlotIDF As Variant
    Dim IlotOrefi As Variant
    Dim NonIlot As Variant
    Dim SQL As String
     
    'Instancie la base de données
    Set Db = CurrentDb
     
    'Ouvre le recordset basé sur la requête "recherche_délai"
    Set Rs1 = Db.OpenRecordset(Db.QueryDefs("recherche_delais").SQL, dbOpenDynaset)
    'Set Rs1 = Db.OpenRecordset("SELECT Delais.N°, Delais.[Ilotage Soisson_Choisy], Delais.[Ilotage regions], Delais.[Reseau Orefi], Delais.[Non iloté], Delais.NomCat, Delais.NomRefNat, Delais.NomDelais FROM Delais")
     
    'Stocke dans les variables les données de la table Délais
    With Rs1
          NomCat = .Fields("NomCat").Value
          RefNat = .Fields("NomRefNat").Value
          Delais = .Fields("NomDelais").Value
          IlotIDF = .Fields("Ilotage Soisson_Choisy").Value
          IlotOrefi = .Fields("Reseau Orefi").Value
          NonIlot = .Fields("Non iloté").Value
          .Close
    End With
     
    ' Construit la requête de mise à jour
    SQL = "UPDATE [" & NomCat & "] LEFT JOIN [Iloteidf-01] ON [" & NomCat & "].[" & RefNat & "] = [Iloteidf-01].[ref nat x] SET [" & NomCat & "].[" & Delais & "] = [Delais].[Ilotage Soisson_Choisy] WHERE ([Iloteidf-01].[Total])='O'"
     
    ' Exécute la requête de mise à jour
    Db.Execute SQL
     
    End Function

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Oups,
    Au passage la table [Délais] s'est "égarée" dans la nature.

    Donc il faut en dire plus sur cette table et comment elle s'articule avec la requête multi-table.

    Par ailleurs, pour déboguer tes requêtes SQL, tu peux profiter du tutoriel de déboguage de requêtes SQL écrites avec VBA http://cafeine.developpez.com/access...el/debugprint/

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment intégrer une requête dans une requète mise à jou
    la table Delais est une table remplie par un formulaire qui stocke les délais qui vont permettre de mettre à jour la table Catalogue

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/06/2015, 17h52
  2. Réponses: 6
    Dernier message: 11/06/2009, 18h16
  3. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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