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 :

Mise a jour paramétrée + Boucle


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Mise a jour paramétrée + Boucle
    Bonjour,
    Je vous explique mon problème, je cherche a creer une mise a jour d'un table tampon a partir d'un formulaire cependant celle-ci est parametrée par des variables et donc si possible dans une boucle For:

    Voici mon idée

    -> L'utilisateur entre le mois qu'elle souhaite recuperer dans une base
    -> on recupere dans la base tampon les données correspondante au moins
    -> on duplique tous les enregistrement selon le nombre de mois restant

    Pour cette duplication je veut executer autant de requete selection qu'il reste de mois dans l'année et changer la valeur du mois de chaque enregistrement selectionner avec la valeur de la variable a chaque tour de boucle

    J'ai écrit cela :


    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
    Private Sub Commande3_Click()
     
     For L = 1 To 8
        Dim db As DAO.Database
        Set db = DBEngine.OpenDatabase("C:\Documents and Settings\delannoyga\Bureau\BDDEffectifs.mdb", False, False, ";PWD=skyline;")
     
        Set db = CurrentDb.QueryDefs("INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)=[Mois Réel]));")
          With db
             .Parameters("Mois Réel") = L
             .execute
          End With
     
     
        ' Exécution de la requête
        db.execute "INSERT INTO VISEES ( Codsoc, CSoc, Mat, Année, Mois, NomP, NomU, Prénom, CCP, Emp, ETP, Sb, Statut, GA, Contrat, Statut2, Visee ) SELECT VISEES.Codsoc, VISEES.CSoc, VISEES.Mat, VISEES.Année, VISEES.Mois = L, VISEES.NomP, VISEES.NomU, VISEES.Prénom, VISEES.CCP, VISEES.Emp, VISEES.ETP, VISEES.Sb, VISEES.Statut, VISEES.GA, VISEES.Contrat, VISEES.Statut2, VISEES.Visee FROM VISEES"
        Debug.Print "Records Affected = " & db.RecordsAffected
        db.Close
     
     
    Next L
     
    End Sub
    Cependant je n'arrive pas a parametrer correctement mes requetes

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    salut,
    une seule ouverture de base est nécessaire, pas la peine l'ouvrir, la fermer et l'ouvrir 8 fois

    d'autre part, il faut t'assurer que toutes les values sont bien dans l'ordre et récupèrent bien le bon type de retour...

  3. #3
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Bonjour
    Citation Envoyé par goot26 Voir le message
    Je vous explique mon problème, je cherche a creer une mise a jour d'un table tampon a partir d'un formulaire cependant celle-ci est parametrée par des variables et donc si possible dans une boucle For
    Je n'arrive pas à bien comprendre ce que tu veux faire. Tu ne l'as pas suffisamment expliqué.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En fait je souhaiterais creer un enregistrement pour chaque mois de ma boucle

    cela procederai comme suit
    copie de l'enregistrement a partir d'un mois de base (disons 9)
    changement du mois pour qu'il soit a 10

    et ainsi de suite jusque 12.

    Et cela en fonction d'un mois réel choisi (donc si c'est le mois 2 on recomment le processus de 2 a 12)

    Pour cela je comptais recuperer la valeur du mois réel pour le debut de ma boucle, et a chaque fois que mon L s'implement le recuperer pour changer la valeur du mois

    Merci de votre aide

    Ps :Mes requetes sont ok elles fonctionne mon réel probleme est le passage d'un parametre en variable ne necessitant pas d'intervention de l'utilisateur

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé la solution seulement mon code est très très moche
    Auriez vous une idée pour le boucler?
    En fait je part d'un formulaire avec 2 ListBox et 12 checkbox pour les 12 mois de l'année

    Autre question: Comment faire pour que les checkbox ce check automatiquement?
    Je m'explique : si je check le mois 1 comment faire pour que les 11 autre se check
    et ainsi de suite si je selection le mois 9 comment faire pour les 10,11,12

    Merci !

    [VBA]
    Private Sub Commande3_Click()
    Dim db As DAO.Database
    Set db = DBEngine.OpenDatabase("C:\Documents and Settings\delannoyga\Bureau\BDDEffectifs.mdb", False, False, ";PWD=skyline;")


    ' Mois 1

    If Cocher1.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 1;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 2

    If Cocher2.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 2;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 3

    If Cocher3.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 3;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 4

    If Cocher4.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 4;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 5

    If Cocher5.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 5;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 6

    If Cocher6.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 6;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 7

    If Cocher7.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 7;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 8

    If Cocher8.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 8;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 9

    If Cocher9.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 9;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 10

    If Cocher10.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 10;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 11

    If Cocher11.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 11;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"
    End If
    'Mois 12

    If Cocher12.Value = True Then

    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois = 12;"
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"

    MsgBox ("Actualisation Terminée")

    End If

    End Sub
    [/VBA]

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 370
    Points
    34 370
    Par défaut
    salut,
    je pense que c'est plus intéressant de passer par une petite fonction avant qui te retourne une valeur en fonction des de la value des cases à cocher

    du style (non testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function test() as integer
    dim temp as control
    for each temp in Me.controls
    if instr(temp,"Cocher") and temp.value = true then
    test = mid(temp.name, len(temp.name -1),1)
    end if
    next
    end function

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai ma soluce en evitant la redondance des cases

    Code :

    Private Sub Cbon_Click()
    Dim db As DAO.Database
    Set db = DBEngine.OpenDatabase("C:\Documents and Settings\delannoyga\Bureau\BDDEffectifs.mdb", False, False, ";PWD=skyline;")

    For L = Me![Liste3] To 12
    db.execute "INSERT INTO VISEES SELECT * FROM EFFECTIFS WHERE (((EFFECTIFS.Mois)= " & Me![Liste1] & "))"
    db.execute "UPDATE VISEES SET VISEES.Mois =" & L
    db.execute "UPDATE VISEES SET VISEES.Visee='" & Me![Liste2] & "'"
    db.execute "INSERT INTO EFFECTIFS SELECT * FROM VISEES"
    db.execute "DELETE * FROM VISEES"

    Next L

    MsgBox (" L'Actu a été envoyée dans la base avec succés ")
    End Sub

Discussions similaires

  1. [AC-2007] Requête mise à jour paramétré variable
    Par Barbare01 dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/06/2015, 14h32
  2. Mise à jour en Boucle pour Microsoft Visual C++
    Par Sheriff dans le forum Windows Vista
    Réponses: 3
    Dernier message: 28/06/2011, 08h25
  3. Requete de mise a jour : paramètre attendu
    Par le_niak dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/03/2007, 11h52
  4. [VBA-E]Boucle mise a jour label
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/03/2006, 14h32
  5. Visualisation des mise à jour en réseau
    Par fandor7 dans le forum Paradox
    Réponses: 2
    Dernier message: 06/12/2002, 15h54

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