Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

Как в Paradox заставить все изменения сохранить физически...   Найти похожие ветки 

 
USAtyj   (2003-07-01 11:29) [0]

Ситуация такая:
Есть программулина, которая работает с парадоксовскими таблицами. По окончании программы хочу сжимать все таблицы в один файл (zip-архив), чтоб пользователь видел только один файл. При запуске программы таблицы распаковываются и с ними идет работа. НО! Пока приложение не закончит свою работу, физически файлы не изменяются, т.е. я архивирую файлы со старыми данными, а уже потом все данные реально сливаются в файлы.
Все таблицы в DataModule, на уничтожение DataModule делаю FlushBuffers для каждой таблицы. Но это не помогает.
Кто-что может посоветовать.
Заранее спасибо.


 
Семен Сорокин   (2003-07-01 11:35) [1]

на уничтожение DataModule делаю FlushBuffers для каждой таблицы а упаковка идет после уничтожения?
делай DataBase.Close


 
USAtyj   (2003-07-01 11:57) [2]

Вот код на уничтожении:

for i:=0 to ComponentCount-1 do
if Components[i] is TTable then
begin
(Components[i] as TTable).Open;
(Components[i] as TTable).FlushBuffers;
(Components[i] as TTable).Close;
end;

Компоненты Database у меня нет. У меня просто для каждой таблицы в свойстве DatabaseName прописывается при запуске путь к каталогу, в котором таблицы.


 
gek   (2003-07-01 12:26) [3]


> for i:=0 to ComponentCount-1 do
> if Components[i] is TTable then
> begin
> (Components[i] as TTable).Open;
> dbisavechanges( (Components[i] as TTable).handle);
> (Components[i] as TTable).Close;
> end;



 
USAtyj   (2003-07-01 13:13) [4]

FlushBuffers как раз и вызывает dbisavechanges().
Но не помогает все равно.
Но если делать изменения с помощью sql-запросов, тогда обновления сразу в файл записываются.


 
gek   (2003-07-01 13:29) [5]

Можно так попробовать, может получится


(Components[i] as TTable).Active:=true;
(Components[i] as TTable).FlushBuffers;
(Components[i] as TTable).Active:=false;
(Components[i] as TTable).DatabaseName:="";
(Components[i] as TTable).TableName:="";


 
Семен Сорокин   (2003-07-01 13:49) [6]

и все-же, когда программно вызывается архиватор?
сразу после приведенного блока, или из другого места?


 
USAtyj   (2003-07-01 15:02) [7]

FlushBuffers вызывается OnDestroy для DataModule.
А функция, в которой просиходит архивация, вызывается уже после
Application.Run;


 
VAleksey   (2003-07-01 15:07) [8]


> USAtyj (01.07.03 15:02)

Капец.
А ты трассировкой пройдись и посмотри в какой последовательности и что у тебя работает.


 
gek   (2003-07-01 15:08) [9]

Семен Сорокин © (01.07.03 13:49)
не зря-то спрашивал.


А функция, в которой просиходит архивация, вызывается уже после
Application.Run;



Вот и вызови ее после FlushBuffers
т.е. после цикла


 
Семен Сорокин   (2003-07-01 15:10) [10]

USAtyj (01.07.03 15:02)
дело в том что, скорее всего, твой DataModule удаляется позже того как у тебя происходит архивация данных, поэтому в архив попадают "файлы со старыми данными"


 
VAleksey   (2003-07-01 15:12) [11]

1) Вообще dbiSaveChanges - принудительно сбрасывает буфер на диск.
2) Установка Local Share в BDE Administrator заставит BDE сбрасывать кэш после любых изменений.
3) У тебя Delphi в этот момент запущено?


 
USAtyj   (2003-07-01 15:22) [12]

2 Семен Сорокин:
вы были правы, мне почему-то казалось "по умолчанию", что датамодуль уничтожается раньше, чем пакую, поскольку пакую ужо савсем в конце, а трассировкой лишний раз поленился. Щас протрассировал - пакует раньше.
Это называется тупостью от лени.
Всем спасибо.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
14-78051
Soft
2003-07-06 03:01
2003.07.24
Мы убьем машинами Вселенную


1-77992
Вован
2003-07-10 18:09
2003.07.24
Как зделать форму которая всегда находится на заднем плане?


7-78175
Valeris
2003-05-14 13:22
2003.07.24
Добавление события в системный журнал событий


3-77804
Chery
2003-07-03 11:51
2003.07.24
Кол-во записей, где некое поле P = a or b or c ? Filtre ?


3-77745
AlexanderSK
2003-07-01 13:45
2003.07.24
TCP порт для InterBase-а





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский