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 :

access vba sql Update dans un formulaire [AC-2013]


Sujet :

Access

  1. #1
    Membre régulier
    Femme Profil pro
    Technicienne
    Inscrit en
    Mai 2013
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicienne
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 96
    Points : 89
    Points
    89
    Par défaut access vba sql Update dans un formulaire
    Bonjour,
    je m'aventure dans le SQL. J'ai besoin de mettre un champ de formulaire à jour. Comme 1re aventure, j'ai testé ce bout de code pour corriger directement dans la table pour un no de projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Maj_anSco()
    Dim strSQL As String
     
    'mise à jour AnSco dans la table clientèle
    Set cnsAn = CurrentProject.Connection
    strSQL = "UPDATE TbClientele SET " _
    & "TbClientele.AnSco = '21-22'" _
    & "WHERE (((TbClientele.NoProjet)='ac-1a'));"
    cnsAn.Execute strSQL
     
    End Sub
    après bien des difficultés pour trouver la bonne syntaxe ça a fonctionné, la mise à jour a été faite dans ma table, pour le noProjet spécifié.

    Alors là, je veux adapter cette procédure à ma procédure existante dans mon formulaire : voici le code qui se trouve dans mon formulaire :
    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
    commande existante dans mon formulaire FormClientele- Sur clic l'année se modifie  : 
     
    Private Sub ModifAnSco_Click()
    Dim MaDate, MonMois
     
    MaDate = Now()          ' Assign a date.
    MonMois = Month(MaDate)    ' MyMonth contains 2.
    'Me.UserNom = "PMC"
    Select Case MonMois
       Case "7", "8", "9", "10", "11", "12"
        Me.AnSco = Format(Now(), "yy") & "-" & (Format(Now(), "yy") + 1)
       Case Else
        Me.AnSco = Format(Now(), "yy") - 1 & "-" & (Format(Now(), "yy"))
     End Select
      Refresh
    End Sub
    mais là, je bbbbbbloque. Par quel bout prendre tout ça, j'ai bien fait quelques tentatives mais <niet>, rien de bon. Entre autre, comment lui dire de prendre l'enregistrement courant.

    Alors merci de m'éclairer.

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 095
    Points : 5 211
    Points
    5 211
    Par défaut
    Bonjour,

    Tout d'abord quelques remarques sur ce qui marche déjà :

    - cnsAn ne sert à rien, autant écrire directement currentdb.execute
    - si on ajoute dbfailonerror, .execute a une gestion d'erreur qui permet de gagner beaucoup de temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentdb.Execute strSQL, dbfailonerror
    - dans ton code, WHERE n'est pas précédé d'un espace et c'est une chance que cela marche. En débuggage, un petit msgbox strSQL permet de voir bien des choses...

    Pour ce qui suit il n'y a pas grand chose à dire sinon que format renvoie du texte donc format(...) - 1 renvoie une erreur. Je suis même surpris que cela soit accepté par le compilateur ?
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre régulier
    Femme Profil pro
    Technicienne
    Inscrit en
    Mai 2013
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicienne
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 96
    Points : 89
    Points
    89
    Par défaut
    Merci <Nico84> pour les remarques, j'ai testé le Msgbox sur strSQL et j'ai constaté qu'il manquait bien un espace avant le Where, et bizarrement ça fonctionnait.
    J'ai aussi fait les corrections proposées pour l'exécution du code : currentdb.Execute strSQL, dbfailonerror

    Le code fonctionne bien, si je corrige directement dans la table j'ai bien = 21-22. Mais pas dans un formulaire.

    J'ai commencé à tester pour la seconde partie de mon message pour modifier l'année scolaire dans un formulaire, avec ce 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
    Sub Maj_anSco()
    Dim MaDate, MonMois
    Dim AnCorrection As String
    Dim strSQL As String
     
    MaDate = Now()
    MonMois = Month(MaDate)
     
    Select Case MonMois
       Case "7", "8", "9", "10", "11", "12"
          AnCorrection = Format(Now(), "yy") & "-" & (Format(Now(), "yy") + 1)
       Case Else
          AnCorrection = Format(Now(), "yy") - 1 & "-" & (Format(Now(), "yy"))
    End Select
     
    MsgBox AnCorrection  'affiche 21-22
     
    'mise à jour AnSco dans la table clientèle
     
    strSQL = "UPDATE TbClientele SET " _
    & "TbClientele.AnSco = " & AnCorrection & " WHERE (((TbClientele.NoProjet)='ac-1a'))"  'affiche -1  devrait avoir 21-22
    'MsgBox strSQL
     
    CurrentDb.Execute strSQL, dbFailOnError
    End Sub
    J'ai donc besoin de conseil sur 2 problèmes :
    1- là j'ai la valeur -1, mais c'est 21-22 que je veux
    2- dans le WHERE au lieu d'avoir WHERE (((TbClientele.NoProjet)='ac-1a')) je veux que ce soit le projet de l'enregistrement en cours.

    Quand je comprends pas quelque chose je dis que c'est du chinois, mais je pense que je vais dire que c'est du SQL maintenant.

    Quelques conseils seraient bien appréciés. Merci à l'avance

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 095
    Points : 5 211
    Points
    5 211
    Par défaut
    Citation Envoyé par LiseUEMPT Voir le message
    j'ai testé le Msgbox sur strSQL et j'ai constaté qu'il manquait bien un espace avant le Where, et bizarrement ça fonctionnait.
    C'est normal, ' est un séparateur suffisant


    Citation Envoyé par LiseUEMPT Voir le message
    1- là j'ai la valeur -1, mais c'est 21-22 que je veux
    ansco est une variable texte, il faut donc écrire (pareil que ci-dessus, msgbox strSQL permet de voir ce genre d'erreur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TbClientele.AnSco = '" & AnCorrection & "' WHERE ...

    Citation Envoyé par LiseUEMPT Voir le message
    2- dans le WHERE au lieu d'avoir WHERE (((TbClientele.NoProjet)='ac-1a')) je veux que ce soit le projet de l'enregistrement en cours.
    Il faut remplacer ac-1a par le nom du champ qui le contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...WHERE (((TbClientele.NoProjet)='" & monchamp & "'))

    Citation Envoyé par LiseUEMPT Voir le message
    Quand je comprends pas quelque chose je dis que c'est du chinois, mais je pense que je vais dire que c'est du SQL maintenant.
    Essaie le chinois d'abord
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre régulier
    Femme Profil pro
    Technicienne
    Inscrit en
    Mai 2013
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicienne
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 96
    Points : 89
    Points
    89
    Par défaut
    Un grand merci, ouf! quel soulagement de voir le soleil poindre à l'horizon, oups! je m'égare.
    J'ai fait les corrections proposées et tout fonctionne.

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

Discussions similaires

  1. Requête SQL UPDATE dans VBA
    Par Pingouin22 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 23/09/2022, 10h37
  2. VBA SQL Update avec DSum problème de quote dans mon code
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2017, 17h39
  3. [AC-2010] renommer en vba un bouton dans un formulaire access ouvert
    Par djino66 dans le forum Access
    Réponses: 5
    Dernier message: 15/04/2016, 23h49
  4. Réponses: 0
    Dernier message: 08/11/2007, 09h04
  5. [CR][Access] intégrer un viewer dans un formulaire access
    Par nicolak dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 13/01/2003, 15h52

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