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


$desktop = [Environment]::GetFolderPath("Desktop")
$dbPath = Join-Path $desktop "Приемная комиссия.accdb"
if (Test-Path $dbPath) { Remove-Item $dbPath -Force }

$access = New-Object -ComObject Access.Application
$access.NewCurrentDatabase($dbPath)
$db = $access.CurrentDb()

# --- 1. СОЗДАНИЕ ТАБЛИЦ ---
$db.Execute("CREATE TABLE [ФАКУЛЬТЕТЫ] ([КОД_ФКТ] TEXT(2) PRIMARY KEY, [ФАКУЛЬТЕТ] TEXT(30), [ЭКЗАМЕН_1] TEXT(30), [ЭКЗАМЕН_2] TEXT(30), [ЭКЗАМЕН_3] TEXT(30))")
$db.Execute("CREATE TABLE [СПЕЦИАЛЬНОСТИ] ([КОД_СПЕЦ] TEXT(3) PRIMARY KEY, [СПЕЦИАЛЬНОСТЬ] TEXT(30), [КОД_ФКТ] TEXT(2), [ПЛАН] TEXT(255))")
$db.Execute("CREATE TABLE [АБИТУРИЕНТЫ] ([РЕГ_НОМ] TEXT(4) PRIMARY KEY, [КОД_СПЕЦ] TEXT(3), [МЕДАЛЬ] YESNO, [СТАЖ] SHORT)")
$db.Execute("CREATE TABLE [АНКЕТЫ] ([РЕГ_НОМ] TEXT(4) PRIMARY KEY, [ФАМИЛИЯ] TEXT(30), [ИМЯ] TEXT(20), [ОТЧЕСТВО] TEXT(20), [ГОРОД] TEXT(30), [ДАТА_РОЖД] DATETIME, [УЧ_ЗАВЕДЕНИЕ] TEXT(50))")
$db.Execute("CREATE TABLE [ОЦЕНКИ] ([РЕГ_НОМ] TEXT(4) PRIMARY KEY, [Оценка_1] BYTE, [Оценка_2] BYTE, [Оценка_3] BYTE)")
$db.Execute("CREATE TABLE [ИТОГИ] ([РЕГ_НОМ] TEXT(4) PRIMARY KEY, [ЗАЧИСЛЕНИЕ] YESNO)")

# --- 2. ЗАПОЛНЕНИЕ ДАННЫХ ---
# ФАКУЛЬТЕТЫ
$db.Execute("INSERT INTO [ФАКУЛЬТЕТЫ] VALUES ('01', 'экономический', 'математика', 'география', 'русский язык')")
$db.Execute("INSERT INTO [ФАКУЛЬТЕТЫ] VALUES ('02', 'исторический', 'история Отечества', 'иностранный язык', 'сочинение')")
$db.Execute("INSERT INTO [ФАКУЛЬТЕТЫ] VALUES ('03', 'юридический', 'русский язык', 'иностранный язык', 'обществознание')")

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

# АБИТУРИЕНТЫ
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('1012', '101', True, 1)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('1023', '101', False, 0)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('1119', '102', True, 0)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('1120', '102', True, 0)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('2010', '201', False, 0)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('2015', '203', False, 3)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('2054', '203', True, 2)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('2132', '201', False, 0)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('3005', '310', False, 0)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('3034', '311', False, 1)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('3067', '310', False, 3)")
$db.Execute("INSERT INTO [АБИТУРИЕНТЫ] VALUES ('3118', '310', False, 2)")

# АНКЕТЫ
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('1012', 'Васильева', 'Ольга', 'Николаевна', 'Пермь', #1981-10-12#, 'ПТУ № 8')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('1023', 'Быков', 'Алексей', 'Ильич', 'Кунгур', #1982-04-24#, 'Школа № 7')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('1119', 'Круг', 'Борис', 'Моисеевич', 'Пермь', #1982-09-18#, 'Школа № 102')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('1120', 'Листьев', 'Дмитрий', 'Владимирович', 'Березники', #1981-12-01#, 'Школа № 5')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('2010', 'Елькин', 'Виктор', 'Алексеевич', 'Елабуга', #1982-07-20#, 'ПТУ № 1')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('2015', 'Мухин', 'Олег', 'Иванович', 'Березники', #1978-03-25#, 'Школа № 77')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('2054', 'Григорьева', 'Наталья', 'Дмитриевна', 'Пермь', #1980-02-14#, 'Школа № 3')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('2132', 'Зубова', 'Ирина', 'Афанасьевна', 'Пермь', #1981-11-22#, 'Школа № 96')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('3005', 'Анохин', 'Сергей', 'Петрович', 'Пермь', #1982-03-30#, 'Школа № 12')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('3034', 'Жакин', 'Николай', 'Якимович', 'Пермь', #1981-10-19#, 'Школа № 12')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('3067', 'Дикий', 'Илья', 'Борисович', 'Березники', #1977-12-28#, 'Школа № 3')")
$db.Execute("INSERT INTO [АНКЕТЫ] VALUES ('3118', 'Ильин', 'Петр', 'Викторович', 'Кунгур', #1980-07-14#, 'ПТУ № 8')")

# ОЦЕНКИ
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('1012', 4, 5, 5)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('1023', 4, 4, 4)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('1119', 5, 5, 5)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('1120', 3, 5, 5)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('2010', 3, 2, 0)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('2015', 5, 5, 5)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('2054', 4, 5, 5)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('2132', 4, 3, 5)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('3005', 3, 0, 0)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('3034', 3, 3, 4)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('3067', 5, 4, 3)")
$db.Execute("INSERT INTO [ОЦЕНКИ] VALUES ('3118', 5, 5, 4)")

# ИТОГИ
foreach ($reg in @('1012','1023','1119','1120','2010','2015','2054','2132','3005','3034','3067','3118')) {
    $db.Execute("INSERT INTO [ИТОГИ] VALUES ('$reg', False)")
}

# --- 3. СВЯЗИ ТАБЛИЦ (ПО СХЕМЕ «ПРОВЕРЬ СЕБЯ») ---
function New-DbRelation ($db, $relName, $pTable, $fTable, $pField, $fField) {
    $rel = $db.CreateRelation($relName, $pTable, $fTable)
    $rel.Attributes = 4352  # Целостность данных + каскадное обновление + каскадное удаление
    $fld = $rel.CreateField($pField)
    $fld.ForeignName = $fField
    $rel.Fields.Append($fld)
    $db.Relations.Append($rel)
}

New-DbRelation $db "ФАКУЛЬТЕТЫ_СПЕЦИАЛЬНОСТИ" "ФАКУЛЬТЕТЫ" "СПЕЦИАЛЬНОСТИ" "КОД_ФКТ" "КОД_ФКТ"
New-DbRelation $db "СПЕЦИАЛЬНОСТИ_АБИТУРИЕНТЫ" "СПЕЦИАЛЬНОСТИ" "АБИТУРИЕНТЫ" "КОД_СПЕЦ" "КОД_СПЕЦ"
New-DbRelation $db "АБИТУРИЕНТЫ_АНКЕТЫ" "АБИТУРИЕНТЫ" "АНКЕТЫ" "РЕГ_НОМ" "РЕГ_НОМ"
New-DbRelation $db "АНКЕТЫ_ОЦЕНКИ" "АНКЕТЫ" "ОЦЕНКИ" "РЕГ_НОМ" "РЕГ_НОМ"
New-DbRelation $db "ОЦЕНКИ_ИТОГИ" "ОЦЕНКИ" "ИТОГИ" "РЕГ_НОМ" "РЕГ_НОМ"

# --- 4. СОЗДАНИЕ ФОРМ ---
try {
    $m = [System.Type]::Missing
    # Форма АНКЕТЫ
    $f1 = $access.CreateForm()
    $name1 = $f1.Name
    $f1.RecordSource = "АНКЕТЫ"
    $y = 300
    foreach ($col in @("РЕГ_НОМ","ФАМИЛИЯ","ИМЯ","ОТЧЕСТВО","ГОРОД","ДАТА_РОЖД","УЧ_ЗАВЕДЕНИЕ")) {
        $lbl = $access.CreateControl($name1, 100, 0, $m, $m, 300, $y, 2200, 320)
        $lbl.Caption = $col
        $null = $access.CreateControl($name1, 109, 0, $m, $col, 2600, $y, 3500, 320)
        $y += 420
    }
    $access.DoCmd.Close(2, $name1, 1)
    $access.DoCmd.Rename("АНКЕТЫ", 2, $name1)

    # Форма АБИТУРИЕНТЫ
    $f2 = $access.CreateForm()
    $name2 = $f2.Name
    $f2.RecordSource = "АБИТУРИЕНТЫ"
    $y = 300
    foreach ($col in @("РЕГ_НОМ","КОД_СПЕЦ","МЕДАЛЬ","СТАЖ")) {
        $lbl = $access.CreateControl($name2, 100, 0, $m, $m, 300, $y, 2200, 320)
        $lbl.Caption = $col
        $type = if ($col -eq "МЕДАЛЬ") { 106 } else { 109 }
        $null = $access.CreateControl($name2, $type, 0, $m, $col, 2600, $y, 2500, 320)
        $y += 420
    }
    $access.DoCmd.Close(2, $name2, 1)
    $access.DoCmd.Rename("АБИТУРИЕНТЫ", 2, $name2)
} catch {}

$access.CloseCurrentDatabase()
$access.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($access) | Out-Null

Write-Host "`nРАБОТА ПОЛНОСТЬЮ ВЫПОЛНЕНА!" -ForegroundColor Green
Write-Host "Файл 'Приемная комиссия.accdb' сохранен на вашем Рабочем столе.`n" -ForegroundColor Cyan