FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9145
Вход
Реиндексация таблиц базы данных

Реиндексация таблиц базы данных. Удобно тем, что не нужно реиндексировать каждую таблицу.


 
Прислал: A.Пинигин   Категория: Работа с данными


Реиндексация таблиц базы данных

CLOSE TABLES
FOR i = 1 to ADBOBJECTS(laTables, "Table")
IF !EMPTY(laTables[i])
IF !USED(laTables[i])
USE (laTables[i]) IN 0 EXCL
SELECT (laTables[i])
WAIT WINDOW NOWAIT REINDEXING_LOC + ;

UPPER(ALLTRIM(laTables[i])) + ".DBF"

REINDEX
ENDIF
ENDIF
ENDFOR
CLOSE TABLES
WAIT WINDOW NOWAIT DONE_LOC
#DEFINE OUTFILE "valdbc.txt"
CLOSE TABLES

IF FILE(OUTFILE)
DELETE FILE OUTFILE
ENDIF

this.WaitMode(.T.)
WAIT WINDOW NOWAIT VALIDATING_LOC
VALIDATE DATABASE TO FILE OUTFILE NOCONSOLE
WAIT CLEAR
this.WaitMode(.F.)

MODIFY FILE OUTFILE NOMODIFY NOMENU

DELETE FILE OUTFILE

A.Пинигин, СБОРНИК прибамбасов для VFP по материалам конференций, литературы и собственных разработок. г. Рига E-mail: apinigin@olainfarm.lv
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.891)
Дополнения пользователей
Реиндексация таблиц базы данных
[+][?]
Игорь Викторович
09.05.04 14:10:43

Очень часто бывает так, что при "улетевших" индексах фокс не может открыть таблицу! Как тогда ее
переиндексировать?
Решение может быть такое:
CLOSE TABLES ALL
CLOSE DATABASES
SET SAFETY OFF
set exclusive on
SET MESSAGE TO [Открытие БАЗЫ ДАННЫХ]
PathDB = ["]+ path_dbf+ [VITRINA"]
on error do curerr
OPEN DATABASE &PathDB EXCLUSIVE
ON ERROR
SET MESSAGE TO [Удаление первичных иддексов]
SET MESSAGE TO [Удаление индексов в таблице ZAG]
ALTER TABLE zag	DROP FOREIGN KEY TAG naim

SET MESSAGE TO [Удаление индексов в таблице LST]
ALTER TABLE lst	DROP FOREIGN KEY TAG tel
ALTER TABLE lst	DROP FOREIGN KEY TAG sod_ind
ALTER TABLE lst	DROP FOREIGN KEY TAG par_sod
* и так далее...
close tables all

SET MESSAGE TO [Переиндексация файла ZAG]
*******************************************************	FileName = path_dbf + [zag.dbf]
=UnCdx(FileName)
FileName = ["]+ fileName+ ["]
use &FileName alias zag
***** Create each index for ZAG *****
SET COLLATE TO 'MACHINE'
INDEX ON NAIM TAG NAIM
*и так далее...
********************************************
* Program-ID ...: UnCDX.PRG
* Purpose ......: Удаляет метку наличия индекса "CDX"
*               : (значение х01 в 29 байте файла .DBF)
*               : Используется для исключения ошибки 1707
********************************************
function UnCDX
parameters FileName
private TalkSet
TalkSet = set('talk')
set talk off
CdxName  = left(FileName, len(FileName) - 4)
CdxName  = CdxName + ".cdx"
FileName = fullpath(FileName)
CdxName  = fullpath(CdxName)
fh       = fopen(FileName, 2)
if fh < 0
   ??chr(7)
   wait "Hе могу открыть файл : " + FileName nowait window
   return .F.
endif
test     = fseek(fh, 28, 0)
         = fwrite(fh, chr(0))
         = fclose(fh)
if file(CdxName)
  delete file &CdxName
endif
set talk &TalkSet
return .T.
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика