Загрузка данных
# Указываем путь для сохранения базы данных (на Рабочий стол)
$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
}