Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Удаление тмп файлов (число прочтений - 4160 )
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Удаление тмп файлов
21. Марта 2007 :: 02:49
Печать  
база дбф, используется одбс.
класс создаёт ряд тмп файлов, кот. нужно подчистить во время разрушения класса (в Деструктор()). Как?
на DROP ругается "таблица занята", на пример, приведённый в http://www.1cpp.ru/forum/YaBB.pl?num=1170401962/0#4 ругается:
Цитата:
State 42000, native 222, message [Microsoft][ODBC Visual FoxPro Driver]Unrecognized command verb.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #1 - 21. Марта 2007 :: 04:01
Печать  
Приведи код реализации и описания класса.
Он случайно у тебя не унаследован от ОДБЦРекордсет ?
ИМХО в этом случае деструктор твоего класса отрабатывает позже деструктора ОДБЦРекордсет и файлы, естественно, будут заняты.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #2 - 21. Марта 2007 :: 04:18
Печать  
класс НЕ наследник ни ОБДСрекордсета, ни какого-либо др. объекта
Вот его часть:
Код
Выбрать все
Перем РС;
................
................
................
//так выдаёт ошибку, что файло занято
Процедура Деструктор()
	Для сч=1 по СозданныеДБФ.РазмерСписка() цикл
		текст="
		|DROP TABLE "+СозданныеДБФ.ПолучитьЗначение(сч);
		РС.ВыполнитьИнструкцию(текст);
	КонецЦикла;
КонецПроцедуры
///////////////////////////////
//так ругается вышеназванным способом
Процедура Деструктор()
	   РС.Закрыть();
	   РС=ПолучитьПустоеЗначение();
	Путь=?(Прав(КаталогИБ(),1)="\",КаталогИБ(),КаталогИБ()+"\");
	Если ФС.СуществуетФайл(Путь+"CloseTables.prg")=0 Тогда
		тхтПроцедура=СоздатьОбъект("Текст");
		текст="
		|PROCEDURE CloseTables ()
		|CLOSE TABLES ALL
		|ENDPROC
		|";
		тхтПроцедура.ДобавитьСтроку(текст);
		тхтПроцедура.Записать(Путь+"CloseTables.prg");
	КонецЕсли;
	   РС.ВыполнитьИнструкцию("exec CloseTables()");
КонецПроцедуры
///////////////////////////////
//так не ругается ни как, но и файлы остаются на месте ((((
Процедура Деструктор()
	   РС.Закрыть();
	   РС=ПолучитьПустоеЗначение();
	Для сч=1 по СозданныеДБФ.РазмерСписка() цикл
		ФС.УдалитьФайл(СозданныеДБФ.ПолучитьЗначение(сч));
	КонецЦикла;
КонецПроцедуры
 

  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #3 - 21. Марта 2007 :: 14:22
Печать  
1) Как создаешь эти временные файлы?
Покажи код.

2) А такой код работает?
Код
Выбрать все
Процедура Деструктор()
   РС.Закрыть();
   РС = 0;
Для сч=1 по СозданныеДБФ.РазмерСписка() цикл
текст="
|DROP TABLE "+СозданныеДБФ.ПолучитьЗначение(сч);
РС.ВыполнитьИнструкцию(текст);
КонецЦикла;
КонецПроцедуры
 

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #4 - 22. Марта 2007 :: 01:25
Печать  
artbear писал(а) 21. Марта 2007 :: 14:22:
1) Как создаешь эти временные 2) А такой код работает?
Код
Выбрать все
Процедура Деструктор()
   РС.Закрыть();
   РС = 0;
Для сч=1 по СозданныеДБФ.РазмерСписка() цикл
текст="
|DROP TABLE "+СозданныеДБФ.ПолучитьЗначение(сч);
РС.ВыполнитьИнструкцию(текст);
КонецЦикла;
КонецПроцедуры
 


хм... нет... нет, конечно, так не работает, выдаёт вполне объяснимую ошибку:
Цитата:
РС.ВыполнитьИнструкцию(текст); Значение не представляет агрегатный объект

ведь РС к этому моменту равен нулю.
Я понимаю, почему ты спрасил.
Я в выше приведённых вариантах кода в одном месте не правильно процетировал. В варианте Деструктора где есть попытка воспользоваться хранимой процей с "CLOSE TABLES ALL" строк
Код
Выбрать все
   РС.Закрыть();
   РС=ПолучитьПустоеЗначение();
 


не должно быть, просто я неправильно процетировал.
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #5 - 22. Марта 2007 :: 01:34
Печать  
artbear писал(а) 21. Марта 2007 :: 14:22:
1) Как создаешь эти временные файлы?
Покажи код.


показываю:
Код
Выбрать все
	РС.ВыполнитьИнструкцию("CREATE TABLE "+ИмяТаблицы+" (VAL C(4), ISFOLDER N(1,0));");
 


заполняю:
Код
Выбрать все
	Пока тз.ПолучитьСтроку()=1 цикл
		текст="
		|INSERT INTO "+ИмяТаблицы+"
		|	(VAL,ISFOLDER)
		|VALUES
		|	('"+тз.ПолучитьЗначение(тз.НомерСтроки,1)+"', "+СокрЛП(тз.ПолучитьЗначение(тз.НомерСтроки,2))+")
		|";
		РС.ВыполнитьИнструкцию(текст);
	КонецЦикла;
 


используе в отчете:
Код
Выбрать все
...... IN (SELECT VAL FROM "+СокрЛП(ИмяТ)+") ........
 


и вот потом пытаюсь удалить.
Создаётся и заполняется таблица в КОПе. Используется в подзапросе (последняя цитата) уже в отчете. Пытаюсь удалить в Деструкторе класса. Заметил, что таблицы освобождаются только после закрытия формы отчета. Хотя переменная, в кот. хранится объект класса, в отчете объявлена как переменная процедуры и класс начинает разрушатся сразу после окончания этой процедуры.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #6 - 22. Марта 2007 :: 02:31
Печать  
DionX писал(а) 21. Марта 2007 :: 02:49:
база дбф, используется одбс.

Зачэм так мучаешься, дарагой, да? В OLE DB создаю временные таблицы пачками, а потом преспокойно прибиваю их в деструкторе (без всяких CloseTables). Все работает замечательно  Очень довольный
  
Наверх
 
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #7 - 22. Марта 2007 :: 04:12
Печать  
Uzhast писал(а) 22. Марта 2007 :: 02:31:
DionX писал(а) 21. Марта 2007 :: 02:49:
база дбф, используется одбс.

Зачэм так мучаешься, дарагой, да? В OLE DB создаю временные таблицы пачками, а потом преспокойно прибиваю их в деструкторе (без всяких CloseTables). Все работает замечательно  Очень довольный

время будет, попробую, конечно, с ОЛЕ, просто.... начиналось все с идеи укладывать данные в таблицу с помощью ВыполнитьSQL_ИзТЗ, потому пошёл по пути одбс. В итоге ВыполнитьSQL_ИзТЗ так и не взлетел (http://www.1cpp.ru/forum/YaBB.pl?num=1173434410/0) и одбс остался, хотя  пользуюсь им крайне редко и сам отдаю предпочтение оле дб.
думаешь проблема именно в одбс?
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #8 - 22. Марта 2007 :: 04:19
Печать  
хм... попробовал (оказалось нужно только заменить в одном месте 1 на 0 для использования оле) Подмигивание
Всё по старому: Цитата:
File access is denied f:\рабпапка\prbasic2007\tmp100494135.dbf.

Удалять пробовал с помощью "drop table".
Всё таки: что я не так делаю?
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #9 - 22. Марта 2007 :: 04:33
Печать  
ХМ... в ситуации с CloseTables. Опробовал на оле дб. Команда exec CloseTables() проходит, (на одбс вылетала), но дальше всё по старому:
Цитата:
File access is denied f:\Рабпапка\prbasic2007\tmp101216965.dbf

ёпть. должно же быть какое то простое решение!!!!!! Плачущий Нерешительный Со сжатыми губами
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #10 - 22. Марта 2007 :: 06:13
Печать  
Попробуй сделать простой тест подобного поведения, т.е. упрости свою конфу до предела, где нет ничего лишнего.
Т.е. простая конфа, простой класс и простой отчет и выложи сюда.
ЗЫ возможно, сам увидишь свою ошибку - обычно создание теста очень помогает в разборе ошибки.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #11 - 22. Марта 2007 :: 06:15
Печать  
И кстати, у тебя в отчете нигде ссылка на РС не сохраняется?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #12 - 23. Марта 2007 :: 12:10
Печать  
artbear писал(а) 22. Марта 2007 :: 06:15:
И кстати, у тебя в отчете нигде ссылка на РС не сохраняется?

Неужели я угадал? Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: Удаление тмп файлов
Ответ #13 - 25. Марта 2007 :: 23:33
Печать  
пока не смотрел... некогда  Смущённый
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать