![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
эксклюзтвный доступ в dbf...... проблема [D6, dBase, FoxPro]
koks © (2003-05-29 11:30:00)Здравствуйте, уважаемые мастера!
Помогите мне пожалуйста вылечить одну ошибку:
with dmDataModule.TTMData do
begin
Close;
Exclusive := true;
Open;
Check(DBIPackTable(DBHandle, Handle, nil, szDBASE, true));
Close;
Exclusive := false;
end;
with dmDataMjdule.TTMassivs do
begin
Close;
Exclusive := true;
Open;
Check(DBIPackTable(DBHandle, Handle, nil, szDBASE, true));
Close;
Exclusive := false;
end;
первый вызов проходит нормально - табличка пакуется на ура. Второй вызов пишет ошибку - table is busy...
облазил всю программу - ну не открыта она. прогонял прогу без среды - все ровно.
Примечательно, что эти две таблицы открываются и вообще используются одновременно (синхронно). Соответственно ошибки при установлении эксклюзивного доступа должны либо быть у обоих либо не быть вообще. Так вот, рассуждая так я нашел одно отличие - на вторую таблицу идут ссылки из лукап-полей из одного запроса. Так вот, я ЗАКРЫВАЮ преварительно этот запрос... все равно table is busy... может надо еще чего с ним сделать (с запросом)
Кулешов (2003-05-30 12:43:00) [1]Попробуй сделать так, мне помогло:
...
Table.ReadOnly:=False;
Table.Exclusive := True;
...
Serginio (2003-05-29 20:04:00) [2]А зачем тебе ее паковать. В фоксах есть индекс Deleted который хранит ссылки на удаленные записи и при добавлении записи находит таковой по индексу и использует ее. Это нормальная практика во всех БД.
sniknik (2003-05-29 18:27:00) [3]> Примечательно, что эти две таблицы открываются и вообще используются одновременно (синхронно).
синхронно т.е. в разных потоках? и в одной сессии? если так то пока работает DBIPackTable с одной таблицей монопольное открытие любой другой приведет к "table is busy". (ну так если рассуждать логично)
попробуй вторую первой паковать.
Соловьев (2003-05-29 17:37:00) [4]просто часто делать упаковку тебе все равно не надо - пусть пользователь подождет при запуске, вот и все.
koks (2003-05-29 17:29:00) [5]логично, однако грубо
Соловьев (2003-05-29 11:35:00) [6]у меня тоже такое было. лечилось закрытием проги и новым ее запуском. упаковку сделал при запуске проги. теперь нет траблы.