AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zugriff via Zeos auf SQLite DB von mehren Threads
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff via Zeos auf SQLite DB von mehren Threads

Ein Thema von TUX_der_Pinguin · begonnen am 29. Jun 2012 · letzter Beitrag vom 29. Jun 2012
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Zugriff via Zeos auf SQLite DB von mehren Threads

  Alt 29. Jun 2012, 14:29
Datenbank: SQLite • Version: 3 • Zugriff über: Zeos
Hallo Leute,

in meiner Anwendung soll ein Hintergrund-Thread in regelmäßigen Abständen prüfen ob neue
Dateien/Daten vorliegen, diese sollen dann eingelesen und in der Datenbank gespeichert werden.

Der Anwender kann dann auf der Programmoberfläche nach diesen Daten suchen und sich anzeigen lassen.

In einem ersten Test habe ich eine "Connection" aufgebaut und sowohl der Hintergrund-Thread als
auch der Main-Thread (Programmoberfläche) greifen über diese eine Verbindung auf die Datenbank zu.
Jedoch scheint das zu Problemen zu führen da ich ab und zu Exceptions erhalte, ich vermute das sich
die Abfragen in die quere kommen. (Der Hintergrund-Thread benutzt Transaktionen zum Speichern der Daten).

Der zweite Versuch mit zwei getrennten "Connection" klappt auch nicht da wenn der Hintergrund-Thread
Daten in die DB speichert ist für den Main-Thread schein bar die DB geblockt. Was ja logisch wäre da
SQLite nicht Mulituserfähig ist.

Muss ich jetzt manuell regeln das sich die Abfragen nicht in die Quere kommen oder ist es doch möglich das
ein Hintergrund-Thread Daten in einer Datenbank speichern oder ändern kann während gleichzeitig der Main-Thread
Daten Abfragen kann. Der Main-Thread müsste nie Daten ändern oder hinzufügen können.

Mfg

TUX
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Zugriff via Zeos auf SQLite DB von mehren Threads

  Alt 29. Jun 2012, 14:47
Der zweite Versuch mit zwei getrennten "Connection" klappt auch nicht da wenn der Hintergrund-Thread
Daten in die DB speichert ist für den Main-Thread schein bar die DB geblockt. Was ja logisch wäre da
SQLite nicht Mulituserfähig ist.
Mit Multiuser hat das nichts zu tun (denke ich) eher sollte das record(?) locking hierfür verantwortlich sein.
wie wäre es wenn Du mit nur einen DB-Communication-Thread arbeiten würdest? Dann würde zumindestens Deine Datenbank Dir nicht in die Suppe spucken.
(ich kenne sql-light allerdings nicht gut genug)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Zugriff via Zeos auf SQLite DB von mehren Threads

  Alt 29. Jun 2012, 15:20
Ich habe da gerade was in den FAQ von SQLite gelesen

http://www.sqlite.org/faq.html#q5
Zitat:
Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at any moment in time, however.
...
When SQLite tries to access a file that is locked by another process, the default behavior is to return SQLITE_BUSY. You can adjust this behavior from C code using the sqlite3_busy_handler() or sqlite3_busy_timeout() API functions.

Das Problem ist nur wie kann ich SQLITE_BUSY abfragen bevor im Main-Thread eine neue Abfrage gestartet wird?!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz