![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление dbf-таблицы в рантайм [D5, D6, dBase, FoxPro]
slgeo © (2002-10-14 10:29:00)Народ, никак не могу побороть.(
Надо в рантайм удалить таблицу dbf. При попытке просмотра или удаления
внешними программами во время выполнения приложения вываливает: "Error
occured while opening table aaa.dbf".
Естестно в рантайм она тоже не удаляется. Где она открыта никак не пойму. Я
ее использую как временную таблицу, потом пишу
DbfTable.Active := False;
DbfTable.TableName := "";
Как лечить?
slgeo (2002-10-14 15:56:00) [1]Так ведь тот же код через ADO работает, после Active:=False, таблица удаляется.
Так что это глюк TDbf. Говорили умные люди не использовать компоненты сторонних разработчиков, а я их все-таки не послушал.
Что ж будем впредь умнее.
Geka (2002-10-14 15:28:00) [2]Напиши небольшую програмку, попробуй ничего лишнего при этом не делать. Если не идет кусок большой программы, то сделай его программой(тогда ничего лишнего мешать не будет :) и найди ошибку. И оптимально: только в Query : DROP TABLE. Если и при этом не дает, то точно база где-то занята. Напимер, в Delphi где-то в какой-то из компанент Query или Table свойство Active стоит True.
Можно еще проверить базу на ключи. Возможна связь с другими базами.
gek (2002-10-14 15:25:00) [3]> slgeo (14.10.02 15:13)
значит таблица открыта еше где-то
См где
slgeo (2002-10-14 15:13:00) [4]DROP Table пишет Table is busy
gek (2002-10-14 12:21:00) [5]Наверное
DROP TABLE
slgeo (2002-10-14 12:16:00) [6]Create и Free в рунтайм тоже не помогает. Похоже придется ковырять исходники Tdbf или переходить на что-нибудь другое.
sniknik (2002-10-14 12:03:00) [7]а у этого Tdbf-а исходники есть? может это его глюк, незакрытие файла после работы с ним? Тогда и Free может не помоч. (если в одном месте пропустили ио и в другом возможно)
ЮЮ (2002-10-14 11:47:00) [8]остаётся DbfTable создавать в RunTime. Free, надеюсь, оторвёт !
slgeo (2002-10-14 11:44:00) [9]>sniknik © Все нормально, пока DbfTable.Active не станет True.
Слишком сильно привязывается, не оторвать :)
sniknik (2002-10-14 11:27:00) [10]а если не подключать? изначально (не делай DbfTable.Active := True). то тогда как? чтобы выяснить виноват компонент или где?
slgeo (2002-10-14 11:07:00) [11]>sniknik © И это пробовал, не помогает (
sniknik (2002-10-14 11:02:00) [12]насколько я знаю (по слухам) Tdbf имеет единственный режим Exclisive. т.е. второй раз нигде не откроеш. Если это правда то сам компонент ее и держит, попробуй не просто присвоить "" а открыть другую таблицу и после удалится?
slgeo (2002-10-14 10:46:00) [13]>sniknik © У меня в отладчике так и выставлено DbfTable.Active := False;
Вся привязка к таблице происходит в рантайм(имя таблицы, путь, открытие). Использую компонент Tdbf.
sniknik (2002-10-14 10:38:00) [14]закрой в отладчике (Delphi) т.е. сделай так чтобы программа стартовала с DbfTable.Active равным False а в каком нибудь событии открывай (OnCreate?).