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

SQLite Discussion :

Sous lazarus comment fermer une base sqlite3 pour la copier


Sujet :

SQLite

  1. #1
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut Sous lazarus comment fermer une base sqlite3 pour la copier
    Bonjour,
    Post sans réponse chez lazarus peut-être un spécialiste SQLITE sera y répondre.
    J'écris de petites applications avec lazarus pour gérer des données avec sqlite3.
    J'utilise le composant natifs et tout cela sous linux.
    Dans mes apploications je sauvegarde mes données dans des tables différentes à chaque sortie de l'application si il y a un changement de données dans l'une des tables de ma base.
    La table de travail est dans un répertoire /tables/ et les sauvegarde "tournent" dans les répertoires /tablesA/ à /tableF/.
    Donc en quittant l'application je recopie la table de travail dans un des répertoires /tablesA/ à /tablesF/ selon un indice sauvegardé.
    J'utilise une procédure trouvéé dans la FAQ de Lazarus de Wihle64.
    Sous linux pas de problème mais voulant l'utiliser sous windows (l'avantage de lazarus) je rencontre un problème il faut sous windows que la base soit "close" en effet la copie de la table comme simple fichier ce fait sans problème mais dans l'application utilisant cette table j'ai un message d'erreur : Unable to open file ....'
    Donc il faut que je puisse dans mon application clore ma base sqlite avant de la copier.
    Je n'ai pas trouver à insérer dans ma fonction. Je sais fermer les tables mais ce n'est pas suffisant c'est la base qu'il faut fermer.
    Alors si l'un d'entre vous la connait je suis preneur.
    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 421
    Points : 1 103
    Points
    1 103
    Par défaut
    Bonjour,

    J'ai failli répondre sous lazarus mais je ne regardes ces forums que le soir

    personnellement, je travailles avec l'interface native de SQLITE.
    Dans ce cas, il faut utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int sqlite3_close_v2(sqlite3*);
    Avec les objets lazarus, je suppose que fermer l'objet devrait le faire s'il est bein fait mais je n'ai pas testé.

    Cordialement

  3. #3
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Merci Acaumes j'ai bien sur l'objet sqlitedataset une fonction free et une close mais cela ne résout pas mon problème. Ce composant semble n'agir que sur une table pas sur une base

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 421
    Points : 1 103
    Points
    1 103
    Par défaut
    Bonjour,

    Normalement Sqlite ne maintient pas de verrou exclusif s'il n'a pas de requête en cours.

    En général, je réussis à copier mes fichiers tant que je ne suis pas en train de modifier une base.

    Cependant j'utilise systématiquement l'option fmShareDenyNone pour ouvrir mes fichiers.

    Comment fermes tu tes tables?

    Cordialement

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Bonsoir,
    Sous linux fedora mes tables sont ouvertes au lancement de l'application via le paramètre active à true dans mon module data. Je ne les ferme que temporairement quand je souhaite une ouverture avec condition comme l'exemple ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure  TFmdepense.AffichageGridDepenses;
    begin
     // affichage dans le grid des dépenses pour le véhicule concerné
     data.Depense.Close;
     MQ:='Select * from DEPENSE  WHERE CODE= '+quotedstr(MCODE);
     data.Depense.SQL:=MQ;
     data.Depense.Open;
     data.Depense.ExecSQL;
     data.Depense.Last;
    end;
    et ma procédure de sauvegarde fonctionne sans problème sous linux.
    Il n'y a que sous windows où j'ai ce problème.
    Dans un essai sans composant sqlitedataset la même base de données se copie sans erreur, si j'ajoute ce composant j'ai le défaut, pourqoi ?

    Modification : Après de multiple essai le problème semble venir de la procedure de copie qui fonctionne bien sous linux mais pas sous windows.
    Donc merci pour l'aide et mes excuse pour le dérangement inutile

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/10/2015, 20h36
  2. Comment fermer une base
    Par JP.NUAGE dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/07/2012, 09h47
  3. Réponses: 2
    Dernier message: 21/05/2007, 15h02
  4. Réponses: 3
    Dernier message: 16/04/2007, 11h55
  5. Comment fermer une fenetre DIALOG BASED
    Par orj30754 dans le forum MFC
    Réponses: 1
    Dernier message: 29/05/2006, 10h19

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