Форум » [x]Harbour » Обработка ошибок при создании/открытии базы » Ответить

Обработка ошибок при создании/открытии базы

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

Ответов - 2

Andrey: Вот примерно так: 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 Правь под себя. Обработчик ошибок - простой.

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



полная версия страницы