Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
Егоров А.Н.   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.041 c
3-1173159322
Atanas
2007-03-06 08:35
2007.05.20
Структура таблиц


15-1176982455
Real
2007-04-19 15:34
2007.05.20
Кодировка...


2-1177585517
Marat
2007-04-26 15:05
2007.05.20
Округлить


15-1176874534
Ega23
2007-04-18 09:35
2007.05.20
Из Дагестана кто есть?


4-1166448153
GanibalLector
2006-12-18 16:22
2007.05.20
передача ThreadID параметром





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский