Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 10.doc
Скачиваний:
2
Добавлен:
01.09.2019
Размер:
355.84 Кб
Скачать

Лабораторная работа 10.

Создание выходящей информации

Пример 1. Выборка данных с использованием представлений и объекта SqlDataAdapter

Создать представление MYVIEW в MSSQLServer c полями data, nazv_tov, navz_post, kol, которые хранятся в таблицах:

  1. товар (код товара, название товара, ГОСТ);

  2. поставщик (код поставщика, название, адрес);

  3. накладная (код, номер накладной, дата накладной, код поставщика)

  4. товар по накладной (код накладной, код, код товара, количество, цена)

SELECT dbo.nakl.data, dbo.tovar_po_nakl.kol, dbo.post.nazv, dbo.tovar.nazv AS Expr1

FROM dbo.nakl INNER JOIN

dbo.tovar_po_nakl ON dbo.nakl.kod = dbo.tovar_po_nakl.kod_nakl INNER JOIN

dbo.post ON dbo.nakl.kod_post = dbo.post.kod INNER JOIN

dbo.tovar ON dbo.tovar_po_nakl.kod_tovara = dbo.tovar.kod

Создать приложение в котором происходить выборка данных по дате из созданного представления:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace lab_2_9

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

StringBuilder sb = new StringBuilder();

sb.AppendFormat("(Data >= '{0}')", dateTimePicker1.Value.ToShortDateString());

sb.AppendFormat(" and (Data <= '{0}')", dateTimePicker2.Value.ToShortDateString());

view1BindingSource.Filter = sb.ToString();

}

private void Form1_Load(object sender, EventArgs e)

{

sqlDataAdapter1.Fill(dataSet11);

}

}

}

Пример 2. Выборка данных с использование запросов объекта DataSet.

С использованием таблиц:

  1. Товар (код товара, название товара, гост);

  2. поставщик (код поставщика, название, адрес);

  3. накладная (код, номер накладной, дата накладной, код поставщика)

  4. товар по накладной (код накладной, код, код товара, количество, цена)

Создать приложение, в котором осуществляется выборка созданных накладных.

Входными параметрами запроса являются: временной период и название поставщика. Подключение к БД осуществляется при использовании объекта DataSet (примеры лаб. 8,9). Отображение данных в DataGridView осуществляется при создании вручную запросов Query объекта DataSet.

Для отображения неотфильтрованных по параметрам запроса данных о всех созданных накладных создается запрос FillByPost вида:

SELECT naklad.kod_nakl, naklad.nomer, naklad.data, naklad.kod_post, post.nazv, post.adres

FROM naklad INNER JOIN

post ON naklad.kod_post = post.kod_post

Для отображения товаров к накладным (без фильтрации) создается запрос FillBytovar вида:

SELECT tov_nakl.kod_nakl, tov_nakl.kod, tov_nakl.kod_tov, tov_nakl.kol, tov_nakl.cena, tovar.nazv, tovar.gost

FROM tov_nakl INNER JOIN

tovar ON tov_nakl.kod_tov = tovar.kod_tov

Для отображения неотфильтрованных данных о накладных и товаров по ним в обработчике загрузки формы необходимо заменить код на:

this.tov_naklTableAdapter.FillBytovar(this.tovarDataSet.tov_nakl);

this.nakladTableAdapter.FillByPost(this.tovarDataSet.naklad);

Для внесения в запрос временного периода необходимо в сheckBoх1 установить галочку и задать в dataTimePicker1 и dataTimePicker2 параметры запроса (дата, внесенная в dataTimePicker1 должна быть меньше, чем дата, внесенная в dataTimePicker2).

Для того, чтобы создать проверку правильности введения дат в обработчике события изменения значения во втором dataTimePicker2 необходимо создать код:

private void dateTimePicker2_ValueChanged(object sender, EventArgs e)

{

if (dateTimePicker1.Value > dateTimePicker2.Value)

{

MessageBox.Show("Друга дата має бути більша за першу!", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Hand);

dateTimePicker2.Value = dateTimePicker1.Value;

}

}

При загрузке формы объекты DataTimePicker – не доступны (свойство Enabled=false). После установке галочки выбора в сheckBoх1 можно задать временной период:

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

if (checkBox1.Checked == true)

{

dateTimePicker1.Enabled = true;

dateTimePicker2.Enabled = true;

}

else {

dateTimePicker1.Enabled = false;

dateTimePicker2.Enabled = false;

}

}

В компоненте ComboBox будет отображаться список всех пользователей, значение которого можно задать как критерий поиска. Для этого необходимо задать свойства:

Свойство

Значение

DataSource

postBindingSource

DisplayMember

nazv

ValueMember

kod_post

DataBinding.Tag

kod_post

Для осуществления выборки накладных, в зависимости от конкретного заданного поставщика необходимо создать запрос FillBy для таблицы naklad вида:

SELECT naklad.kod_nakl, naklad.nomer, naklad.data, naklad.kod_post, post.nazv, post.adres

FROM naklad INNER JOIN

post ON naklad.kod_post = post.kod_post

WHERE (naklad.kod_post = @kod_post)

В обработчике события нажатии на кнопку «Пошук» записать код:

nakladTableAdapter.FillBy(tovarDataSet.naklad, (int)comboBox1.Tag);

this.tov_naklTableAdapter.FillBytovar(this.tovarDataSet.tov_nakl);

Для добавления в запрос выборки данных временной период необходимо создать запрос FillByDate для таблицы naklad вида:

SELECT naklad.kod_nakl, naklad.nomer, naklad.data, naklad.kod_post, post.nazv, post.adres

FROM naklad INNER JOIN

post ON naklad.kod_post = post.kod_post

WHERE (naklad.kod_post = @kod_post) AND (naklad.data >= @date1) AND (naklad.data <= @date2)

В обработчике события нажатии на кнопку «Пошук» изменить код на:

if (checkBox1.Checked == true)

{ nakladTableAdapter.FillByDate(tovarDataSet.naklad, (int)comboBox1.Tag, dateTimePicker1.Value, dateTimePicker2.Value);

this.tov_naklTableAdapter.FillBytovar(this.tovarDataSet.tov_nakl);

}

else

{

nakladTableAdapter.FillBy(tovarDataSet.naklad, (int)comboBox1.Tag);

this.tov_naklTableAdapter.FillBytovar(this.tovarDataSet.tov_nakl);

}

Домашнее задание. Лабораторная работа 10.

Для созданных документов (из лаб. 8) Создать выборку данных по параметрам, указанных в вариантах задания. Выбор параметров запроса организовать на форме с помощью компонентов CheckBox или RadioButton.

Вариант 1.

Параметры запросов:

1) выдать все договора и товары к ним по указанному временному периоду;

2) выдать все договора и товары к ним по указанному поставщику и указанному временному периоду;

3) выдать все договора и товары к ним по указанному поставщику;

4) выдать все действующие договора («Дата действия по» меньше текущей даты)

Для перечисленных запросов в компонент textBox1 выдать общее количество договоров, а в компонент textBox2 – общую сумму по всем договорам.

5) выдать весь товар за указанный временной период;

Для запроса 5 в компонент textBox1 выдать общее количество товара, а в компонент textBox2 – общую сумму по товарам.