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

Bases de données Delphi Discussion :

Impossible d'ouvrir une base Access à part quand mon application est en cours


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    529
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 529
    Points : 464
    Points
    464
    Par défaut Impossible d'ouvrir une base Access à part quand mon application est en cours
    Bonjour,
    je développe une application sous Delphi7. J'utilise accessapplication pour accéder à une base et adoconnection pour une autre (cas spécial). Mon application marche très bien, seulement si mon application est ouverte et je souhaite ouvrir une base quelconque : cette dernière ne s'ouvre pas.
    accessapplication1.connectkind:=ckNewInstance;
    Merci.
    Deux, n'apprendront pas; le timide et l'arrogant

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 453
    Points : 24 864
    Points
    24 864
    Par défaut
    Tu mélange un pilotage d'ACCESS en OLE et une connexion ADO, c'est étrange, je n'aurais choisi que l'ADO
    Ta base de donnée est dans un fichier, il est toujours là où c'est ton programme qui le stocke en ressource, l'extrait, le modifie et le réintègre en ressource comme une fausse base embarquée ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    529
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 529
    Points : 464
    Points
    464
    Par défaut
    merci ShaiLeTroll ,
    voici le problème qui m'a poussé à cette utilisation étrange. j'ai une base volumineuse et quand je souhaité importer les données d'une table avec ado je devais parcourir toutes la table ce qui me prenait beaucoup de temps donc j'ai opté pour accessapplication qui me permet d'exporter les enregistrements de la table ou via requête ce qui me fait gagné énormément de temps.
    donc j'ai trouvé la solution on travaillant avec des variants
    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
    implementation
      uses unitdm, Unit2,Unitdm1,Unitdm2,UnitDMetat;//,unitsplash;
    {$R *.dfm}
    var access,access1,access2:variant;
    ----
      Access := CreateOleObject('Access.Application');
      try
       Access.OpenCurrentDatabase (chemin1,false,mpasse);
      ...........//exportation des tables et requêtes
     finally
         
          //Access.Quit;
          Access:= unassigned;
    
        end;// fin try
    vous remarquerez que j'ai annulé l'instruction access.quit car après son exécution microsoftaccess s'ouvre et devient visible et on annulant l'instruction il n'st pas visible.
    Merci encore.
    Deux, n'apprendront pas; le timide et l'arrogant

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    j'ai toujours le même doute concernant votre approche du problème !
    j'ai une base volumineuse et quand je souhaité importer les données d'une table avec ado je devais parcourir toutes la table ce qui me prenait beaucoup de temps donc j'ai opté pour accessapplication qui me permet d'exporter les enregistrements de la table ou via requête ce qui me fait gagné énormément de temps.
    je me souviens bien de ce sujet même si je ne retrouve pas la discussion. Je reste persuadé que le problème ne viens pas d'une base volumineuse mais de votre façon de la traiter. Pire il me semble que vous vous enferrez dans une solution inadéquate.

    Si j'ai bien compris votre démarche vous accéder a une base A géré par un SGBDR que nous décrirons comme externe (sur un serveur) au poste client
    vous avez des problèmes de temps de connexion à votre base car la table à récupérer est trop "volumineuse"
    la solution que vous apporter est de récupérer la table dans une base ACCESS pour ouvrir ensuite celle-ci.

    Moi, je vois que ainsi votre programme récupère deux fois l'ensemble des données : une fois pour remplir la table access, une autre fois pour lire cette table !
    Inconvénients dans un environnement multi-utilisateur , vous ne pouvez pas répercuter les modifications !

    Si vous me retorquez à ce stade que votre base se trouve sur un réseau instable voire un réseau internet et que quelques fois il n'y a pas de connexion avec le serveur principal je vous dirais qu'il existe une technique : La réplication (cherchez ce terme en fonction de votre SGBDR)

    S'il s'agit d'un réseau local stable,
    ADO comme ACCESS n'ont jamais été ma tasse de thé mais à ADO, il y a des alternatives plus intéressantes proposant du CacheUpdate qui permet de travailler en mémoire et de réconcilier les données à moment voulus.
    ACCESS est bien multi-utilisateur selon les dires de MS et de ses fans, mais selon vos indications vous l'utilisez comme une base mono-utilisateur (puisque servant à votre application en sorte de tampon de données) vous venez d'être confronté à ce problème (sujet de cette question) mais avez vous songé à mettre en place ce que MS indique pour être en multi-utilisateur (deux applications ou plus sur la même BD) ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. Comment ouvrir une base access quand
    Par AlexFred dans le forum Sécurité
    Réponses: 2
    Dernier message: 09/06/2010, 19h04
  2. [MFC]Impossible d'ouvrir une base access
    Par Sojiro dans le forum MFC
    Réponses: 2
    Dernier message: 13/07/2007, 23h18
  3. Impossible d'ouvrir une base access
    Par bruno77 dans le forum Access
    Réponses: 6
    Dernier message: 09/05/2006, 15h50
  4. Ouvrir une base Access sécurisé
    Par pcvesoul dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/01/2006, 04h30
  5. Impossible d'ouvrir une base Access depuis Excel
    Par vciofolo dans le forum Access
    Réponses: 8
    Dernier message: 14/12/2005, 12h09

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