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 :

Peut ouvrir un tableau avec Recorset alors qu'il est déjà en utilisation [AC-365]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    DI trés débutant...
    Inscrit en
    Mars 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : DI trés débutant...

    Informations forums :
    Inscription : Mars 2020
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Peut ouvrir un tableau avec Recorset alors qu'il est déjà en utilisation
    Bonjour

    J'ai créé une base de gestion de comptes personnel.
    J'ai créé en autre ce code qui fonctionne très bien

    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
    Private Sub TaOpModePaiement_Exit(Cancel As Integer)
     
    If TaOpModePaiement = "Ch?que" Then
     
    Dim Base As DAO.Database
    Dim rst As Recordset
    Dim VarX As Variant
    Dim CompteActuel As Variant
    Dim NumChec As Variant
    Dim CheServ As String
     
     
    CompteActuel = Application.TempVars("Moncompte").Value
    VarX = DFirst("[NumCheque]", "Req_ListeCheque", "[NumCompte]= " & CompteActuel)
    NumChec = InputBox("Veuillez saisir le num?ro du ch?que : ", "N? de ch?que", VarX)
    TaOpNumCheque = NumChec
     
    Set Base = CurrentDb
    Set rst = Base.OpenRecordset("SELECT * From TabCheque where NumCheque = " & NumChec, dbOpenDynaset)
     
    CheServ = -1
    rst.Edit
    rst.Fields("ChequeServi").Value = CheServ
    rst.Update
     
    rst.Close
    Set rst = Nothing
    Set Base = Nothing
     
    End If
     
    End Sub
    Il me permet de me proposer le numéro de chèque suivant et de le pointer comme quoi il a servi

    Là où j'ai un problème, c'est sur celui-ci (le code n'est pas finit, il est en cours de construction :

    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
    Private Sub TaOpDebit_AfterUpdate()
     
    Form.Refresh
     
    Dim Base As DAO.Database
    Dim rst As Recordset
    Dim CompteActuel As Variant
    Dim Solde As Variant
    Dim Debit As Variant
    Dim Credit As Variant
     
    Dim NumChec As Variant: Dim NC As Variant
    Dim CheServ As String: Dim Cle As Variant
     
    Solde = 0
    CompteActuel = Application.TempVars("Moncompte").Value
     
    MsgBox CompteActuel
     
    Set Base = CurrentDb
    Set rst = Base.OpenRecordset("SELECT * From TabOp?ration where TaOpNumCompte =" & CompteActuel, dbOpenTable)
    Do
        Debit = rst.Fields("TaOpDebit").Value
        Credit = rst.Fields("TaOpCredit").Value
        Solde = Solde + Credit - Debit
    rst.MoveNext
    Loop Until rst.EOF = True
     
    MsgBox Solde
     
    rst.Close
    Set rst = Nothing
    Set Base = Nothing
    End Sub
    En fait mon code bogue à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = Base.OpenRecordset("SELECT * From TabOp?ration where TaOpNumCompte =" & CompteActuel, dbOpenTable)
    et je ne vois pas de différence (mise à part mon tableau et variable bien-sûr) avec le premier code

    Première question, mon tableau est relié à mon formulaire qui est ouvert, est ce là le problème ? Peux t'on ouvrir la table par recordset dire que la table est déjà en service ?

    Si quelqu'un à la solution...

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour et bienvenue,

    Pouvez-vous nous donner le message d'erreur qui s'affiche sur cette ligne ?

    Sinon, c'est normal ce nom "TabOp?ration" pour votre table ?

    Cordialement,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    l'option dbOpenTable du paramètre Type de la commande OpenRecordSet n'est utilisable qu'avec le nom d'une table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = Base.OpenRecordset("TabCheque", dbOpenTable)
    donc pas de sélection possible, sauf si on utilise la commande Seek pour trouver l'enregistrement sélectionné, mais cela implique l'utilisation d'un index, donc si Numcheque fait partie des index de la table, c'est possible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rst.Index = "Numcheque"
    rst.Seek "=", NumChec
    If rst.NoMatch Then 
        MsgBox " pas trouvé"
    Else
    '...
    End If
    Sinon il faut utiliser dbOpenSnapShot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = Base.OpenRecordset("SELECT * From TabCheque where NumCheque = " & NumChec, dbOpenSnapShot)
    Première question, mon tableau est relié à mon formulaire qui est ouvert, est ce là le problème ? Peux t'on ouvrir la table par recordset dire que la table est déjà en service ?
    non, ce n'est pas le problème, on peut même utiliser RecordSetClone qui est la copie conforme du Recordset du formulaire
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    DI trés débutant...
    Inscrit en
    Mars 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : DI trés débutant...

    Informations forums :
    Inscription : Mars 2020
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Bonjour à vous

    pour User, voici le message

    Nom : Capture.PNG
Affichages : 91
Taille : 11,3 Ko

    Pour tee_grandbois, le premier code fonctionne très bien. C'est le deuxième code qui ne fonctionne pas

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    En fait comme le dit teegrandbois, il te faut utiliser le parametre dbopensnapshot à la place de dbopentable, car là il attend une table et pas un sql ou une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = Base.OpenRecordset("SELECT * From TabOp?ration where TaOpNumCompte =" & CompteActuel, dbOpenSnapshot)
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  6. #6
    Membre à l'essai
    Homme Profil pro
    DI trés débutant...
    Inscrit en
    Mars 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : DI trés débutant...

    Informations forums :
    Inscription : Mars 2020
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    mais effectivement,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = Base.OpenRecordset("SELECT * From TabOperation where TaOpNumCompte =" & CompteActuel, dbOpenSnapshot)
    avec dbOpenSnapshot cela fonctionne

    Merci et bonne soirée

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Pour tee_grandbois, le premier code fonctionne très bien. C'est le deuxième code qui ne fonctionne pas
    oui effectivement, j'aurai dû prendre le code qui posait problème pour mes exemples
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/02/2012, 14h39
  2. Réponses: 4
    Dernier message: 23/07/2009, 11h01
  3. Réponses: 7
    Dernier message: 29/01/2009, 12h32
  4. Ouvrir nouveau mail avec tableau dans Lotus Notes
    Par z980x dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 09/08/2007, 14h25
  5. [Excel]Ouvrir un tableau avec une liste modifiable
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/05/2006, 09h52

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