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 :

Modifier une table liée en cours de lecture


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 18
    Par défaut Modifier une table liée en cours de lecture
    Bonjour,

    A l'ouverture mais aussi à la fermeture d'un formulaire de ma base frontale, je souhaite exécuter un SQL (UPDATE...) sur ma base dorsale.
    je me confronte au message d'erreur d'exécution 3048 et l'impossibilité d'ouvrir plusieurs bases de données.
    Mes tables liées semblent être en lecture seule et je n'arrive pas à contourner mon problème.

    Un extrait de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim strChemin as string
    Dim DistantDB as DAO.Database
    Dim SQLcode as string
     
    strChemin = CurrentProject.Path & "MaBaseDorsale.mdb"
    Set DistantDB = OpenDatabase(strChemin)
    SQLcode = "UPDATE ......"
    DistantDB.Execute SQLcode
    DistantDB.Close
    Set DistantDB = Nothing
    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pourquoi ouvres-tu la dorsale? Une table liée se comporte comme un table locale. Tu peux donc l'adresser directement sans devoir ouvrir la dorsale.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 18
    Par défaut
    Merci pour la réponse

    Aussi j'ai testé ce code pour modifier la table mais rien ne semble se mettre à jour...y a un truc qui doit m'échapper....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim DB as DAO.Database
    Dim SQLcode as string
     
    Set DB = Currentdb
    SQLcode = "UPDATE ......"
    DB.Execute SQLcode
    DB.Close
    Set DB = Nothing

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il faudrait donner le code sql utilisé.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 18
    Par défaut
    le code SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "UPDATE INTERLOCUTEURS SET dateMAJ = dateMAJ2 WHERE N°INTERLOCUTEUR = " & Me.N°INTERLOCUTEUR & ";"
    Ce code SQL a pour vocation depuis mon formulaire "INTERLOCUTEURS" de modifier un champs de ma table liée portant le même nom...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si ton n°interlocuteur est une valeur string, tu dois l'encadrer entre des apostrophes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE INTERLOCUTEURS SET dateMAJ = dateMAJ2 WHERE N°INTERLOCUTEUR = '" & Me.N°INTERLOCUTEUR & "';"
    DateMAJ2 est un champ de la table Interlocuteurs ou bien cette date vient-elle d'ailleurs? Si elle vient d'ailleurs (variable ou date système), tu dois aussi l'intégrer dans la requête comme tu l'as fait pour le n°Interlocuteur.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bonjour,

    bien vérifier que :
    - toutes les bases ouvertes avec opendatabase sont fermées avec close
    (ne pas fermer si ouvert avec set db = currentdb)
    - toutes les base instanciées (set db = currentdb ou set db = opendatabase(...)) sont libérées (set db = nothing)
    - tous les recordset ouverts avec set rs = db.openrecordset sont fermés avec rs.close et libérés avec set rs = nothing)

    parfois si ne libère pas explicitement avec set ... = nothing (et surtout si on ne ferme pas (avec close) ce qu'on a ouvert), il reste un objet ouvert et au bout d'un moment ça coince

    sinon, éviter les noms de tables ou champs avec des caractères spéciaux (le ° de N°INTERLOCUTEUR), on a parfois des problèmes incompréhensibles avec ces caractères (surtout les anciennes versions d'access).

    bon courage, pas facile à pister ce genre d'erreur

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Arkham,

    Content de voir ta bestiole

    Ce qui est étrange, c'est que cela se passe avec une table liée et pas avec la même table rapatriée en local. Je pense pourtant que le comportement des objets mal fermés est le même en local qu'en lié, non?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Ce qui est étrange, c'est que cela se passe avec une table liée et pas avec la même table rapatriée en local. Je pense pourtant que le comportement des objets mal fermés est le même en local qu'en lié, non?
    Faut voir le code...
    Si en local c'est du Set db = CurrentDb au lieu de Set db = OpenDatabase(...) alors ça change tout.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je suppose que le test liée/locale a été effectué sans modification du code.

    Cela dit, il utilise set db = currentdb, donc il n'ouvre pas à nouveau sa base, non?

    Cela étant, sur une table liée, il n'a même pas besoin d'utiliser set db =.

    Il peut créer la chaîne de requête et l'utiliser directement avec docmd.runsql qui va travailler sur CurrentDB par défaut.

    Ta remarque est donc judicieuse, car pour travailler en sql sur les tables liées, tout comme sur les locales d'ailleurs, il peut supprimer les objets DB. Cela supprimerait les connexions intempestives via set db =, quelle que soit la façon d'attribuer une base à l'objet DB.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 18
    Par défaut
    Bonsoir
    Merci pour toutes ces réflexions...je vais tenter d'en faire bon usage et passer tout ça au peigne fin.
    Egalement, on m'a conseillé de passer mon code en transaction, qu'en pensez-vous ?

Discussions similaires

  1. [AC-2003] Modifier une table liée
    Par willou-78 dans le forum VBA Access
    Réponses: 16
    Dernier message: 16/01/2012, 12h27
  2. Modifier la structure d'une table liée
    Par Stargate SG1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/05/2009, 12h56
  3. Modifier le type d'un champ d'une table liée à un fichier CSV
    Par Borowsky dans le forum Modélisation
    Réponses: 3
    Dernier message: 26/03/2009, 12h14
  4. Comment modifier un champ dans une table liée ?
    Par HookerSeven dans le forum Access
    Réponses: 11
    Dernier message: 05/02/2006, 23h50

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