воскресенье, 22 июля 2012 г.

Автоматическое создание базы данных нового года


Столкнулся с тем, что во многих программах базы являются годовыми, и перед началом следующего года программист создает пустую базу руками. Чтобы избежать этого геморроя и склерозных недоразумений, написал процедуру автоматического создания новой базы данных при начале работы в новом году.
*Creating database ishoddokument
SET PATH TO "d:\копии\11072012\"
LOCAL pat &&путь к таблице
LOCAL curyear &&текущий год
LOCAL lastyear && предыдущий год
pat="d:\копии\11072012\"
curyear=RIGHT(STR(YEAR(DATE())),2)
lastyear=RIGHT(STR(YEAR(DATE())-1),2)
*если не существует файла базы данных на текущий год, то создается новая *база текущего года копированием структуры старой
IF !FILE("vhdokument"+curyear+".dbc")
    CREATE DATABASE pat+"vhdokument"+curyear+".dbc"
    open database "vhdokument"+lastyear+".dbc"
     USE "dogovor"+lastyear+".dbf"
    COPY STRUCTURE TO pat+"dogovor"+curyear+".dbf" WITH CDX NAME dogovor DATABASE "vhdokument"+curyear
   USE "rassilka_dogovora"+lastyear+".dbf"
   COPY STRUCTURE TO pat+"rassilka_dogovora"+curyear+".dbf" WITH CDX NAME rassilka_dogovora DATABASE "vhdokument"+curyear
   USE "pismo"+lastyear+".dbf"
   COPY STRUCTURE TO pat+"pismo"+curyear+".dbf" WITH CDX NAME pismo DATABASE "vhdokument"+curyear
   USE "rassilka_pisma"+lastyear+".dbf"
    COPY STRUCTURE TO pat+"rassilka_pisma"+curyear+".dbf" WITH CDX NAME rassilka_pisma DATABASE "vhdokument"+curyear
ENDIF
CLOSE TABLES ALL
CLOSE DATABASES ALL
OPEN DATABASE pat+"vhdokument"+curyear+".dbc" EXCLUSIVE 
 USE "dogovor"+curyear+".dbf" ALIAS dogovor EXCLUSIVE  IN 0
USE "pismo"+curyear+".dbf" ALIAS pismo EXCLUSIVE IN 0
USE "rassilka_dogovora"+curyear+".dbf" ALIAS rassilka_dogovora EXCLUSIVE IN 0
USE "rassilka_pisma"+curyear+".dbf" ALIAS rassilka_pisma EXCLUSIVE IN 0
*MakeRelation_1
ALTER TABLE 'RASSILKA_DOGOVORA' ADD FOREIGN KEY TAG CREGNOMER REFERENCES DOGOVOR TAG CREGNOMER

*MakeRelation_2
ALTER TABLE 'RASSILKA_PISMA' ADD FOREIGN KEY TAG CREGNOMER REFERENCES PISMO TAG CREGNOMER

CLOSE TABLES ALL
 CLOSE DATABASES ALL
  
В результате получаем вот такую базу данных - копию той, структуру которой скопировали.
 

Комментариев нет:

Отправить комментарий