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 :

SQLite + Firedac , Base verrouillée [Berlin 10.1]


Sujet :

Bases de données Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut SQLite + Firedac , Base verrouillée [Berlin 10.1]
    Bonjour,

    Soit j'ai mal configuré ma connexion FireDac, ma transaction (autocommit) ou quelque chose d'autre mais il y a quelque chose qui m'échappe.

    J'ai voulu utiliser une petite base SQLite pour stocker une table temporaire.
    dans mon programme si la table n'existe pas, je la crée (via un FDScript) puis je la remplie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FDTable.Open; puis une boucle avec 
    FDTable.Append; initialisation des colonnes; et FDTable.Post;
    << jusque là, pas de problème

    comme on peut demander plusieurs fois le traitement les cumuls de la table doivent être remis à zéro
    pour cela, après un close de la FDTable (donc logiquement il n'y a plus de transaction en cours)
    j'utilise le ExecSQL de la connexion FDConnection.ExecSQL('UPDATE LATABLE SET CUMUL=0',false);Mais là,
    [FireDAC][Phys][SQLite] ERROR: database is locked.
    or, je ne vois pas pourquoi, sans parler que je ne sais pas déverrouiller cette dernière (sauf à passer par une suppression physique de la base)

    j'ai bien sûr plusieurs contournements possibles allant de l'utilisation d'une G.T.T de Firebird (et donc Firebird plutôt que SQLite) à une simple bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1.first;while not table.eof do table.edit; Tablecumul=0; table.post; table.nextnext; end;
    mais j'aimerais comprendre pourquoi le ExecSQL ne fonctionne pas ?
    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

  2. #2
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Bonsoir,
    je ne sais pas si cette discussion va t'aider

    [FireDAC][Phys][SQLite] Error: database is locked

    il y a aussi un lien en chinois (google ton ami)

    http://bbs.2ccc.com/topic.asp?topicid=449389

    traduction google :
    LockingMode: = Normal
    UpdateOptions.LockWait: = True
    BusyTimeout: = 100000
    JournalMode: = WAL.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour et Merci @aimer_delphi la réponse était bien dans le premier lien :
    mettre le paramètre LockingMode=Normal, (étrangement ce n'est pas le mode par défaut).

    (google ton ami)
    fin de journée très chargée j'avais omis l'utilisation de ce moteur de recherche pour directement demander à la communauté

    Cependant, après avoir retrouver le lien de Dmitry Arefiev je lis que
    Sets the database connection locking-mode. The value is one of the following:

    Normal -- This mode gives multiuser access to database files.
    Exclusive -- This mode gives maximum performance.

    The default value is Exclusive, because it allows you to get maximum read/write speed for single user applications.
    Or, dans mon cas, il n'y a bien qu'un seul utilisateur le programme, étrange !

    le problème est résolu, mais le pourquoi pas tout à fait. Comment se fait-il que sur la même connexion Firedac considère qu'il y a deux utilisateurs distinct

    du coup, j'ai tenté autre chose : Mettre un nom d'utilisateur et repasser locking mode en Exclusif et cela fonctionne aussi
    Bon à savoir !
    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. SQLite création Base de données
    Par darksteph dans le forum Android
    Réponses: 4
    Dernier message: 28/02/2011, 15h49
  2. [VB.net SQLITE] Une base à distance
    Par PM_calou dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/02/2011, 18h25
  3. [AC-2003] Compacter une base verrouillée
    Par Bernard67 dans le forum VBA Access
    Réponses: 5
    Dernier message: 21/07/2010, 20h51
  4. Réponses: 6
    Dernier message: 18/07/2007, 11h01
  5. [Delphi + ODBC] Base verrouillée
    Par Cdx dans le forum Bases de données
    Réponses: 4
    Dernier message: 03/10/2005, 16h24

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