Databáze > Ostatní DB

SQLite Database locked

(1/3) > >>

Andy:
Ahoj,
vyvijim aplikaci ktera je vyuziva SQLite jako interni datove uloziste (pro offline praci) a ve vlakne se synchronizuje z MySQL serverem.

Kdyz pustim synchronizaci "normalne" (bez vlakna - na timer) tak aplikace jede "normalne" ale kdyz se pusti synchronizace tak vymrzava aplikace (coz je dost neprijemne). Kdyz pustim synchronizaci ve vlakne, tak mi to pise Database locked.

Pro pripojeni pouzivam FireDAC (XE4)
Konektor:


--- Kód: ---  oParams := TStringList.Create;
  oParams.Add('Database=' + SYS_DATADIR + 'config.sqlite');
  oParams.Add('Pooled=True');
  oParams.Add('JournalMode=Off');
  oParams.Add('SQLiteAdvanced=page_size=4096');
  oParams.Add('CacheSize=50000');
  oParams.Add('Busytimeout=5000');
  oParams.Add('Synchronous=Off');
  oParams.Add('LockingMode=Normal');
  oParams.Add('SharedCache=False');
  ADManager.AddConnectionDef('SQLite_App', 'SQLite', oParams);
  ADManager.Active:=true;

  // pripojeni hlavni
  SQLConnection.DriverName:='SQLite';
  SQLConnection.ConnectionDefName:='SQLite_App';
  SQLConnection.Connected:=true;
  // pripojeni ve vlakne
  SQLKasa.SynchConnection.DriverName:='SQLite';
  SQLKasa.SynchConnection.ConnectionDefName:='SQLite_App';
  SQLKasa.SynchConnection.Connected:=true;

--- Konec kódu ---

Nesetkal se nekdo z necim podobnym pripadne vedel by nekdo kterym smerem nakopnout?

Mi.Chal.:
Jak vypadá ta synchronizace ve vlákně? Nepouštíš to třeba vícekrát zároveň?

pepak:
Nemůže to souviset s http://www.sqlite.org/faq.html#q6?

Andy:
Pro MiChal.
Synchronizace je spoustena jen jednou a dokonce i bezi bez problemu kdyz v jednom vlakne jen ctu. Problem nastava kdyz potrebuji v obou vlaknech zapsat.

--- Kód: ---procedure TSynchronizace.Execute;
begin
  while not Terminated do begin
    SynchronizujPolozky;
  end;
end;

procedure TSynchronizace.SynchronizujPolozky;
begin
  try
    // synchronizace
  except on E:Exception do begin
    // hlaska do logu
    end;
  end;
end;

--- Konec kódu ---

Pro pepak
Pripojeni resim 2 spojenimi jedno je vyhradne pro vlakno a druhe pro hlavni cast programu. Jak pisou snazim se ignorovat http://www.sqlite.org/faq.html#q5
DB vytvarim primo v programu a ma tyto parametry

--- Kód: ---Compile options = ENABLE_COLUMN_METADATA;ENABLE_FTS3;
  ENABLE_FTS3_PARENTHESIS;ENABLE_FTS4;ENABLE_RTREE;
  ENABLE_STAT3;HAS_CODEC;OMIT_AUTOINIT;
  OMIT_DEPRECATED;TEMP_STORE=2;THREADSAFE=2

--- Konec kódu ---

Podle http://sqlite.org/threadsafe.html bych asi evidentne potreboval 3 variantu v SQLite nejsem zrovna moc silny jelikoz je to muj prvni projekt na SQLite.

Mi.Chal.:
jeste by to chtelo vedet, jestli mas SQLLite zbuildeny v tom thread-safe modu a jestli nemas nejaky synchronizacni problem u sebe. Connection vytvaris a pouzivas jenom v tom threadu?

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi