Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.028 c
15-1176885141
Карелин Артем
2007-04-18 12:32
2007.05.20
Вода из водопровода vs вода из бутыли.


1-1174372662
JIuSS
2007-03-20 09:37
2007.05.20
Воод чисел с разделителями тысяч


2-1178185101
Ken9
2007-05-03 13:38
2007.05.20
Получение средствами дельфи html страницы с веб-сервера


15-1177334622
ПЛОВ
2007-04-23 17:23
2007.05.20
Д7 и Ворд недружат малость


3-1173074542
merko$
2007-03-05 09:02
2007.05.20
экспорт из IBQuery в Excel




   Наверх