Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#271: 2009-08-27 23:46:04 ЛС | профиль | цитата
Это вопрос к автору компонента.
------------ Дoбавленo в 00.06:
А может в DS_SQLite точка не помешает onClose ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#272: 2009-08-28 00:42:55 ЛС | профиль | цитата
Tad писал(а):
Это вопрос к автору компонента

Я автор, дальше что

Или тебе не известно, что движок SQLite имеет свои потоки и свою очередь команд, и когда он там закончит работать с базой, только ему известно, хотя, для тебя он будет свободени, и получишь ты на выходе свое событие onClose, а у себя команду он поставит в очередь, и не факт, что он к этому времени освободит файл базы.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#273: 2009-08-28 01:32:15 ЛС | профиль | цитата
Ну и не факт, что совет с таймером на пол секунды всегда хватит.

procedure THIDS_SQLite._work_doClose;
begin
Close;

end;

procedure THIDS_SQLite.Close;
begin
if id = nil then exit;
while (sqlite3_close(id) <> SQLITE_OK) and _prop_WaitClose do
sleep(10);
id := nil;
end;
Если в процедуре добавить событие onClose

procedure THIDS_SQLite._work_doClose;
begin
Close;
_hi_CreateEvent(_Data, @_event_onClose);
end;
То оно произойдет только после закрытия БД
------------ Дoбавленo в 01.34:
А вот это и есть таймер.

  while (sqlite3_close(id) <> SQLITE_OK) and _prop_WaitClose do  sleep(10);
и сейчас он просто ( в наших схемах не используется).

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:miver
Разработчик
Ответов: 26151
Рейтинг: 2127
#274: 2009-08-28 01:39:49 ЛС | профиль | цитата
Ну, при _prop_WaitClose=True это, действительно может сработать. Давай добавим, хуже не будет
------------ Дoбавленo в 01.41:
nesco писал(а):
вообще лишнее

Не, не надо убирать, это не лишнее, это просьба Dilm-ы -- по-умолчанию оставить без ожидания завершения.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#275: 2009-08-28 01:51:56 ЛС | профиль | цитата
Да, убирать нельзя. При доступе к БД нескольких пользователей - будут тормоза.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#276: 2009-08-28 01:59:07 ЛС | профиль | цитата
Добавил
карма: 22

1
Голосовали:miver
Ответов: 758
Рейтинг: 112
#277: 2009-08-30 01:11:55 ЛС | профиль | цитата
nesco писал(а):
Добавил

Можно ссылку на обновленный элемент
Обновляюсь через SVN - пишет, что новых элементов нет
карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#278: 2009-08-30 01:51:00 ЛС | профиль | цитата
miver писал(а):
Обновляюсь через SVN - пишет, что новых элементов нет

Странно, я его точно залил. У меня в обновлении с SVN точка onClose есть. А ты в скрытых точках смотрел
На всякий случай ссылка

[svn]DS_SQLite.pas[/svn]
карма: 22

0
Ответов: 758
Рейтинг: 112
#279: 2009-08-30 02:01:42 ЛС | профиль | цитата
nesco писал(а):
Странно, я его точно залил. У меня в обновлении с SVN точка onClose есть. А ты в скрытых точках смотрел
На всякий случай ссылка

Да, смотрел, спасибо

карма: 1

0
Ответов: 758
Рейтинг: 112
#280: 2009-08-31 11:45:45 ЛС | профиль | цитата
Проблема осталась, причем DS_SQLite просто не закрывает БД
Если поставить кнопку, то все работает замечательно (жмем закрыть и БД закрывается)
code_14770.txt

Если ставим обратную связь то не работает (даже с задержкой в 0,5 сек)
code_14771.txt

карма: 1

0
файлы: 2code_14770.txt [3KB] [342], code_14771.txt [3KB] [367]
Разработчик
Ответов: 26151
Рейтинг: 2127
#281: 2009-08-31 13:36:49 ЛС | профиль | цитата
miver писал(а):
даже с задержкой в 0,5 сек

Я про таймер говорил а не про Sleep. Надо выключать базу из другой очереди событий, а не из той же самой

Ты думаешь почему вот это работает
miver писал(а):
Если поставить кнопку, то все работает замечательно

Все по той же причине: мы удаляем базу из другой очереди событий

Кстати, это необходимо использовать, если хочешь удалять мультик, на него распространяется тот же принцип
карма: 22

1
Голосовали:miver
Ответов: 758
Рейтинг: 112
#282: 2009-08-31 16:03:59 ЛС | профиль | цитата
nesco писал(а):
Я про таймер говорил а не про Sleep.

Да уж невнимательный но они так похожи
С таймером работает

nesco писал(а):
Надо выключать базу из другой очереди событий, а не из той же самой

Для себя не совсем понимаю термин "другой очереди событий"
Пожалуйста объясни для тех кто в танке, желательно с примером, как в программе по заданному алгоритму возникнет "другая очередь событий"
Какая разница между событиями таймера и Sleep (проверял таймер с нулевой итерацией - работает )

карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#283: 2009-08-31 16:59:11 ЛС | профиль | цитата
miver писал(а):
проверял таймер с нулевой итерацией

Таймер с полностью нулевой итерацией в системе не существует, это раз. В данном случае, под очередью событий понимается цепочка действий от начала выполнения опреации до окончания, когда упраление передается системе. Запуская таймер, ты выпоняешь команду запуска и переходишь к дальнейшей очереди операций в одной цепи, но таймер ждет окончания выполнения предыдущей очереди, даже, когда у него есть некоторая, установленная задержка, те, данный тип таймера не сработает, пока не закончится предыдущая очередь и управление не передасться системе. Элемент же Sleep, в данном исполнении, дает задержку события, но не освобождает очередь, а значит, по окончанию задержки цепь событий продолжиться до полного окончания.
Пример, да самый простой -- Hub, на следующих точках событие не появится, пока не закончатся все последовательные операции, подключенные к первой точке. Но следующую точку Hub-a, в данном случае использовать не получится, так как его входные точки есть цепи предыдущих операций.
карма: 22

1
Голосовали:miver
Ответов: 758
Рейтинг: 112
#284: 2009-09-02 02:43:40 ЛС | профиль | цитата
новый DS_SQLite не компилится при Delphi with SQLite_Obj
HiAsm\Elements\delphi\code.\hiMainForm_159BF94.pas(335) Error: Undeclared identifier: '_event_onClose'

карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#285: 2009-09-02 02:47:44 ЛС | профиль | цитата
miver, обновить надо и *.ini и *.pas. У тебя их несоответствие
------------ Дoбавленo в 02.51:
Да, кстати, откуда у тебя
miver писал(а):
Delphi with SQLite_Obj

в оригинале его нет
Если это моя строка компиляции (из wiki, например), то несответсвие происходит в основных папках code и conf текущего пакета. Оригинальный компилятор читает компонент из твоей папки проекта
карма: 22

1
Голосовали:miver
Сообщение
...
Прикрепленные файлы
(файлы не залиты)