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 :

formulaire et sous formulaire access (vba access)


Sujet :

Access

  1. #1
    Membre régulier Avatar de alexkickstand
    Inscrit en
    Octobre 2002
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 165
    Points : 105
    Points
    105
    Par défaut formulaire et sous formulaire access (vba access)
    Bonjour, jai un souci avec mon appli access :

    j'ai un formulaire access avec un combo box qui récupere un champ de la table 'Edb'.

    dans ce meme formulaire il y a un sous formulaire qui affichent les données de la table 'Edb temp' qui est vide.

    quand je sélectionnes dans le combo box une donnée (je ferme le formulaire a la sélection), je copie cette donnée dans la table 'Edb temp1' puis copie de la table 'Edb temp1' ces données dans la table 'Edb temp'.

    seul probleme je ne peux pas écrire dans la table 'Edb temp' pourtant mon formulaire est fermé.

    "erreur : runtime error '3211'
    the database engine could not lock table 'Edb temp' because it is already in use by another person or process"

    voici le code de la fonction :

    *****************************************
    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
     
    'combo récupere la valeur du combobox
    Function copycombo(combo)
     
    'Déclaration des variables
    Dim dbs As Database
    Dim qdf As QueryDef
    Dim STR_SQL1, STR_SQL2, STR_SQL3
     
    'je ferme le formulaire Edb
    DoCmd.Close acForm, "Edb"
    Set dbs = CurrentDb
     
    ' on supprime la table Edb temp1 si elle existe
    On Error Resume Next
    DoCmd.DeleteObject acTable, "Edb temp1"
     
    'requete sql on copie les enregistrements de edb dans une table temporaire suivant litem du combo box
    STR_SQL1 = "SELECT [Edb].* INTO "
    STR_SQL2 = "[Edb temp1] FROM [Edb] "
    STR_SQL3 = "WHERE [Edb].item ='" & combo & "';"
    STR_SQL1 = STR_SQL1 & STR_SQL2 & STR_SQL3
    dbs.Execute (STR_SQL1)
    dbs.Close
     
    'je supprime la table Edb temp si elle existe
    On Error Resume Next
    DoCmd.DeleteObject acTable, "Edb temp"
     
    'requete sql on copie les enregistrements de edb temp1 dans la Edb temp suivant litem du combo box
    STR_SQL1 = "SELECT [Edb temp1].* INTO "
    STR_SQL2 = "[Edb temp] FROM [Edb temp1] "
    STR_SQL3 = "WHERE [Edb temp1].item ='" & combo & "';"
    STR_SQL1 = STR_SQL1 & STR_SQL2 & STR_SQL3
    dbs.Execute (STR_SQL1)
    dbs.Close
     
    'je réouvre le formulaire
    DoCmd.OpenForm ("Edb")
     
    End Function
    ******************************************

    jesperes que mon explication est assez claire.

    merci d'avance pour de l'aide

    Alex

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Ne sachant pas la ligne qui pose problème je te suggère d'essayer un Doevents avant chaque requête pour être sûr qu'il termine bien les opérations.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre régulier Avatar de alexkickstand
    Inscrit en
    Octobre 2002
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 165
    Points : 105
    Points
    105
    Par défaut re formulaire et sous formulaire
    Salut , quand le code va pour supprimer la table Edb temp (ligne 27)
    il ne le fait pas me disant que la table est déja utilisé mais le formulaire est fermé au début de la fonction ligne (10).

    je ne sais pas quoi faire

    merci d'avance

    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
     
    1   'combo récupere la valeur du combobox
    2   Function copycombo(combo)
    3 
    4   'Déclaration des variables
    5   Dim dbs As Database
    6   Dim qdf As QueryDef
    7   Dim STR_SQL1, STR_SQL2, STR_SQL3
    8 
    9   'je ferme le formulaire Edb
    10  DoCmd.Close acForm, "Edb"
    11  Set dbs = CurrentDb
    12 
    13  'on supprime la table Edb temp1 si elle existe
    14  On Error Resume Next
    15  DoCmd.DeleteObject acTable, "Edb temp1"
    16  'requete sql on copie les enregistrements de edb dans une table 
    17  'temporaire suivant litem du combo box
    18  STR_SQL1 = "SELECT [Edb].* INTO "
    19  STR_SQL2 = "[Edb temp1] FROM [Edb] "
    20  STR_SQL3 = "WHERE [Edb].item ='" & combo & "';"
    21  STR_SQL1 = STR_SQL1 & STR_SQL2 & STR_SQL3
    22  dbs.Execute (STR_SQL1)
    23  dbs.Close
    24 
    25  'je supprime la table Edb temp si elle existe
    26  On Error Resume Next
    27  DoCmd.DeleteObject acTable, "Edb temp"
    28
    29  'requete sql on copie les enregistrements de edb temp1 dans  Edb 
    30  'temp suivant litem du combo box
    31  STR_SQL1 = "SELECT [Edb temp1].* INTO "
    32  STR_SQL2 = "[Edb temp] FROM [Edb temp1] "
    33  STR_SQL3 = "WHERE [Edb temp1].item ='" & combo & "';"
    34  STR_SQL1 = STR_SQL1 & STR_SQL2 & STR_SQL3
    35  dbs.Execute (STR_SQL1)
    36  dbs.Close
    37 
    38  'je réouvre le formulaire
    39  DoCmd.OpenForm ("Edb")
    40 
    41  End Function

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Ce code est plus que bizarre.

    Plusieurs remarques :
    2 on error resume next alors qu'un seul est valide pour toute ta fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    STR_SQL1 = "SELECT [Edb].* INTO "
    STR_SQL2 = "[Edb temp1] FROM [Edb] "
    STR_SQL3 = "WHERE [Edb].item ='" & combo & "';"
    STR_SQL1 = STR_SQL1 & STR_SQL2 & STR_SQL3
    Il vaut mieux écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    STR_SQL1 = "SELECT [Edb].* INTO "
    STR_SQL1 =STR_SQL1 &  "[Edb temp1] FROM [Edb] "
    STR_SQL1= STR_SQL1 & "WHERE [Edb].item ='" & combo & "';"
    Libère tes objets par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    set dbs = nothing
    set qdf = nothing
    Au passage Qdf n'est pas utilisé dans ton programme.

    Sinon pour ton problème.
    Commence par faire une réparation/compactage de la base.
    Mets un Doevents après la fermeture de ton formulaire.

    Fais un essai en mettant tes resume next en commentaire ou en traitant véritablement les erreurs qui peuvent se produire.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

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

Discussions similaires

  1. Lier un sous-formulaire à un sous-formulaire
    Par bobosh dans le forum IHM
    Réponses: 2
    Dernier message: 02/03/2021, 11h45
  2. Réponses: 5
    Dernier message: 06/05/2015, 12h24
  3. Réponses: 2
    Dernier message: 24/06/2013, 09h31
  4. Réponses: 2
    Dernier message: 23/06/2013, 21h07
  5. Accéder à un sous-formulaire de sous-formulaire
    Par touftouf57 dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/11/2008, 19h04

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