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 :

relancer une requete création de table en vba access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut relancer une requete création de table en vba access
    Bonjour à tous et toutes
    J'ai un formulaire qui contient une liste box dont les données sont issu d'une table "T_TEMPORAIRE" qui elle même provient d'une requête création de table "R_MAJ_TEMPORAIRE".
    J'ai inséré un bouton de commande qui appelle une procédure MiseAjour qui contient les différentes fonctions pour créer cette table "T_TEMPORAIRE" ( cf ci-dessous)

    Tout fonctionne bien lorsque je lance la première fois la procédure ( les données s'affichent dans ma liste box).
    Mais lorsque je relance la procédure une deuxième fois la table "T_TEMPORAIRE" pour avoir des autres données, j'ai un message d'erreur qui s'affiche :
    Erreur d'exécution 3211
    le moteur de base de données n'a pa pu verrouiller la table T_TEMPORAIRE" car elle est déjà utilisé par une autre personne ou un autre processus"
    je ne sais pas comment fermer cette table pour relancer la requête création de table

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Option Compare Database
    Public Sub MiseAjour()
     
     
        Dim stDocName As String
        Dim stLinkCriteria As String
        If ExisteTable("T_TEMPORAIRE") Then   ' Si la table recherche existe
            Call Delete_Tbl("T_TEMPORAIRE")   ' on la supprime
        End If
        LanceRequeteCreation (R_MAJ_TEMPORAIRE)   ' lancement requete creation de la nouvelle table
        stDocName = "Menu"
        DoCmd.OpenForm stDocName, , , stLinkCriteria     ' Ouverture du formulaire
     
    End Sub
    Public Function ExisteTable(T_TEMPORAIRE As String) As Boolean   ' Fonction de test existance table
    'Pour fonctionner ce code nécessite la référence
    '   - Microsoft DAO X Object Library
    On Error GoTo Err
        Dim oDb As DAO.Database
        Dim oQdf  As DAO.TableDef
        'Accède à la base de données courante
        Set oDb = CurrentDb
        Set oQdf = oDb.TableDefs(T_TEMPORAIRE)
        'Retourne Vrai
        ExisteTable = True
    fin:
        'Libère les objets
        Set oDb = Nothing
        Set oQdf = Nothing
        Exit Function
    Err:
        'Remonte toutes les erreurs différents de l'erreur 3265
        '(la requête n'existe pas)
        If Err.Number <> 3265 Then
            Err.Raise Err.Number, Err.Source, Err.Description
        End If
        Resume fin
    End Function
     
    '---------------------------------------------------------------------------------------
    'Fonction de suppression d'une table
    '---------------------------------------------------------------------------------------
     
    Public Sub Delete_Tbl(ByVal T_TEMPORAIRE As String)
     
     
        Dim oDb As DAO.Database
     
        Set oDb = CurrentDb
        oDb.TableDefs.Delete "T_TEMPORAIRE"
     
    End Sub
     
     
    '---------------------------------------------------------------------------------------
    'Fonction de création d'une table
    '---------------------------------------------------------------------------------------
    Public Sub LanceRequeteCreation(R_MAJ_TEMPORAIRE As String)    ' lance les requetes creation de table
     
     
      Dim ReqFind As DAO.QueryDef
         Set ReqFind = CurrentDb.QueryDefs("R_MAJ_TEMPORAIRE")   ' lancement requete creation table
     
         ReqFind.Execute          ' execution requete
         Set ReqFind = Nothing    ' fermeture
    End Sub

  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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    plusieurs petites erreurs dans tes lignes de code, avec des chaines en dur au lieu des variables et inversement.

    Je n'ai verifie a ce stade si ces modifs suffisent a corriger le probleme.
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Option Compare Database
    Public Sub MiseAjour()
     
     
        Dim stDocName As String
        Dim stLinkCriteria As String
        If ExisteTable("T_TEMPORAIRE") Then   ' Si la table recherche existe
            Call Delete_Tbl("T_TEMPORAIRE")   ' on la supprime
        End If
        LanceRequeteCreation ("R_MAJ_TEMPORAIRE")   ' lancement requete creation de la nouvelle table
        stDocName = "Menu"
        DoCmd.OpenForm stDocName, , , stLinkCriteria     ' Ouverture du formulaire
     
    End Sub
    Public Function ExisteTable(T_TEMPORAIRE As String) As Boolean   ' Fonction de test existance table
    'Pour fonctionner ce code nécessite la référence
    '   - Microsoft DAO X Object Library
    On Error GoTo Err
        Dim oDb As DAO.Database
        Dim oQdf  As DAO.TableDef
        'Accède à la base de données courante
        Set oDb = CurrentDb
        Set oQdf = oDb.TableDefs(T_TEMPORAIRE)
        'Retourne Vrai
        ExisteTable = True
    fin:
        'Libère les objets
        Set oDb = Nothing
        Set oQdf = Nothing
        Exit Function
    Err:
        'Remonte toutes les erreurs différents de l'erreur 3265
        '(la requête n'existe pas)
        If Err.Number <> 3265 Then
            Err.Raise Err.Number, Err.Source, Err.Description
        End If
        Resume fin
    End Function
     
    '---------------------------------------------------------------------------------------
    'Fonction de suppression d'une table
    '---------------------------------------------------------------------------------------
     
    Public Sub Delete_Tbl(ByVal T_TEMPORAIRE As String)
     
     
        Dim oDb As DAO.Database
     
        Set oDb = CurrentDb
        oDb.TableDefs.Delete T_TEMPORAIRE
     
    End Sub
     
     
    '---------------------------------------------------------------------------------------
    'Fonction de création d'une table
    '---------------------------------------------------------------------------------------
    Public Sub LanceRequeteCreation(R_MAJ_TEMPORAIRE As String)    ' lance les requetes creation de table
     
     
      Dim ReqFind As DAO.QueryDef
         Set ReqFind = CurrentDb.QueryDefs(R_MAJ_TEMPORAIRE)   ' lancement requete creation table
     
         ReqFind.Execute          ' execution requete
         Set ReqFind = Nothing    ' fermeture
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour Jean Philippe,
    Merci pour ta réponse mais j'ai toujours cette erreur qui s'affiche lorsque je relance la procédure "MiseAjour".
    C'est au niveau de la ligne 6 de la fonction Suppression d'une table qui se produit l'erreur
    '---------------------------------------------------------------------------------------
    'Fonction de suppression d'une table
    '---------------------------------------------------------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub Delete_Tbl(ByVal T_TEMPORAIRE As String)
     
        Dim oDb As DAO.Database
     
        Set oDb = CurrentDb
        oDb.TableDefs.Delete T_TEMPORAIRE
     
    End Sub
    Je pense que cette erreur est justifiée car je relance le code sur une table qui est encore ouverte à travers ma listeBox. L'idée serait alors de fermer ma listebox lorsque je relance la procedure MiseAjour.
    Mais je ne sais pas comment fermer une listebox contenu dans un formulaire

  4. #4
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    effectivement, si les donnees sont consultees au moment ou tu souhaites supprimer la table, ca plantouille.

    On ne ferme pas a proprement parler la listbox, sauf si tu veux/peux fermer le formulaire,
    l'idee ici serait de mettre a vide la rowsource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Me.ListBox1.RowSource=""
    Me.ListBox1.Requery
    'ton code de suppression
    Me.ListBox1.RowSource="tonSQL"
    Me.ListBox1.Requery
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. [AC-2007] Utiliser une variable comme alias lors de la création de table via Vba
    Par Tipstitou dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/09/2010, 10h29
  2. Ouverture d'une requete création de table
    Par speleo dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/01/2007, 12h21
  3. Requete création de table sans msg box
    Par louroulou dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 27/06/2006, 16h04
  4. Réponses: 2
    Dernier message: 13/05/2006, 13h25
  5. Une requete sur 3 tables différentes. [Le retour]
    Par CritikKiller dans le forum Requêtes
    Réponses: 11
    Dernier message: 13/03/2006, 01h43

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