Когда я делал коммит, я наивно полагал, что физический файл базы данных будет обновлен (с изменением даты модификации), но, очевидно, он так не работает.
Физический файл базы данных изменяется, когда база данных закрыта !!!
я написал небольшое тестовое приложение с (delphi 10.2.3)
* FDConnection1: TFDConnection; (все настройки по умолчанию) (cachedupdate имеет значение false)
* FDQuery1: TFDQuery; (все настройки по умолчанию)
Моя база данных SQLite содержит только одну таблицу
CREATE TABLE t_stritems
(IdItels
INTEGER, St01
VARCHAR (200), St02
VARCHAR (200), St03
VARCHAR (200), ПЕРВИЧНЫЙ КЛЮЧ (IdItels
))
Мой код очень прост
Подключить базу данных:
FDConnection1.Connected := false;
FDConnection1.Params.Clear;
FDConnection1.Params.Add('DriverID=SQLite');
FDConnection1.Params.ADD('Database=' + Edit1.text);
FDConnection1.Connected := true;
Вставить строки в базу данных
FDQuery1.Connection := FDConnection1;
FDQuery1.close;
fdquery1.sql.clear;
fdquery1.sql.add('DELETE FROM t_stritems');
FDConnection1.StartTransaction;
fdquery1.ExecSQL;
FDConnection1.Commit;
fdquery1.sql.clear;
fdquery1.sql.add('SELECT * FROM t_stritems');
fdquery1.Open;
for i := 0 to 15 do
begin
for j:= 1 to 2000 do
begin
FDQuery1.append;
FDQuery1.FieldByname('IdItels').asInteger := (i*2000) + j;
FDQuery1.FieldByname('St01').asString := 'Text 01 Number : ' + FDQuery1.FieldByname('IdItels').asString;
FDQuery1.FieldByname('St02').asString := 'Text 02 Number : ' + FDQuery1.FieldByname('IdItels').asString;
FDQuery1.FieldByname('St03').asString := 'Text 03 Number : ' + FDQuery1.FieldByname('IdItels').asString;
FDQuery1.post;
end;
// FDConnection1.Commit;
end;
end;
Процесс тестирования:
Подключите базу данных: (файл t_stritems моей базы данных содержит 32000 записей; размер файла базы данных составляет 2338 ko)
После удаления sql, я имею в каталоге моего файла базы данных файл журнала (xxxx.db-journal). размер файла базы данных 2338 ko
после первого коммита у меня всегда есть в каталоге моего файла базы данных файл журнала (xxxx.db-journal). размер файла базы данных 2338 ko (без физического обновления)
Затем программа добавляет 32000 записей
Дата изменения файла (.db) базы данных будет изменена только тогда, когда я оставлю свою заявку. !!!
файл журнала (.db-log) будет удален в конце моего приложения
Вопросы:
Как заставить коммит сохранить данные в базу данных?
Это нормально ?
Что физический файл базы данных изменяется только при закрытии приложения (и одновременно с подключением)?
Заранее спасибо за ответ
С наилучшими пожеланиями
Ромуальд