Автор: Пользователь скрыл имя, 19 Марта 2012 в 09:08, курсовая работа
В данном курсов проекте необходимо было создать базу данных в любой среде и осуществить ее управление при помощи клиента, созданного на языке программирования C#. База данных была написана в программе Microsoft Access.
Microsoft Access - это функционально полная реляционная СУБД. В ней предусмотрены все необходимые вам средства для определения и обработки данных, а также для управления ими при работе с большими объемами информации. Что касается легкости использования, то Microsoft Access совершил здесь настоящий переворот, и многие для создания своих собственных баз данных и приложений обращаются именно к нему.
Каскадное обновление и удаление связанных записей
Если для выбранной связи обеспечивается поддержание целостности, можно задать режим каскадного обновления связанных полей и режим каскадного удаления связанных записей.
В режиме каскадного обновления связанных полей при изменении значения поля связи в записи главной таблицы, Access автоматически изменит значения в соответствующем поле в подчиненных записях.
В режиме каскадного удаления связанных записей при удалении записи из главной таблицы будут автоматически удаляться все связанные записи в подчиненных таблицах. При удалении записи из главной таблицы выполняется каскадное удаление подчиненных записей на всех уровнях, если этот режим задан на каждом уровне.
При удалении
записей непосредственно в
Язык SQL (аббревиатура Structured Query Language) – это язык структурированных запросов, стандартный язык, предназначенный для создания баз данных, добавления новых и поддержки имеющихся данных, а также извлечения требуемой информации. Язык SQL с самого начала был создан, чтобы работать с данными из тех баз, которые следуют реляционной модели.
Каждому запросу MS Access можно сопоставить эквивалентную инструкцию SQL. В MS Access пользователи, знакомые с языком SQL, могут использовать его для просмотра и изменения запросов в режиме конструктора, определения свойств форм и отчетов, создания специальных запросов (запросы объединения, запросы к серверу и управляющие запросы), создания подчиненных запросов.
При создании каждого запроса MS Access автоматически составляет эквивалентную ему инструкцию SQL. Изменения, внесенные в инструкцию SQL, автоматически отражаются в бланке конструктора.
В простейшей форме эта команда занимается поиском информации в таблице. Она имеет следующий формат:
SELECT field1, field 2, …
FROM Table;
Здесь field1, field 2,… – список столбцов таблицы Table, которые должны быть представлены в результате запроса.
Для получения всей таблицы вместо списка столбцов необходимо поставить символ «*» (звездочка).
Команда SELECT имеет следующие параметры:
A. DISTINCT (получить список без повторений)
Формат: SELECT DISTINCT field1, field2, …
FROM Table;
B. ALL (получить список со всеми повторениями)
Формат: SELECT ALL field1, field2, …
FROM Table;
C. WHERE (извлечь нужные строки)
Формат: SELECT field1, field2, …
FROM Table WHERE predicate;
Здесь predicate – логическое выражение, которое может быть истинно или ложно для каждой записи таблицы.
D. ORDER BY (рассортировать выходные данные)
Формат: SELECT field1, field2, …
FROM Table
ORDER BY field1 DESC;
Это означает, что выходные данные будут рассортированы по столбцу field1 в порядке убывания (порядок возрастания задается по умолчанию или с помощью слова ASC).
E. GROUP BY (группировать выходные данные)
Формат: SELECT field1, field2, …
FROM Table
GROUP BY [field1, field2, …]
ORDER BY field1 DESC;
Группировка – это объединение записей в соответствии со значениями некоторого заданного поля.
Агрегатные функции
Существуют следующие основные агрегатные функции:
Для обозначения связи двух таблиц дополнительно к команде FROM используются атрибуты INNER JOIN и ON.
4. Запрос может
быть создан также только
Выберем в окне базы данных «Запрос», «Создать» через опцию «Конструктор». В диалоговом окне «Добавление таблицы» выберем опцию «Закрыть». В меню Вид выберите Режим SQL. Появится окно «Запрос на выборку». Наберем следующую инструкцию SQL:
Эта инструкция предназначена для получения списков всех предметов и их кодов. Данные для этого запроса берутся из таблицы «Предмет». Результатом выполнения данного запроса будет таблица, состоящая из двух полей (Наименование предмета и Код предмета) и из всех записей таблицы «Предмет».
Результат запроса для получения списков всех предметов и их кодов
Так как в запросе используется только одна таблица, то нет необходимости указывать поле с обозначением таблицы. Очевидно, что запрос выполняется на основании таблицы «Предмет».
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb; // <- for database methods
namespace Sklad
{
public partial class Form1 : Form
{
public OleDbConnection database;
DataGridViewButtonColumn editButton;
DataGridViewButtonColumn deleteButton;
int movieIDInt;
#region Form1 constructor
public Form1()
{
InitializeComponent();
// iniciate DB connection
string connectionString = "Provider=Microsoft.Jet.OLEDB.
try
{
database = new OleDbConnection(
database.Open();
//SQL query to list movies
string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladType WHERE skladtype.typeID = sklad.typeID";
loadDataGrid(queryString);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
#endregion
#region Load dataGrid
public void loadDataGrid(string sqlQueryString) {
OleDbCommand SQLQuery = new OleDbCommand();
DataTable data = null;
dataGridView1.DataSource = null;
SQLQuery.Connection = null;
OleDbDataAdapter dataAdapter = null;
dataGridView1.Columns.Clear(); // <-- clear columns
//----------------------------
SQLQuery.CommandText = sqlQueryString;
SQLQuery.Connection = database;
data = new DataTable();
dataAdapter = new OleDbDataAdapter(SQLQuery);
dataAdapter.Fill(data);
dataGridView1.DataSource = data;
dataGridView1.
dataGridView1.ReadOnly = true;
dataGridView1.Columns[0].
dataGridView1.Columns[1].Width = 340;
dataGridView1.Columns[3].Width = 55;
dataGridView1.Columns[4].Width = 50;
dataGridView1.Columns[5].Width = 80;
// insert edit button into datagridview
editButton = new DataGridViewButtonColumn();
editButton.HeaderText = "Изменить";
editButton.Text = "Изменить";
editButton.
editButton.Width = 80;
dataGridView1.Columns.Add(
// insert delete button to datagridview
deleteButton = new DataGridViewButtonColumn();
deleteButton.HeaderText = "Удалить";
deleteButton.Text = "Удалить";
deleteButton.
deleteButton.Width = 80;
dataGridView1.Columns.Add(
}
#endregion
private void izlazToolStripMenuItem_Click(
{
Close();
}
#region Close database connection
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
database.Close();
}
#endregion
#region refresh button
private void button2_Click(object sender, EventArgs e)
{
textBox4.Clear();
string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladtype WHERE skladtype.typeID = sklad.typeID";
loadDataGrid(queryString);
}
#endregion
#region Input
private void button6_Click(object sender, EventArgs e)
{
string typeString;
try
{
typeString = comboBox1.SelectedItem.
}
catch (Exception ex) {
MessageBox.Show("Вы должны ввести категорию продукта\nError: " + ex.Message + "");
return;
}
int type = 0;
string name = textBox1.Text.ToString();
string publisher = textBox2.Text.ToString();
string year = textBox3.Text.ToString();
int yr = 0;
if (year != "")
{
yr = CheckYear(year);
}
string previewed;
if (radioButton1.Checked == true)
{
previewed = "Да";
}
else
{
previewed = "Нет";
}
if (yr != 1)
{
if (typeString == "Бытовая химия") type = 1;
if (typeString == "Продовольственные товары") type = 2;
if (typeString == "Бытовая техника") type = 3;
if (typeString == "Одежда") type = 4;
if (typeString == "Хозяйственные товары") type = 5;
if (typeString == "Мебель") type = 6;
if (typeString == "Ткани") type = 7;
if (typeString == "Стеклотовары") type = 8;
if (typeString == "Автокосметика") type = 9;
if (typeString == "Инструменты") type = 10;
if (typeString == "Алкоголь") type = 11;
if (typeString == "Табачные изделия") type = 12;
if (typeString == "Офисная техника") type = 13;
if (typeString == "Растения") type = 14;
string SQLString ="";
if (year == "")
{
SQLString = "INSERT INTO sklad(Title, Publisher, Previewed, typeID) VALUES('" + name.Replace("'", "''") + "','" + publisher + "','" + previewed + "'," + type + ");";
}
else
{
MessageBox.Show(yr.ToString())
SQLString = "INSERT INTO sklad(Title, Publisher, Previewed, Years, typeID) VALUES('" + name.Replace("'", "''") + "','" + publisher + "','" + previewed + "'," + yr + "," + type + ");";
}
OleDbCommand SQLCommand = new OleDbCommand();
SQLCommand.CommandText = SQLString;
SQLCommand.Connection = database;
int response = -1;
try
{
response = SQLCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
if (response >= 1) MessageBox.Show("Товар успешно
добавлен","Поздравления",
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
comboBox1.ResetText();
radioButton1.Checked = radioButton2.Checked = false;
}
else
{
MessageBox.Show("Год введен некорректно!\nВведите
год правильно.", "Осторожно",MessageBoxButtons.
textBox3.Clear();
textBox3.Focus();
}
}
public int CheckYear(string year)
{
int yr = int.Parse(year);
if (yr >= 2100 || yr <= 1900)
{
return 1;
}
else
{
return yr;
}
}
#endregion
#region Delete/Edit button handling
private void dataGridView1_
{
string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladType WHERE skladtype.typeID = sklad.typeID";
int currentRow = int.Parse(e.RowIndex.ToString(
try
{
string movieIDString = dataGridView1[0, currentRow].Value.ToString();
movieIDInt = int.Parse(movieIDString);
}
catch (Exception ex) { }
// edit button
if (dataGridView1.Columns[e.
{
string title = dataGridView1[1, currentRow].Value.ToString();
string publisher = dataGridView1[2, currentRow].Value.ToString();
string previewed = dataGridView1[3, currentRow].Value.ToString();
string year = dataGridView1[4, currentRow].Value.ToString();
string type = dataGridView1[5, currentRow].Value.ToString();
//runs form 2 for editing
Form2 f2 = new Form2();
f2.title = title;
f2.publisher = publisher;
f2.previewed = previewed;
f2.year = year;
f2.type = type;
f2.movieID = movieIDInt;
f2.Show();
dataGridView1.Update();
}
// delete button
else if (dataGridView1.Columns[e.
{
// delete sql query
string queryDeleteString = "DELETE FROM sklad where ID = "+movieIDInt+"";
OleDbCommand sqlDelete = new OleDbCommand();
sqlDelete.CommandText = queryDeleteString;
sqlDelete.Connection = database;
sqlDelete.ExecuteNonQuery();
loadDataGrid(queryString);
}
}
#endregion
private void Form1_Load(object sender, EventArgs e)
{
}
#region search by title
private void button1_Click(object sender, EventArgs e)
{
string title = textBox4.Text.ToString();
if (title != "")
{
string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladtype WHERE skladtype.typeID = sklad.typeID AND sklad.title LIKE '" + title + "%'";
loadDataGrid(queryString);
}
else
{
MessageBox.Show("Вы должны ввести название
продукта","Осторожно",
}
}
#endregion
#region search by type
private void button5_Click(object sender, EventArgs e)
{
int type = 0;
string typeString = comboBox2.SelectedItem.