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 :

Requête ajout SQL et plusieurs enregistrements


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut Requête ajout SQL et plusieurs enregistrements
    Bonjour à tous,

    J'ai une requête ajout en SQL qui va chercher les infos dans un formulaire et sous-formulaire.

    Lorqu'il y a qu'un enregistrement dans mon sous-formulaire cela me convient par contre lorsqu'il y en a 2 ou trois j'ajoute dans ma table que le dernier hors je voudrais ajouter dans ma table les 2 ou trois enregistrements.

    Voici le code actuel de ma requête SQL (requête5)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Curatif ( ID_RNC, ac_curative )
    SELECT Forms.f_temp2.iddéfinitif AS numrnc, Forms.f_temp2.SF_curatiftempo.Form.ac_curative AS Actiondemandée;
    .

    J'ai essayé avec du code VBA en plus de la requête
    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
    Function enregistrement_dans_données()
    Dim db As Database
    Dim sql As String
    Dim Rs20 As DAO.Recordset
    Dim qfd20 As DAO.QueryDef
    Dim n20 As String
    Dim t20 As String
    Dim ncd20 As String
     
    DoCmd.SetWarnings False ' pour ne pas avoir de message a chaque ajout
     
    'code pour activer requête
    Set qfd20 = CurrentDb.QueryDefs("requête5")
     
    'ouvre le recordset basé sur la requête
    Set Rs20 = qfd20.OpenRecordset
     
    'Vérifie s'il y a des enregistrements dans le Recordset pour éviter message d'erreur
    If Rs20.BOF = True And Rs20.EOF = True Then GoTo line31
     
    'stocke dans les variables les données de la table sélectionnée en fonction de la requête
    Rs20.MoveFirst
    While Not Rs20.EOF
        With Rs20
            n20 = .Fields("numrnc").Value
            t20 = .Fields("Actiondemandée").Value
     
        End With
     
            Rs20.MoveNext
    Wend
    DoCmd.SetWarnings True
     
    line31:
    End Function
    Mais chaque fois j'obtiens le message suivant
    Erreur exécution code 3061. Trop peu de paramètres. 2 attendus
    Une petite idée ?

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 554
    Points
    24 554
    Par défaut
    Bonjour,

    Au lieu d'utiliser les valeurs du sous-form pour faire un insert, qui de toute façon ne te renvoi que les valeurs de l'enregistrement actif, pourquoi ne pas utiliser la source de ton sous formulaire (requete5 ?). Elle seuls est à même de renvoyer les enregistrements existant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Insert into matable (champ1, champ2) 
    Select monchamp1, monchamp2 From matable Where monchamp1 = " & forms.formsPere.monchamp1Pere
    Pour ton erreur, elle se produit sur l'openrecordset regarde les paramètres pour cette commande. (tuto DAO) il doit manquer dbopendynaset ou quelque chose de ce style.

    Cordialement,

  3. #3
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 554
    Points
    24 554
    Par défaut
    Complément à mon message après analyse attentive de ton code :

    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
    Dim sql As String
    Dim Rs20 As DAO.Recordset
    Dim n20 As String
    Dim t20 As String
    Dim ncd20 As String
     
    DoCmd.SetWarnings False ' pour ne pas avoir de message a chaque ajout
     
     
    'ouvre le recordset basé sur la requête
    Set Rs20 = CurrentDb.OpenRecordset("requête5", dbOpenDynaset)
     
    'Vérifie s'il y a des enregistrements dans le Recordset pour éviter message d'erreur
    If Rs20.EOF = True Then GoTo line31    ' après openrecordset est toujours positionné sur le premier record si eof il n'y a pas de record.
     
    'stocke dans les variables les données de la table sélectionnée en fonction de la requête
    While Not Rs20.EOF
        With Rs20
            n20 = .Fields("numrnc").Value
            t20 = .Fields("Actiondemandée").Value
     
        End With
     
            Rs20.MoveNext
    Wend
    DoCmd.SetWarnings True
     
    line31:
    Rs20.Close  'on est propre on ferme ce qui a été ouvert
    Set Rs20 = Nothing
    n20 et t20 tu en fais quoi ? il sont perdus à la sortie de la fonction !
    Code incomplet ?

    Cordialement,

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 121
    Points : 96
    Points
    96
    Par défaut
    Bonjour Loufab et bonne année 2009,

    Effectivement mon code était incomplet au moment du post.

    En fait je voulais faire une requête s'appuyant uniquement sur les champs de mon formulaire et sous-formulaire.

    Mais finalement depuis je me suis rabattu sur le contenu de la table de mon sous-formulaire.

    J'ai solutionné mon pbe de cette manière.

    Voici le code pour ceux que ça peut aider dans un pbe similaire.
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Function ajoutcuratif()
    Dim db As Database
    Dim sql As String
    Dim Rs20 As DAO.Recordset
    Dim qfd20 As DAO.QueryDef
    Dim accu20 As String
    Dim respcu20 As String
    Dim id20 As String
    Dim delaicura20 As String
    Dim visacu20 As String
    Dim ok20 As Boolean
    Dim nok20 As Boolean
     
     
    DoCmd.SetWarnings False ' pour ne pas avoir de message a chaque ajout
     
    'code pour activer requête
    Set qfd20 = CurrentDb.QueryDefs("r_testacuratif")
     
    'paramètre : permet de prendre en compte le paramètre dans la requête
    qfd20.Parameters("[Formulaires]![f_temp2]![texte12]") = [Forms]![f_temp2]![Texte12]
     
     
    'ouvre le recordset basé sur la requête
    Set Rs20 = qfd20.OpenRecordset
     
    'Vérifie s'il y a des enregistrements dans le Recordset pour éviter message d'erreur
    If Rs20.BOF = True And Rs20.EOF = True Then GoTo line31
     
    'stocke le contenu du champ dans la variable
    id20 = [Forms]![f_temp2]![iddéfinitif]
     
    'stocke dans les variables les données de la table sélectionnée en fonction de la requête
    Rs20.MoveFirst
    While Not Rs20.EOF
        With Rs20
            accu20 = .Fields("ac_curative").Value
            respcu20 = .Fields("Resp_cura").Value
            delaicura20 = .Fields("Delai_cura").Value
            visacu20 = .Fields("Visa_cura").Value
     
                'exécute la requête d'ajout dans la table
                sql = "INSERT INTO [curatif](ID_RNC,ac_curative,Resp_cura,Delai_cura,Visa_cura) VALUES ('" & id20 & "', '" & accu20 & "', '" & respcu20 & "', '" & delaicura20 & "','" & visacu20 & "' )"
                DoCmd.RunSQL sql
     
        End With
     
            Rs20.MoveNext
    Wend
    DoCmd.SetWarnings True
     
    line31:
    Rs20.Close  'on est propre on ferme ce qui a été ouvert
    Set Rs20 = Nothing
    End Function
    J'ai pris en compte tes 2 lignes de code

    Merci tout de même de t'être intéresser à mon pbe et à bientôt

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 017
    Points : 24 554
    Points
    24 554
    Par défaut
    Tu peux mettre directement les .fields() à la place des variables dans la construction de ta chaine insert.

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

Discussions similaires

  1. [MySQL] Update sql sur plusieurs enregistrements
    Par selimdjaf dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/04/2013, 14h51
  2. [AC-2003] Traduction en VBA d'une requête Sélection SQL sur plusieurs tables
    Par Pucho Faritas dans le forum VBA Access
    Réponses: 9
    Dernier message: 29/10/2009, 10h32
  3. Requête ajout pour un seul enregistrement.
    Par galtitou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 26/01/2009, 09h09
  4. Réponses: 12
    Dernier message: 27/08/2004, 15h42
  5. SQL et Access : ajouter plusieurs enregistrements
    Par Bernard M dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 21h39

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