Загрузка данных


# Указываем путь для сохранения базы данных (на Рабочий стол)
$dbPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "Приемная комиссия.accdb"

# Удаляем старый файл, если он есть, чтобы не было ошибок
if (Test-Path $dbPath) { Remove-Item $dbPath -Force }

# Создаем объект Access
$access = New-Object -ComObject Access.Application

try {
    Write-Host "Создание базы данных..." -ForegroundColor Cyan
    $db = $access.DBEngine.CreateDatabase($dbPath, 10) # 10 = dbVersion40 (Access 2007+)
    $access.CurrentDb() | Out-Null

    # --- СОЗДАНИЕ ТАБЛИЦ ---
    Write-Host "Создание таблиц..." -ForegroundColor Cyan
    
    # 1. ФАКУЛЬТЕТЫ
    $access.CurrentDb().Execute("CREATE TABLE ФАКУЛЬТЕТЫ (КОД_ФКТ TEXT(2) CONSTRAINT PK_Фак PRIMARY KEY, ФАКУЛЬТЕТ TEXT(30), ЭКЗАМЕН_1 TEXT(30), ЭКЗАМЕН_2 TEXT(30), ЭКЗАМЕН_3 TEXT(30))")
    
    # 2. СПЕЦИАЛЬНОСТИ
    $access.CurrentDb().Execute("CREATE TABLE СПЕЦИАЛЬНОСТИ (КОД_СПЕЦ TEXT(3) CONSTRAINT PK_Спец PRIMARY KEY, СПЕЦИАЛЬНОСТЬ TEXT(30), КОД_ФКТ TEXT(2), ПЛАН TEXT(255))")
    
    # 3. АБИТУРИЕНТЫ
    $access.CurrentDb().Execute("CREATE TABLE АБИТУРИЕНТЫ (РЕГ_НОМ TEXT(4) CONSTRAINT PK_Абит PRIMARY KEY, КОД_СПЕЦ TEXT(3), МЕДАЛЬ LOGICAL, СТАЖ INTEGER)")
    
    # 4. АНКЕТЫ
    $access.CurrentDb().Execute("CREATE TABLE АНКЕТЫ (РЕГ_НОМ TEXT(4) CONSTRAINT PK_Анкеты PRIMARY KEY, ФАМИЛИЯ TEXT(30), ИМЯ TEXT(20), ОТЧЕСТВО TEXT(20), ГОРОД TEXT(30), ДАТА_РОЖД DATE, УЧ_ЗАВЕДЕНИЕ TEXT(50))")
    
    # 5. ОЦЕНКИ
    $access.CurrentDb().Execute("CREATE TABLE ОЦЕНКИ (РЕГ_НОМ TEXT(4) CONSTRAINT PK_Оценки PRIMARY KEY, ОЦЕНКА_1 BYTE, ОЦЕНКА_2 BYTE, ОЦЕНКА_3 BYTE)")
    
    # 6. ИТОГИ
    $access.CurrentDb().Execute("CREATE TABLE ИТОГИ (РЕГ_НОМ TEXT(4) CONSTRAINT PK_Итоги PRIMARY KEY, ЗАЧИСЛЕНИЕ LOGICAL)")

    # --- СОЗДАНИЕ СВЯЗЕЙ (FOREIGN KEYS) ---
    Write-Host "Создание связей между таблицами..." -ForegroundColor Cyan
    
    # Связь СПЕЦИАЛЬНОСТИ -> ФАКУЛЬТЕТЫ
    $access.CurrentDb().Execute("ALTER TABLE СПЕЦИАЛЬНОСТИ ADD CONSTRAINT FK_Спец_Фак FOREIGN KEY (КОД_ФКТ) REFERENCES ФАКУЛЬТЕТЫ (КОД_ФКТ)")
    
    # Связь АБИТУРИЕНТЫ -> СПЕЦИАЛЬНОСТИ
    $access.CurrentDb().Execute("ALTER TABLE АБИТУРИЕНТЫ ADD CONSTRAINT FK_Абит_Спец FOREIGN KEY (КОД_СПЕЦ) REFERENCES СПЕЦИАЛЬНОСТИ (КОД_СПЕЦ)")
    
    # Связь АНКЕТЫ -> АБИТУРИЕНТЫ (1 к 1)
    $access.CurrentDb().Execute("ALTER TABLE АНКЕТЫ ADD CONSTRAINT FK_Анкеты_Абит FOREIGN KEY (РЕГ_НОМ) REFERENCES АБИТУРИЕНТЫ (РЕГ_НОМ)")
    
    # Связь ОЦЕНКИ -> АБИТУРИЕНТЫ (1 к 1)
    $access.CurrentDb().Execute("ALTER TABLE ОЦЕНКИ ADD CONSTRAINT FK_Оценки_Абит FOREIGN KEY (РЕГ_НОМ) REFERENCES АБИТУРИЕНТЫ (РЕГ_НОМ)")
    
    # Связь ИТОГИ -> АБИТУРИЕНТЫ (1 к 1)
    $access.CurrentDb().Execute("ALTER TABLE ИТОГИ ADD CONSTRAINT FK_Итоги_Абит FOREIGN KEY (РЕГ_НОМ) REFERENCES АБИТУРИЕНТЫ (РЕГ_НОМ)")

    # --- ЗАПОЛНЕНИЕ ДАННЫМИ ---
    Write-Host "Заполнение таблиц данными..." -ForegroundColor Cyan
    
    # Данные для ФАКУЛЬТЕТЫ (пункт 9)
    $access.CurrentDb().Execute("INSERT INTO ФАКУЛЬТЕТЫ VALUES ('01', 'экономический', 'математика', 'география', 'русский язык')")
    $access.CurrentDb().Execute("INSERT INTO ФАКУЛЬТЕТЫ VALUES ('02', 'исторический', 'история Отечества', 'иностранный язык', 'сочинение')")
    $access.CurrentDb().Execute("INSERT INTO ФАКУЛЬТЕТЫ VALUES ('03', 'юридический', 'русский язык', 'иностранный язык', 'обществознание')")

    # Данные для СПЕЦИАЛЬНОСТИ (пункт 10)
    $access.CurrentDb().Execute("INSERT INTO СПЕЦИАЛЬНОСТИ VALUES ('101', 'финансы и кредит', '01', '25')")
    $access.CurrentDb().Execute("INSERT INTO СПЕЦИАЛЬНОСТИ VALUES ('102', 'бухгалтерский учет', '01', '40')")
    $access.CurrentDb().Execute("INSERT INTO СПЕЦИАЛЬНОСТИ VALUES ('201', 'история', '02', '50')")
    $access.CurrentDb().Execute("INSERT INTO СПЕЦИАЛЬНОСТИ VALUES ('203', 'политология', '02', '25')")
    $access.CurrentDb().Execute("INSERT INTO СПЕЦИАЛЬНОСТИ VALUES ('310', 'юриспруденция', '03', '60')")
    $access.CurrentDb().Execute("INSERT INTO СПЕЦИАЛЬНОСТИ VALUES ('311', 'социальная работа', '03', '25')")

    # Данные для АБИТУРИЕНТЫ (пункт 18)
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('1012', '101', True, 1)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('1023', '101', False, 0)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('1119', '102', True, 0)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('1120', '102', True, 0)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('2010', '201', False, 0)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('2015', '203', False, 3)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('2054', '203', True, 2)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('2132', '201', False, 0)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('3005', '310', False, 0)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('3034', '311', False, 1)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('3067', '310', False, 3)")
    $access.CurrentDb().Execute("INSERT INTO АБИТУРИЕНТЫ VALUES ('3118', '310', False, 2)")

    # Данные для АНКЕТЫ (пункт 17 - первые 2 записи, остальные можно добавить через форму)
    $access.CurrentDb().Execute("INSERT INTO АНКЕТЫ VALUES ('1012', 'Васильева', 'Ольга', 'Николаевна', 'Пермь', '12.10.1981', 'ПТУ № 8')")
    $access.CurrentDb().Execute("INSERT INTO АНКЕТЫ VALUES ('1023', 'Быков', 'Алексей', 'Ильич', 'Кунгур', '24.04.1982', 'Школа № 7')")

    # Данные для ОЦЕНКИ (пункт 21)
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('1012', 4, 5, 5)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('1023', 4, 4, 4)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('1119', 5, 5, 5)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('1120', 3, 5, 5)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('2010', 3, 2, 0)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('2015', 5, 5, 5)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('2054', 4, 4, 5)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('2132', 5, 5, 5)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('3005', 5, 0, 0)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('3034', 4, 5, 4)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('3067', 3, 3, 3)")
    $access.CurrentDb().Execute("INSERT INTO ОЦЕНКИ VALUES ('3118', 5, 5, 4)")

    # Данные для ИТОГИ (пункт 24)
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('1012', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('1023', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('1119', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('1120', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('2010', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('2015', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('2054', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('2132', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('3005', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('3034', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('3067', False)")
    $access.CurrentDb().Execute("INSERT INTO ИТОГИ VALUES ('3118', False)")

    Write-Host "Все данные успешно добавлены!" -ForegroundColor Green

} catch {
    Write-Host "Ошибка: $($_.Exception.Message)" -ForegroundColor Red
} finally {
    # Закрываем базу и выходим из Access
    if ($db) { $db.Close() }
    if ($access) { $access.Quit() }
    
    # Освобождаем COM-объекты
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($access) | Out-Null
    
    Write-Host "Готово! База данных сохранена по пути: $dbPath" -ForegroundColor Green
    Write-Host "Откройте файл в Access и проверьте Схему данных (вкладка Работа с базами данных -> Схема данных)." -ForegroundColor Yellow
}