Вниз
Скачать: 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.03 c
15-1176822673
oldman
2007-04-17 19:11
2007.05.20
Никто не знает, как там поживает соратник Билла Гейтса?


15-1177055966
Rule
2007-04-20 11:59
2007.05.20
библиотека для работы с XML через SQL


2-1177962098
vegarulez
2007-04-30 23:41
2007.05.20
Вопрос про DBGrid.(Перемещение по гриду, сколько записей видно)


1-1174462919
Dmitry_177
2007-03-21 10:41
2007.05.20
аналог функции malloc из С


3-1172922633
---SerG---
2007-03-03 14:50
2007.05.20
Инсталятор для баз данных




   Наверх