Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

Сжатие таблицы   Найти похожие ветки 

 
Егоров А.Н.   (2007-03-01 12:01) [0]

Господа мастера, помогите разобраться. Не получается сжать таблицу WDOCM.DBF (Delphi 7, ADO, провайдер VFPOLEDB v.8, базы FoxPro 3.x), которая в одной процедуре была:
1. заполнена запросом (insert into wdocm select …);
2. затем обработана инструкцией (update wdocm set …);
3. затем были удалены некоторые записи (delete from wdocm where …);
4. затем пытаюсь сжать таблицу (pack table wdocm) и получаю ошибку <File is in use>.

Пытался разорвать Connection с таблицей и опять ее установить перед сжатием, но это не помогло. Что надо сделать?


 
sniknik ©   (2007-03-01 15:48) [1]

> пытаюсь сжать таблицу (pack table wdocm) и получаю ошибку <File is in use>.
у фокса изначально таблицы открывались в рабочих областях и не закрывались... пока не даш команду CLOSE (ALL/DATABASES/...), но вот в драйвере такого нет... (а может просто не получилось, и не продолжал разбираться потому как нет надобности)
потом раньше можно было пустой USE выполнить, тоже закрывало таблицу в текущей области. ... тоже не работает, надо обязательно указывать чтонибудь, поэтому можно решить переоткрытием в нужной области другой таблицы, тоже закроет ранее открытую (может есть и другое менее извратное решение но я его не знаю, и фокс в принципе давно забросил. т.что и не узнаю).
итого решение, пара комманд до выполнения "pack table wdocm"
USE wdocm IN 1 //переоткрываем таблицу чтобы гарантировать что она в области 1 (не знаем в которой ее открыли sql-ые команды)
USE table IN 1 //в той же области открываем другую таблицу, это закроет ранее открытую
после этого можно выполнять pack table wdocm

p.s. не будет работать для ODBC драйвера (был убран USE как класс... в OLEDB команду восстановили)

> Пытался разорвать Connection с таблицей и опять ее установить перед сжатием, но это не помогло.
не поможет даже кратковременное закрытие коннекта, т.к. COM обьекты не сразу освобождаются, на случай повторных обращений (экономят ресурс машины) только после таймаута (и весьма длительного...). а т.к. таблица открыта не в твоей проге, а в этом COM обьекте (ADO) то ты е получаеш в том же виде, без переинициализаций, как и было при отключении.


 
sniknik ©   (2007-03-01 15:56) [2]

хм... проверил то, что написал, и оказалось что второй USE table IN 1 уже не нужен... почему, х.з. может потому что pack table берет по умолчанию 1-ю область и сам закрывает, толи select открывает в такой области запредельной, куда pack table не добраться, а он должен по был автоматом закрыть, и перенесение в 1-ю чтото для него меняет...
не знаю, разбирайся, в общем. (а лучше поменяй на чтонибудь посовременнее)



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

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
3-1172591890
Helen
2007-02-27 18:58
2007.05.20
Проблемы при добавлении записи


15-1176825088
Jin_beginer
2007-04-17 19:51
2007.05.20
Сортировка в DBGrid


3-1172729445
NikNet
2007-03-01 09:10
2007.05.20
Авто - нумерация строк в Селекте, Возможно ли такое


15-1177322777
Zoop
2007-04-23 14:06
2007.05.20
Автоматические электомеханические варота.


15-1176835024
ANTPro
2007-04-17 22:37
2007.05.20
Военкомат