4.4.4. Информация о заполнении базы данных

 

Хорошую помощь при составлении отчетов о проделанной работе может оказать запуск формы Fill. Результаты ее работы показаны на рис. 4.32. В окружение данных этой формы ничего помещать не надо. Необходимые выборки выполняются в процессе работы и удаляются после закрытия формы.

 


Код события Load формы Fill:

 

* Создание временной таблицы Fill

SELECT * FROM INFO INTO TABLE 'C:\WINNT\TEMP\FILL'

SELECT INFO

USE

* Добавляем поля в таблицу-выборку

ALTER TABLE 'C:\WINNT\TEMP\FILL' ;

     ADD COLUMN NumRec N(8);

     ADD COLUMN DateModify D;

     ADD COLUMN AllField N(2);

     ADD COLUMN LenRec N(3);

     ADD COLUMN AllByte N(13,2)

* Создание глобальных переменных

PUBLIC nSumRecord,nSumByte

STORE 0 TO nSumRecord,nSumByte

SELECT FILL

SCAN

   SCATTER MEMVAR

   NameTable=[(']+ALLTRIM(M.DBF)+[')]

   NameSelect=ALLTRIM(M.DBF)

   IF .NOT. USED &NameTable

      USE &NameTable IN 0

   ENDIF

   SELECT &NameSelect

   M.NumRec=RECCOUNT()

   M.DateModify=LUPDATE()

   M.AllField=FCOUNT()

   M.LenRec=RECSIZE()

   M.AllByte=(RECCOUNT()*RECSIZE()+HEADER()+1)/1024

   USE

   SELECT FILL

   GATHER MEMVAR

ENDSCAN    

* Подсчет количества записей и размера таблиц

SUM NUMREC TO nSumRecord ALL

SUM ALLBYTE TO nSumByte ALL

nSumByte=nSumByte

* Создание индексов

INDEX ON ALLBYTE TAG ALLBYTE OF 'C:\WINNT\TEMP\FILL' DESCENDING

INDEX ON DBF TAG DBF OF 'C:\WINNT\TEMP\FILL'

INDEX ON INFO TAG INFO OF 'C:\WINNT\TEMP\\FILL'

SET ORDER TO TAG ALLBYTE

GOTO TOP

 

Код события Activate формы Fill:

 

ThisForm.Label1.Caption=[Всего таблиц ......]+;

                        STR(RECCOUNT(),7)+[ штук]

ThisForm.Label2.Caption=[Всего записей .....]+;

                        STR(nSumRecord,7)+[ штук]

ThisForm.Label3.Caption=[Место на диске ....]+;

                        STR(nSumByte,7)  +[ Кбайт]

ThisForm.Command1.SetFocus

 

Код события Destroy формы Fill:

 

* Освобождение глобальных переменных

RELEASE nSumRecord,nSumByte

* Удаление временных выборок

CLOSE TABLES ALL

IF FILE ('C:\WINNT\TEMP\Fill.dbf' )

   DELETE FILE 'C:\WINNT\TEMP\Fill.dbf'

ENDIF  

IF FILE ('C:\WINNT\TEMP\Fill.bak' )

   DELETE FILE 'C:\WINNT\TEMP\Fill.bak'

ENDIF  

IF FILE ('C:\WINNT\TEMP\Fill.cdx' )

   DELETE FILE 'C:\WINNT\TEMP\Fill.cdx'

ENDIF