On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 1564
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.10.10 23:01. Заголовок: Закрытие EXCEL'а при "вылете" из программы ?


Всем привет !
Столкнулся с проблемой....
Написал на MiniGui программу по переводу файлов из XLS в DBF !
Если случается ошибка при обработки, то программа сваливается, а EXCEL остается в памяти. И так штук 10 !!!
И файлы МОИ держит открытыми !
Пока понял в чем дело ....
Как можно при АВАРИЙНОМ вылете программы ЗАКРЫТЬ EXCEL в памяти ?

Заранее спасибо !


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 12 [только новые]


постоянный участник


Пост N: 462
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 10.10.10 09:17. Заголовок: BEGIN SEQUENCE не по..


BEGIN SEQUENCE не подходит?
PS: плюс свой error handler

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1565
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.10.10 12:31. Заголовок: Это типа так: :sm33..


Это типа так:

LOCAL bError := ErrorBlock( {|e| Break(e) } )
//
// Открытие Экселя и Базы
//
BEGIN SEQUENCE
// Обработка XLS-файла
..........
..........
..........
RECOVER
// Error - Закрытие Экселя и БАЗЫ!
CLOSE DBFBASE
oExcel:Quit()

ENDSEQUENCE
ErrorBlock( bError )

// Нормальное закрытие Экселя и базы !
CLOSE DBFBASE
oExcel:Quit()
....................


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1566
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.10.10 12:38. Заголовок: А как можно это сдел..


А как можно это сделать при выходе из программы ?

В хХарборе есть процедура при выходе:

EXIT PROCEDURE Exit()
// Error - Закрытие Экселя и БАЗЫ!
CLOSE ALL
oExcel:Quit()
RETURN

PROCEDURE MAIN()


RETURN

А как в МиниГуи делать ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1567
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.10.10 18:06. Заголовок: Dima пишет: Вероят..


Dima пишет:

 цитата:

Вероятно так же.



Хотелось бы знать как узнать, что программа вылетела и передать туда oExcel:Quit() из функции обработки XLS ?
Я в функции обработки XLS последовательно открываю файлы XLS. И на каком "споткнется" программа я не знаю.

При выходе же не всегда нужно делать oExcel:Quit(), а только по ошибке !

Как это все реализовать ?


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 38
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 10.10.10 18:35. Заголовок: А что понимается под..


А что понимается под "споткнется программа" ? Какая - Excel?, хХарбор ? Чего вдруг ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1568
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.10.10 20:02. Заголовок: fil пишет: А что по..


fil пишет:

 цитата:
А что понимается под "споткнется программа" ? Какая - Excel?, хХарбор ? Чего вдруг ?



Харбор "споткнется" ! Дело в том что если в таблице EXCEL-я не заполнена графа, то происходит вылет !
Нужно проверять на значение в таблице NIL или не NIL ! Ну программеры из ЕИРЦ так заполнили таблицу !
Несоответствие типов в ячейке... И так далее...
Я с Экселем мало работал, вот и натыкаюсь на грабли...

Как вообще правильно считывать значение в ячейке и записывать в БАЗУ ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 39
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 10.10.10 21:42. Заголовок: Выделяем рабочую обл..


Выделяем рабочую область таблицы. В цикле считываем знчение .Value каждой ячейки и пишем в базу. Разбираемся с цифрами и датой, ну может еще какие хитрые форматы есть. Типа так:

mas[1]:=oExc:ActiveSheet:Cells:SpecialCells(xlCellTypeLastCell):Row
mas[2]:=oExc:ActiveSheet:Range("A1"):CurrentRegion:Columns:Count

for st=1 to mas[1]
for zzt=1 to mas[2]
el:=iif(zzt>26,"A","")+chr(64+zzt-iif(st>26,26,0))+ltrim(str(st))
cll:=oExc:ActiveSheet:Range(el):NumberFormat

if "0,00"$cll &&.or.cll=tip[2]
fl:=oExc:ActiveSheet:Cells(st, zz):Value
if cll="ДД".and.valtype(fl)="D"
.......
elseif "0,00"$cll.and.valtype(fl)="N"
.......
endif
endif
next
next

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1569
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.10.10 16:48. Заголовок: Я не пользуюсь выдел..


Я не пользуюсь выделением таблицы.
Как Григорий подсказал мне ранее, так я и делаю.

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 975
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 14.10.10 00:15. Заголовок: Andrey пишет: Как э..


Andrey пишет:

 цитата:
Как это все реализовать ?


Это плохая идея и ее не надо реализовывать.
Но если сильно хочется - объявляйте oExcel как публичную или глобальную переменную и проверяйте ее при выходе.

Если вы пробовали прилинковать какую-нибудь exit процедуру к програме с использованием MiniGUI - то, наверняка, видели такое сообщение

 цитата:
EXIT PROCEDURE Statement is not Supported in MiniGUI.
Use Main Window ON RELEASE Event Procedure Instead.


Вот вам и подсказка как делать в МиниГуи. Но, что-то мне подсказывает, что такой вариант не рассчитан на аварийное завершение работы, утверждать не стану.

Можете конечно и в MiniGUI\Include\i_controlmisc.ch закомментировать часть кода переопределяющего EXIT PROCEDURE, но тогда вы должны точно представлять, что делаете и просчитать все варианты поведения программы. У Лопеза, наверное, не получилось..


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 12
Зарегистрирован: 28.07.10
ссылка на сообщение  Отправлено: 14.10.10 01:18. Заголовок: А событие ON_RELEASE..


А событие ON_RELEASE для главного окна не прокатит вместо EXIT PROCEDURE?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 464
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 14.10.10 08:08. Заголовок: SADSTAR33 пишет: А ..


SADSTAR33 пишет:

 цитата:
А событие ON_RELEASE


Вопрос в том, наступает ли это событие при аварийном завершении.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1571
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.10.10 18:49. Заголовок: Петр пишет: Это пло..


Петр пишет:

 цитата:
Это плохая идея и ее не надо реализовывать.



Спасибо большое за подробное разъяснение !

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 18
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет