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

VBA Access Discussion :

Récupération de la valeur du dernier numéro auto inséré dans une table Access 2003


Sujet :

VBA Access

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut Récupération de la valeur du dernier numéro auto inséré dans une table Access 2003
    Bonjour,
    J'ai un souci avec une requête sql
    Je dispose de 2 tables TRAVAUX(NUMEROCONT#,TYPEBUDGETTRAV, etc..) et CONTRIBUTION(NumeroCont,DateEnvoiCont,DateReceptionCont) qui sont liées via Numerocont (Il s'agit du résultat d'une spécialisation de la table CONTRIBUTION).
    lorsque j'ajoute un nouvel enregistrement dans la table CONTRIBUTION dont l'identifiant est un numéro auto, je récupère le numéro maximum et je l'utilise pour ajouter un nouvel enregistrement dans la table TRAVAUX.

    mais Access me dit :
    Erreur d'éxécution '3201' :
    Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table "CONTRIBUTION"

    Voici mon code qui s'exécute losque l'on valide 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
    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
    Private Sub ValiderContribTR_Click()
    Dim test As Boolean
    Dim req As String
    Dim req2 As String
    Dim taffect As Recordset
    Dim taffectcont As Recordset
    Dim tcontrib As Recordset
    Dim ttest As Recordset
    Dim tcontribtrav As Recordset
     
    test = VerifierChampsContrib()
     
    If test = True Then 'si tous les champs on été renseignés
        Set bd = DBEngine.Workspaces(0).Databases(0)
     
        'on cherche si une contribution travaux n'est pas déjà rattachée au devis
        req = "SELECT CODEDEV_1, NUMEROCONT FROM AFFECTERCONTRIB WHERE CODEDEV_1='" & Me.RefDevis & "'"
        Set taffect = bd.OpenRecordset(req, DB_OPEN_DYNASET)
        Set tcontrib = bd.OpenRecordset("CONTRIBUTION", DB_OPEN_DYNASET)
     
        If taffect.EOF Then 'si aucune contribution n'est associée au devis, on la crée
            'création dans la table CONTRIBUTION
            tcontrib.AddNew
            tcontrib![DateEnvoiCont] = Me.DateEnvoiContribTrav
            tcontrib.Update
     
            Debug.Print tcontrib("NUMEROCONT") 'j'ai essayé cela mais je sais pas comment attribuer cette valeur à une variable
     
            'on récupère le numéro de la contribution créée (c'est le numéro maximum de la table)
            'req2 = "SELECT max(NUMEROCONT) as MAXNUM FROM CONTRIBUTION"
            req2 = "SELECT @@identity AS MAXNUM FROM CONTRIBUTION" 'j'ai essayé aussi cela
            Set ttest = bd.OpenRecordset(req2, DB_OPEN_DYNASET)
     
            'création dans la table TRAVAUX
            Set tcontribtrav = bd.OpenRecordset("TRAVAUX", DB_OPEN_DYNASET)
            tcontribtrav.AddNew
            tcontribtrav![NUMEROCONT] = ttest![MAXNUM]
            tcontribtrav![TYPEBUDGETTRAV] = RetournerTypeBudget()
            tcontribtrav![MONTANTFCTVATRAV] = Me.MontantFCTVA
            tcontribtrav![MONTANTFRAISADMINTRAV] = Me.MontantFraisAdmin
            tcontribtrav![ETATCONTTRAV] = "E"
            tcontribtrav.Update '<- c'est là qu'est l'os
     
            'attribution de cette contribution au devis ...
    Ce qui est bizarre c'est que j'ai déjà utilisé au moins 5 ou 6 fois ce formulaire sans qu'il y est une erreur

    Si quelqu'un a une idée...

  2. #2
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Par défaut
    Ne cherchez pas. J'ai trouvé d'où venait mon erreur. En fait c'est dû au fait que j'utilise une base serveur et une base cliente et que les tables de la base cliente ne mettent pas à jour celles de la base serveur. Donc lorsque que je créé un nouvel enregistrement dans la table CONTRIBUTION, celui-ci est créé dans la base locale mais pas la base serveur. et lorsque j'ajoute dans la table TRAVAUX un nouvel enregistrement, je lit dans la base serveur : donc le numéro auto n'existe pas, c'est normal que j'ai mon message d'erreur.
    Je vais me replonger dans le tuto "Comment utiliser une application en mode multi-utilisateurs"

  3. #3
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 134
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Normalement, dans Access, un NuméroAuto est interceptable dès la méthode AddNew à travers une variable...
    Donc tu dois pouvoir récupérer ton NuméroUnique pour le réutiliser à bon escient, soit par exemple :
    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
    Sub testGetID()
    Const C = "SELECT * FROM Produits"
    Dim lIDProduct                                              As Long
    Dim oRS                                                      As DAO.Recordset
     
        Set oRS = CurrentDb.OpenRecordset(C, 2)
        With oRS
            .AddNew
             lIDProduct = .Fields("Réf produit")
            .Fields("[Nom du produit]").Value = "Un produit quelconque"
            .Update
            .Close
        End With
        Set oRS = Nothing
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

Discussions similaires

  1. [AC-2007] Comment récupérer la valeur du dernier numéro auto inséré dans une table ?
    Par marot_r dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2010, 17h17
  2. Valeur null dans une table access 2000
    Par thierry007 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/11/2006, 10h16
  3. Réponses: 3
    Dernier message: 23/04/2006, 12h14
  4. [VB6]recherche d'une valeur dans une table access
    Par fahmichebaane dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/04/2006, 15h26
  5. [VBA-A] Récupérer une valeur dans une table Access
    Par Dude2006 dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/04/2006, 23h56

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