Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка БД Курсач.doc
Скачиваний:
29
Добавлен:
16.03.2015
Размер:
746.5 Кб
Скачать

6.3 Схемы основных алгоритмов

Наиболее важными действиями при работе с базой данных является добавление данных, их выборка и составление отчетов.

При добавлении данных стоит учитывать корректность введенных данных и в зависимости от этого выполнять добавление в базу данных или нет. Алгоритм подобного действия приведен на рисунке 17.

Ввод данных в поле

нет

да

Добавление в базу данных

Рисунок 17 – Схема выполнения добавления данных в базу данных

Не менее важным этапом при работе с программой является выбор данных для отображения. Чтобы вывести данные из базы данных необходимо составить sql запрос, который правильно отработает и вернет запрашиваемые строки. Затем следует получить эти данные и отобразить в программе (рисунок 18).

Выборка данных из базы данных участвует в формировании отчетов. При формировании отчета прослеживается подобный алгоритм. Запрашиваются данные из базы данных, составляется sql запрос, а результат запроса отображается в особом виде. Данные должны быть наглядными, чтобы их легко можно было понять. Необходимо также сделать возможность просмотра с масштабированием и вывода на печать для осуществления дальнейших действий вне программы.

Выбор пользователем запроса, который нужно выполнить

Выбор хранимой функции с хранящимся в ней sql запросом

Выполнение функции и получение результата

Обработка результатов и вывод на экран

Рисунок 18 – Схема выполнения запросов на получение данных из базы данных

6.4 Описание основных программных модулей

Основными модулями программы являются запросы и отчеты. Все запросы к базе данных реализованы при помощи процедур. В программе реализуется только вызов процедур и функций из базы данных, а сама логика запросов написана и хранится в базе данных.

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

public PtuEntity[] GetPtuDetails(long pSpecId)

{

var list = new List<PtuEntity>();

var command = new SqlCommand("SELECT * FROM dbo.f_GetPtuDetails(@pSpecId)", _sqlConnectionBaser);

command.Parameters.Add("@pSpecId", pSpecId);

var reader = command.ExecuteReader();

while (reader.Read())

{

if (reader.HasRows)

{

list.Add(new PtuEntity(

reader.GetInt64(0),

reader.GetString(1),

reader.GetString(2),

reader.GetInt32(3),

reader.GetString(4),

reader.GetString(5),

(double)reader.GetDecimal(6),

reader.GetString(7)

));

}

}

reader.Close();

return list.ToArray();

}

Код процедуры f_GetPtuDetails:

ALTER FUNCTION [dbo].[f_GetPtuDetails] (@pSpecId BIGINT)

RETURNS TABLE

AS

RETURN

(

SELECT ptu.RegNumber, ptu.[Name], ptu.[Address],

ptu.Telephone, a.[Name], b.[Name],

[Square], p.[Name]

FROM tblPtu ptu JOIN tblPtuSpec ps ON ps.Ptu_RegNumber = ptu.RegNumber JOIN tblSpecialization s

ON s.Id = ps.Spec_Id JOIN tblAgency a ON a.Id = ptu.Agency_Id JOIN tblBuilding b ON ptu.Building_Id = b.Id

JOIN tblProfitability p ON ptu.Profitability_Id = p.Id

WHERE s.Id = @pSpecId

)

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

Кусок кода, отвечающий за формирование отчета в MSSQL, приведен ниже.

CREATE VIEW [dbo].[CommonPtuView]

AS

SELECT p.RegNumber, p.Name, b.Name AS BuildingName, p.[Square], ISNULL(s.Name,'Занимаемых площадей нет') AS AddSquareName,

ent.EntCount,

spec.SpecSum,

trans.TransCount,

spec.SpecCount,

ISNULL(ps.[Square],0) AS AddSquare,

(SELECT COUNT(*) FROM tblPtu) AS PtuCount

FROM tblPtu p JOIN tblBuilding b ON b.Id = p.Building_Id

LEFT JOIN tblPtuSquare ps ON ps.Ptu_RegName = p.RegNumber

LEFT JOIN tblSquare s ON s.Id = ps.Square_Id

LEFT JOIN (SELECT COUNT(ps1.Spec_Id) AS SpecCount, ISNULL(SUM(ps1.Groups_Count),0) AS SpecSum,

p1.RegNumber AS RegNumber

FROM tblPtu p1 LEFT JOIN tblPtuSpec ps1 ON ps1.Ptu_RegNumber = p1.RegNumber

GROUP BY p1.RegNumber) spec ON spec.RegNumber = p.RegNumber

LEFT JOIN (SELECT ISNULL(SUM(pt2.Amount),0) AS TransCount, p2.RegNumber AS RegNumber

FROM tblPtu p2 LEFT JOIN tblPtuTransport pt2 ON pt2.Ptu_RegNumber = p2.RegNumber

GROUP BY p2.RegNumber) trans ON trans.RegNumber = p.RegNumber

LEFT JOIN (SELECT COUNT(pes3.EnterpriseStructure_Id) AS EntCount, p3.RegNumber AS RegNumber

FROM tblPtu p3 LEFT JOIN tblPtuEnterpriseStructure pes3 ON pes3.Ptu_RegNumber = p3.RegNumber

GROUP BY p3.RegNumber) ent ON ent.RegNumber = p.RegNumber

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]