On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 7
Зарегистрирован: 25.10.13
ссылка на сообщение  Отправлено: 28.10.13 00:18. Заголовок: Обработка ошибок при создании/открытии базы


Подскажите пожалуйста где почитать/посмотреть или приведите примеры как правильно обрабатывать ошибки при создании и открытии базы.

Чтобы стало понятно как решить, например, такую задачу:
Если база Test существует, то открыть её.
Если при открытии возникла ошибка - вызвать обработчик.
Открыть индексные файлы. Если их нет - создать. Если ошибка при создании/открытии - вызвать обработчик.
Если нет базы Test, то создать её из массива. Если ошибка при создании - вызвать обработчик.

Желательно учесть ошибки при открытии для совместного доступа и различные RDD.

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


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




Пост N: 3048
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.10.13 08:41. Заголовок: Вот примерно так: ..


Вот примерно так:


LOCAL aFileBase := { "dogovor.dbf" , "tarif.dbf" }
LOCAL aAlias := { "DOGOVOR" , "TARIF" }
LOCAL aFileIndex := { "dogovor1.cdx" , "tarif1.dbf" }
LOCAL aKeyIndex := { "nID" , "nID" }
.................

MyOPENDB(cPathBase,aFileBase,aAlias,aFileIndex,aKeyIndex)


//////////////////////////////////////////////////////////////////////////////
FUNCTION MyOPENDB(cPathBase,aFileBase,aAlias,aFileIndex,aKeyIndex)
LOCAL nI, cFile, cAlias, cIndex, aBeg, nRecAll, cIndexTo, cFilterTo
LOCAL cTemp, lOpen, bErrHandler

FOR nI := 1 TO LEN(aFileBase)
cFile := aFileBase[nI]
cAlias := aAlias[nI]
cIndex := aFileIndex[nI]
IF FILE(cPathBase + cFile)
bErrHandler := ERRORBLOCK( {|var| BREAK(var)} )
BEGIN SEQUENCE
aBeg := MES_BARI("Индексирую БД "+cFile)
USE (cPathBase+cFile) ALIAS (cAlias) NEW EXCLUSIVE // открыть базу в монопольном режиме
nRecAll := LASTREC()
DBGOTOP()
// Здесь сделать удаление индексного файла и обработку на невозможность удаления.
cIndexTo := aKeyIndex[nI]
cFilterTo := "DELETED() == .F." // удаленные записи "скрыть"
INDEX ON &cIndexTo TAG "ONE" TO (M->SetTemp+cIndex) ; // индексация с бегунком
EVAL SAY_PROC( aBeg, RECNO(), nRecAll) ;
EVERY nRecAll / 10 FOR &cFilterTo ADDITIVE
ORDSETFOCUS( "ONE" )
DBSETORDER(1)
DBGOTOP()
MES_BARU( aBeg )
lOpen := .T.
RECOVER
cTemp := ";БАЗА "+cPathBase+cFile+" уже открыта ! ;;Необходимо сначала закрыть открытую БАЗУ, а потом заново продолжить !;"
MessBestBox(cTemp,1)
lOpen := .F.
END SEQUENCE
ERRORBLOCK(bErrHandler)
ELSE
cTemp := ";НЕТ БАЗЫ по пути "+cPathBase+cFile+" ! ;;Или необходимо исправить путь в ини-файле "+HB_ANSITOOEM(cFileIni)+" !;"
MessBestBox(cTemp,1)
lOpen := .F.
ENDIF
NEXT

// сделать свою обработку учета открытия каждой базы
// и вернуть .F. - если была хотя бы ОДНА ошибка

RETURN lOpen

Правь под себя. Обработчик ошибок - простой.

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


Пост N: 396
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 28.10.13 12:01. Заголовок: Открыть индексные ф..



 цитата:
Открыть индексные файлы. Если их нет - создать.


Я при запуске программы проверяю наличие индексов, при их отсутствии - создаю, работаю с cdx. Для создания индексов монопольный доступ не нужен.Надо, чтобы индексы создавались при ОДНОМ запущенном компьютере. Везде использую автооткрытие .
Обработчик ошибок стандартный try CATCH end для (xHarbour).
Разныее RDD для записи не желательны. Для чтения потоянно использую cdx и ADS. Все нормально.
"Сказки" о нестабильности индексов преувеличены. Если используешь один тип программ, то все работает НОРМАЛЬНО ГОДАМИ!

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

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