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


$dbPath = "$HOME\Desktop\ТБ Ромашка.accdb"

# Удаляем файл, если он уже существовал
if (Test-Path $dbPath) {
    Remove-Item $dbPath -Force
}

Write-Host "Создание базы данных 'ТБ Ромашка'..." -ForegroundColor Cyan

# 1. Создание БД через ADOX
$cat = New-Object -ComObject ADOX.Catalog
$connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$dbPath;"
$cat.Create($connStr)

# 2. Таблица Заказы
$tblOrders = New-Object -ComObject ADOX.Table
$tblOrders.Name = "Заказы"

$colOrdId = New-Object -ComObject ADOX.Column
$colOrdId.Name = "№ заказа"
$colOrdId.Type = 3 # adInteger
$colOrdId.Properties["AutoIncrement"].Value = $true
$tblOrders.Columns.Append($colOrdId)

$colOrdProd = New-Object -ComObject ADOX.Column
$colOrdProd.Name = "№ товара"
$colOrdProd.Type = 3
$tblOrders.Columns.Append($colOrdProd)

$colOrdCli = New-Object -ComObject ADOX.Column
$colOrdCli.Name = "№ клиента"
$colOrdCli.Type = 3
$tblOrders.Columns.Append($colOrdCli)

$colOrdQty = New-Object -ComObject ADOX.Column
$colOrdQty.Name = "Количество"
$colOrdQty.Type = 3
$tblOrders.Columns.Append($colOrdQty)

$colOrdDate = New-Object -ComObject ADOX.Column
$colOrdDate.Name = "Дата заказа"
$colOrdDate.Type = 7 # adDate
$tblOrders.Columns.Append($colOrdDate)

# Первичный ключ для Заказы
$tblOrders.Keys.Append("PK_Заказы", 1, "№ заказа")
$cat.Tables.Append($tblOrders)

# 3. Таблица Клиенты
$tblClients = New-Object -ComObject ADOX.Table
$tblClients.Name = "Клиенты"

$colCliId = New-Object -ComObject ADOX.Column
$colCliId.Name = "№ клиента"
$colCliId.Type = 3
$tblClients.Columns.Append($colCliId)

$colCliSurname = New-Object -ComObject ADOX.Column
$colCliSurname.Name = "Фамилия"
$colCliSurname.Type = 202 # adVarWChar
$colCliSurname.DefinedSize = 100
$tblClients.Columns.Append($colCliSurname)

$colCliAddr = New-Object -ComObject ADOX.Column
$colCliAddr.Name = "Адрес"
$colCliAddr.Type = 202
$colCliAddr.DefinedSize = 150
$tblClients.Columns.Append($colCliAddr)

$colCliPhone = New-Object -ComObject ADOX.Column
$colCliPhone.Name = "Телефон"
$colCliPhone.Type = 202
$colCliPhone.DefinedSize = 50
$tblClients.Columns.Append($colCliPhone)

# Первичный ключ для Клиенты
$tblClients.Keys.Append("PK_Клиенты", 1, "№ клиента")
$cat.Tables.Append($tblClients)

# 4. Таблица Товары
$tblProducts = New-Object -ComObject ADOX.Table
$tblProducts.Name = "Товары"

$colProdId = New-Object -ComObject ADOX.Column
$colProdId.Name = "№ товара"
$colProdId.Type = 3
$colProdId.Properties["AutoIncrement"].Value = $true
$tblProducts.Columns.Append($colProdId)

$colProdName = New-Object -ComObject ADOX.Column
$colProdName.Name = "Товар"
$colProdName.Type = 202
$colProdName.DefinedSize = 100
$tblProducts.Columns.Append($colProdName)

$colProdQty = New-Object -ComObject ADOX.Column
$colProdQty.Name = "Количество"
$colProdQty.Type = 3
$tblProducts.Columns.Append($colProdQty)

$colProdPrice = New-Object -ComObject ADOX.Column
$colProdPrice.Name = "Цена"
$colProdPrice.Type = 6 # adCurrency
$tblProducts.Columns.Append($colProdPrice)

$colProdExp = New-Object -ComObject ADOX.Column
$colProdExp.Name = "Срок годности"
$colProdExp.Type = 7
$tblProducts.Columns.Append($colProdExp)

# Первичный ключ для Товары
$tblProducts.Keys.Append("PK_Товары", 1, "№ товара")
$cat.Tables.Append($tblProducts)

# 5. Установка внешних ключей (Связи между таблицами с целостностью)
$fkClients = New-Object -ComObject ADOX.Key
$fkClients.Name = "FK_Заказы_Клиенты"
$fkClients.Type = 2 # adKeyForeign
$fkClients.RelatedTable = "Клиенты"
$fkClients.Columns.Append("№ клиента")
$fkClients.Columns["№ клиента"].RelatedColumn = "№ клиента"
$fkClients.UpdateRule = 1 # adRIRestrict
$fkClients.DeleteRule = 1
$cat.Tables["Заказы"].Keys.Append($fkClients)

$fkProducts = New-Object -ComObject ADOX.Key
$fkProducts.Name = "FK_Заказы_Товары"
$fkProducts.Type = 2 # adKeyForeign
$fkProducts.RelatedTable = "Товары"
$fkProducts.Columns.Append("№ товара")
$fkProducts.Columns["№ товара"].RelatedColumn = "№ товара"
$fkProducts.UpdateRule = 1
$fkProducts.DeleteRule = 1
$cat.Tables["Заказы"].Keys.Append($fkProducts)

# Закрываем ADOX connection
$cat.ActiveConnection.Close()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($cat) | Out-Null

Write-Host "Заполнение таблиц данными..." -ForegroundColor Yellow

# 6. Вставка данных через ADODB
$conn = New-Object -ComObject ADODB.Connection
$conn.Open($connStr)

# Заполнение таблицы Клиенты
$conn.Execute("INSERT INTO [Клиенты] ([№ клиента], [Фамилия], [Адрес], [Телефон]) VALUES (1, 'Сахаренко А.П.', 'Ул, Ложевая, д. 17, кв. 4', '555-55-55')")
$conn.Execute("INSERT INTO [Клиенты] ([№ клиента], [Фамилия], [Адрес], [Телефон]) VALUES (2, 'Аксенов И. И.', 'ул. Лермонтовская, д. 5, кв. 7', 'нет')")
$conn.Execute("INSERT INTO [Клиенты] ([№ клиента], [Фамилия], [Адрес], [Телефон]) VALUES (3, 'Климова В. С.', 'Газетный проезд, д.41, кв. 6', '14-45-78')")
$conn.Execute("INSERT INTO [Клиенты] ([№ клиента], [Фамилия], [Адрес], [Телефон]) VALUES (4, 'Бережной Т. О.', 'ул. Гагарина, д. 5, кв.102', '23-14-00')")
$conn.Execute("INSERT INTO [Клиенты] ([№ клиента], [Фамилия], [Адрес], [Телефон]) VALUES (5, 'Соколова К. В.', 'ул. Пушкинская, д. 56, кв. 99', '789-12-44')")
$conn.Execute("INSERT INTO [Клиенты] ([№ клиента], [Фамилия], [Адрес], [Телефон]) VALUES (6, 'Петренко Г. В.', 'ул. Новая, д. 20, кв. 10', 'нет')")

# Заполнение таблицы Товары
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Кофе', 100, 45.00, #2010-08-15#)")
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Чай', 200, 28.50, #2010-08-15#)")
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Сок яблочный', 120, 24.00, #2009-10-16#)")
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Уксус', 30, 8.00, #2011-01-04#)")
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Мука', 100, 10.00, #2001-02-05#)")
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Соль', 50, 3.00, #2011-02-05#)")
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Макароны', 150, 12.00, #2009-05-01#)")
$conn.Execute("INSERT INTO [Товары] ([Товар], [Количество], [Цена], [Срок годности]) VALUES ('Пшено', 140, 8.00, #2009-01-01#)")

# Заполнение таблицы Заказы
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (3, 5, 15, #2009-07-07#)")
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (2, 2, 12, #2009-07-12#)")
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (5, 3, 65, #2009-08-19#)")
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (8, 2, 5, #2009-09-21#)")
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (7, 6, 80, #2009-09-22#)")
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (1, 1, 30, #2009-05-21#)")
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (4, 4, 10, #2009-05-07#)")
$conn.Execute("INSERT INTO [Заказы] ([№ товара], [№ клиента], [Количество], [Дата заказа]) VALUES (6, 3, 3, #2009-10-20#)")

$conn.Close()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($conn) | Out-Null

Write-Host "Всё готово! База данных создана и заполнена на рабочем столе:" -ForegroundColor Green
Write-Host $dbPath -ForegroundColor Yellow