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 :

ODBC - ne peut pas verrouiller tous les enregistrements [AC-2007]


Sujet :

Access

  1. #1
    Invité
    Invité(e)
    Par défaut ODBC - ne peut pas verrouiller tous les enregistrements
    Bonjour à tous,

    Je dois migrer les tables locales Access sur sql server, seulement voilà, j'ai des soucis sur une table en particulier, la table IMMATRICULATION, elle a un champ IMMAT déclaré comme étant une clé primaire.

    Quand je veux exécuter le code suivant:
    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
    Dim mydb As Database
    Dim myrs As Recordset
    Dim req As String
    Set mydb = CurrentDb()
     
    DoCmd.Hourglass True
     
    req = "SELECT * FROM IMMATRICULATION WHERE IMMAT ='" & Me.Liste_CANum & "'"
    Set myrs = mydb.OpenRecordset(req, dbOpenDynaset, dbDenyWrite)
     
    If myrs.RecordCount > 0 Then
        IMMAT = myrs![IMMAT]
        MARQUE = myrs![MARQUE]
        MODELE = myrs![MODELE]
        PRIX = myrs![PRIX]
        DATE = myrs![DATE]
        AMO_DUREE = myrs![AMO_DUREE]
        AMO_MONTANT = myrs![AMO_MONTANT]
        AMO_DEBUT = myrs![AMO_DEBUT]
        AMO_FIN = myrs![AMO_FIN]
        ASS_MONTANT = myrs![ASS_MONTANT]
        SOM = myrs![SOMMEIL]
    Else
        myrs.AddNew
        myrs![IMMAT] = Me.Liste_CANum
        myrs.Update
        IMMAT = Me.Liste_CANum
        MARQUE = ""
        MODELE = ""
        PRIX = ""
        DATE = ""
        AMO_DUREE = ""
        AMO_MONTANT = ""
        AMO_DEBUT = ""
        AMO_FIN = ""
        ASS_MONTANT = ""
        SOM = "Non"
    End If
    myrs.Close
    mydb.Close
    DoCmd.Hourglass False
    La ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myrs = mydb.OpenRecordset(req, dbOpenDynaset, dbDenyWrite)
    est en erreur, j'obtiens comme message d'erreur
    ODBC - ne peut pas verrouiller tous les enregistrements
    Auriez-vous des idées de comment résoudre le problème?

    Merci

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

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : Finance

    Informations forums :
    Inscription : mai 2004
    Messages : 4 950
    Points : 11 409
    Points
    11 409
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Sans doute que tu utilises dbDenyWrite conjointement avec un dbOpenDynaset dont le but est effectivement d'empêcher d'autres utilisateurs de modifier les enregistrements dans ce laps de temps.
    Utilise un dbOpentable plutôt...

    Par ailleurs, j'avoue ne pas comprendre comment sont initialisés les champs qui précèdent les signes = (IMMAT, MARQUE, MODELE, PRIX, DATE, AMO_DUREE, AMO_MONTANT, AMO_DEBUT, AMO_FIN, ASS_MONTANT, SOM)...

    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 2013 et 2016 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myrs = mydb.OpenRecordset(req, dbOpentable)
    Ne fonctionne pas, j'ai un message d'erreur qui est :
    Le moteur de base de données Microsoft Office Access n'a pas pu trouver l'objet "SSELECT * FROM IMMATRICULATION WHERE IMMAT = '018RV40'". Assurez-vous que l'objet existe et que vous avez correctement saisi son nom et son chemin d'accès.
    Même message d'erreur avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myrs = mydb.OpenRecordset(req, dbOpentable, dbDenyWrite)
    Question : en ouvrant le formulaire où je rencontre cet erreur, j'ai un champ combo qui est rempli en exécutant une requête depuis la feuille des propriétés, dans l'onglet "Données", puis dans "Contenu" : serait-il d’exécuter cette requête dans du code VBA Access, lors du chargement du formulaire? Ainsi, je pourrais fermer (proprement?) la connexion à l'odbc une fois le champ entièrement remplie.

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

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : Finance

    Informations forums :
    Inscription : mai 2004
    Messages : 4 950
    Points : 11 409
    Points
    11 409
    Billets dans le blog
    5
    Par défaut
    Attention, un dbOpenTable ne doit pas pointer vers une requête (SELECT * FROM...) mais une table.

    Si tu nous disais explicitement le cheminement de ce que tu veux faire, je pourrais t'aider mais là, c'est encore floue...
    [EDIT]
    au niveau du code j'entends...
    [/EDIT]

    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 2013 et 2016 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Invité
    Invité(e)
    Par défaut
    Auparavant, ma table IMMATRICULATION se trouvait sur un fichier access externe, là, j'ai migré cette table sur sql server, depuis, je rencontre l'erreur dont je fais mention.

    Comme je n'arrive pas à me familiariser avec cette façon de programmer, j'ai tout refais, j'ai mis à la place le code suivant :

    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
    Dim l_conn As ADODB.Connection
    Dim l_cmd As ADODB.Command
    Dim l_rst As ADODB.Recordset
    Dim l_query As String
    Set l_conn = New ADODB.Connection
    l_conn.ConnectionString = MyConnectionString()
    l_conn.Open
     
    l_query = "SELECT IMMAT, MARQUE, MODELE, PRIX, DATE, AMO_DUREE, AMO_MONTANT, AMO_DEBUT, AMO_FIN, ASS_MONTANT, SOMMEIL "
    l_query = l_query & "FROM IMMATRICULATION WHERE IMMAT ='" & Me.Liste_CANum & "'"
    Set l_cmd = New ADODB.Command
    With l_cmd
        .ActiveConnection = l_conn
        .CommandText = l_query
    End With
     
    Set l_rst = l_cmd.Execute
    If l_rst.EOF = False Then
        'j'ai un enregistrement
        IMMAT = l_rst.Fields(0).Value
        MARQUE = l_rst.Fields(1).Value
        MODELE = l_rst.Fields(2).Value
        PRIX = l_rst.Fields(3).Value
        DATE = l_rst.Fields(4).Value
        AMO_DUREE = l_rst.Fields(5).Value
        AMO_MONTANT = l_rst.Fields(6).Value
        AMO_DEBUT = l_rst.Fields(7).Value
        AMO_FIN = l_rst.Fields(8).Value
        ASS_MONTANT = l_rst.Fields(9).Value
        SOM = l_rst.Fields(10).Value
        l_query = ""
    Else
        l_query = "INSERT INTO IMMATRICULATION (IMMAT, SOMMEIL) VALUES ('" & Me.Liste_CANum & "', 0)"
        IMMAT = Me.Liste_CANum
        MARQUE = ""
        MODELE = ""
        PRIX = ""
        DATE = ""
        AMO_DUREE = ""
        AMO_MONTANT = ""
        AMO_DEBUT = ""
        AMO_FIN = ""
        ASS_MONTANT = ""
        SOM = "Non"
    End If
    l_rst.Close
     
    If l_query <> "" Then
        l_cmd.CommandText = l_query
        Set l_rst = l_cmd.Execute
    End If
     
    Set l_rst = Nothing
    l_conn.Close
    et là, tout fonctionne désormais!!!

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

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : Finance

    Informations forums :
    Inscription : mai 2004
    Messages : 4 950
    Points : 11 409
    Points
    11 409
    Billets dans le blog
    5
    Par défaut
    Chat alors!

    Je te conseille toutefois de greffer une gestion d'erreurs et en //, de tester la propriété State de ton objet l_conn avant de le fermer pour éviter une erreur.

    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 2013 et 2016 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

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

Discussions similaires

  1. [MySQL] Une requête qui ne marche pas sur tous les enregistrements
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/04/2010, 13h20
  2. ODBC -- Ne peut pas verrouiller tous les enregistrements.
    Par etoileetoile dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 17/10/2009, 12h12
  3. [AC-2000] 3254 ODBC -- Ne peut pas verrouiller tous les enregistrements.
    Par etoileetoile dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 17/10/2009, 12h11
  4. Réponses: 1
    Dernier message: 09/02/2007, 09h45
  5. Réponses: 6
    Dernier message: 29/03/2006, 11h22

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