пʼятниця, 1 червня 2012 р.

Lazarus. При використанні SQLite3Connection не зберігаються зміни



Кліпаю тут на дозвіллі програму базу даних членів церкви. Все чудово, але вона не хотіла зберігати внесені в записи зміни при використанні DB-aware компонентів (TDBEdit, TDBGrid і т.д.). Намучившися в пошуках баґа вже думав, що такий глюкавий TSQLite3Connection і думав прописувати всі запроси вручну. Але вчора знайшов простенький приклад і там все працює. При порівнянні, вияснилося, що якщо в Design-time в об’єкті SQLite3Connection встановити властивість Connected в True, та в відповідному SQLQuery Active в True, то база виявляється заблокованою і зміни не зберігаються. Як що ж зробити навпаки, то все чудово зберігається!

Ну і в події AfterPost об’єкта SQLQuery треба прописати щось таке:


procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet);
var bm: TBookMark;
begin
   try
     bm := SQLQuery1.GetBookmark;
     SQLQuery1.ApplyUpdates;
     if SQLTransaction1.Active then
     begin
        SQLTransaction1.CommitRetaining;
        SQLQuery1.GotoBookmark(bm);
     end;
  except
     SQLTransaction1.Rollback;
  end;
end; 

Підглянув ось тут http://professorcarlos.blogspot.com/2010/02/lazarus-acessando-banco-de-dados-com_24.html

Немає коментарів: