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 mise à jour table Access


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Requête mise à jour table Access
    Bonjour,

    Je développe un projet CRM via VBA excel et je souhaite faire une requête Access pour mettre à jour une table qui n'autorise pas les doublons pour le champs ID. Lors que ma requête s’exécute j'ai un message d'erreur car celle-ci crée une nouvelle entrée au lieu de la mettre à jour.

    Si quelqu'un peut m'aider, mer d'avance

    Voici le code de ma 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
    36
    37
    38
    39
    40
     
    'mise a jour de la fiche
    Sub MajSiren(SIREN)
        Dim Cn As ADODB.Connection
        Dim texte_SQL As String
        Dim Rst As ADODB.Recordset
        Dim i As Integer
        Set Cn = New ADODB.Connection
        '--- Connection ---
        With Cn
            .Provider = "MSDASQL"
            .Open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & BDD
        End With
        '-----------------
        'création d'un nouveau recordset
        texte_SQL = "SELECT * From [Associations] WHERE ID = '" & SIREN & "'"
        Set Rst = New ADODB.Recordset
        'ouverture de la table en référence
        Rst.Open "Associations", Cn, adOpenKeyset, adLockOptimistic, adCmdTable
           'affectation de la valeur des champs du formulaire dans le RecordSet
            Rst.Fields(1).Value = Me.ChSiren
            Rst.Fields(2).Value = Me.ChRaison
            Rst.Fields(4).Value = Me.ChAdresse
            Rst.Fields(7).Value = Me.ChVille
            Rst.Fields(6).Value = Me.ChCode
            Rst.Fields(9).Value = Me.ChNaf
            Rst.Fields(10).Value = Me.ChLibelle
            Rst.Fields(16).Value = Me.ChSecteur
            Rst.Fields(17).Value = Me.ChDelegation
        'Enregistrement du RecordSet dans la table
        Rst.Update
        MsgBox "Enregistrement Effectué"
       '--- Fermeture connexion ---
        Rst.Close
        Cn.Close
        Set Cn = Nothing
        Set Rst = Nothing
        'fermeture du formulaire
        Unload FormSiren
    End Sub

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Tu ne precise pas le type d'operation que tu veux faire, le probleme vient peut-etre de la.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Rst.Open "Associations", Cn, adOpenKeyset, adLockOptimistic, adCmdTable
           'affectation de la valeur des champs du formulaire dans le RecordSet
            Rst.edit
            Rst![ChSiren] = Me.ChSiren
    Aussi il est TRES imprudent d'assigner des valeurs en function de la position du champ.
    La position d'un champ pouvant changer.
    Il est recommande, sauf rares exceptions, de se referer aux champs par leur nom.
    Et en plus c'est plus clair pour l'humain.

    Si tu as besoin d'avoir un nom variable tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim nomChamp as string
    'ici du code qui assigne une valeur a NomChamp
    Rst.fields(NomChamp)=UneValeur
    Et le .value est optionel pour les objets Field.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Edit c'est DAO pas ADO.

    pour la position du champs entièrement d’accord.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     .Fields("ChSiren").Value = Me.ChSiren
     !ChSiren.Value = Me.ChSiren
    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
    Sub MajSiren(SIREN)
        With CreateObject("ADODB.Connection")
            .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BDD & ";"
                With .Execute("SELECT * From [Associations] WHERE ID = '" & SIREN & "'")
                    If .EOF Then .AddNew
                    .Fields(1).Value = Me.ChSiren
                    .Fields(2).Value = Me.ChRaison
                    .Fields(4).Value = Me.ChAdresse
                    .Fields(7).Value = Me.ChVille
                    .Fields(6).Value = Me.ChCode
                    .Fields(9).Value = Me.ChNaf
                    .Fields(10).Value = Me.ChLibelle
                    .Fields(16).Value = Me.ChSecteur
                    .Fields(17).Value = Me.ChDelegation
                    .Update
                    .Close
                End With
               .Close
        End With
        MsgBox "Enregistrement Effectué"
     End Sub

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour dysorthographie.

    Le probleme de Treize013 est justement que son code ajoute un enregistrement au lieu de le modifier.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Invité
    Invité(e)
    Par défaut
    il n'y a pas d'ajout possible sens l'instruction AddNew 'Ajout
    Fields(1).Value = Me.ChSiren
    update


    en revanche si Me.ChSiren est null erreur => Fields(1).Value ="" & Me.ChSiren

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    C'est ce que je pensais mais j'utilise rarement ADO.

    Donc le probleme pourrait venir des donnees selectionnees.
    SIREN n'a peut-etre pas la valeur que Treize013 pense qu'elle a.

    @Treize013 verifie la valeur de ta clef au moment de l'execution.

    aussi je t'invite a typer ton parameter SIREN en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub MajSiren(SIREN as string)
    Plus le compilateur peut faire de verification pour toi moins tu risques des erreurs en production.
    Ce n'est pas 100% garanti mais ca aide.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Paradoxalement il utilise Me.ChSiren alors que Siren est sensé être passé en paramètres à MajSiren???

    Donc il filtre Siren et modifie la valeur par ChSiren si Siren<>ChSiren il y a risque doublons !

    En fait il n'y a pas d'ajout mais juste une modification d'une clé unique par une qui existe déjà.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Septembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Oui effectivement je pense que mes paramètres de fonction été en conflit. En changeant tout ça, un simple Rst.Update et ça fonctionne parfaitement. Merci pour votre aide.

    PS: j'ai aussi suivi vos conseilles pour appeler les champs via leur nom et non leur position.

Discussions similaires

  1. [XL-2007] Mise à jour table access depuis Excel
    Par daimadoshi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/09/2011, 15h15
  2. [AC-2000] Mise à jour Table Access
    Par 30avril1989 dans le forum VBA Access
    Réponses: 7
    Dernier message: 25/05/2010, 08h21
  3. Mise à jour Table Access
    Par 30avril1989 dans le forum VBA Access
    Réponses: 7
    Dernier message: 29/04/2010, 11h01
  4. Mise à jour Tables access via Datagridview
    Par Apocalyptico dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/02/2010, 14h17
  5. Mise à jour table Access en SQL
    Par KrSt94 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/06/2007, 09h47

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