База данных по учету металлопродукции на платформе SQL Server
Значение по умолчанию должно быть совместимо с типом данных столбца, к которому относится определение DEFAULT. Например, необходимо, чтобы значением по умолчанию для столбца с типом данных int было целое число, а не символьная строка, Когда определение DEFAULT применяется к существующему столбцу, SQL Server применяет (по умолчанию) новое определение только к новым строкам, добавленным к таблице. Существующие данные, вставленные во время действия старого определения значения по умолчанию, не затрагиваются. Однако при добавлении к существующей таблице нового столбца можно указать SQL Server вставить в существующие строки таблицы не пустые значения, а значения по умолчанию (заданные определением умолчания для этого столбца).
В нашей работе значения по умолчания не были созданы вследствие отсутствия необходимости в них.
4.2 Описание объектов базы данных
4.2.1 Представления
Представление функционирует как фильтр для таблиц, лежащих в его основе. Как правило, представления используются для конкретизации, упрощения и настройки вида базы данных для пользователя. Также они выполняют функции механизма безопасности: вы можете открыть пользователю доступ к данным через представление, запретив ему работать напрямую с таблицами базы данных, лежащими в основе представления, Кроме того, представления можно использовать для повышения производительности и секционирования данных.
Запрос, определяющий представление, может ссылаться на одну или несколько таблиц и представлений из текущей или из других баз данных. Также представления определяют средствами распределенных запросов, использующих данные из нескольких гетерогенных источников. Это полезно, в частности, для объединения данных с одинаковой структурой, но расположенных на разных серверах, каждый из которых хранит сведения о каком-либо из отделов организации.
Представление можно рассматривать как виртуальную таблицу или хранимый запрос. В случае стандартного представления в БД содержатся не данные представления, а определяющий его оператор SELECT. Представление возвращает виртуальную таблицу, которая формируется из результирующего набора оператора SELECT. В операторах Transact-SQL допустимо ссылаться на представление, как на обычную таблицу.
Через представления удается запрашивать и модифицировать данные, причем запрос формируется без всяких ограничений, а для модификации существует ряд ограничений. Кроме того, представление может ссылаться на другое представление. Представления позволяют выполнять несколько функций:
* ограничивать доступную пользователю область таблицы определенными строками и/или столбцами;
* объединять столбцы из нескольких таблиц, представляя их в виде единой таблицы;
* заменять детальные сведения агрегированными.
Представления позволяют секционировать данные и распределять их между несколькими БД или экземплярами SQL Server 2000. С помощью секционированных представлений распределяют нагрузку по обработке данных между несколькими серверами, составляющими одну группу.
SQL Server 2000 также поддерживает индексирование представлений. Это позволяет значительно повысить производительность сложных представлений, которые часто используются в хранилищах данных и других системах поддержки принятия решений. Результирующий набор стандартного представления, описанный логикой определяющего его оператора, не хранится в базе данных, а динамически создается в период выполнения.
Однако существуют (например, в системах поддержки принятия решений) сложные запросы, которые ссылаются на большое число строк базовых таблиц и агрегируют значительное количество данных, получая довольно сжатые сводные результаты (например, суммы средних значений). Для реализации подобных запросов SQL Server 2000 поддерживает создание кластерных индексов на представлениях. При исполнении оператора CREATE INDEX результирующий набор представления, определенного оператором SELECT, сохраняется в БД и становится постоянным. После этого операторы, ссылающиеся на представление, выполняются значительно быстрее. Модификации данных базовых таблиц автоматически отражаются представлением.
4.2.2 Хранимые процедуры
Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности, недоступные при использовании команд Transact-SQL, отсылаемых для обработки на сервер. Повышается производительность -- за счет локального (по отношению к базе данных) хранения, перекомпиляции исходного текста и кэширования Возможности программирования расширяются благодаря применению таких распространенных средств программирования, как использование входных и выходных параметров, а также благодаря многократному использованию процедур. Функции безопасности подразумевают шифрование текста процедуры и ограничение привилегий. В результате пользователи получают ограниченный доступ к внутренней структуре базы данных, однако им разрешено запускать хранимые процедуры, выполняющие различные действия над базой данных.
При пересылке каждой команды (или пакета команд) Transact-SQL на сервер для обработки последний должен определить, есть ли у отправителя права на исполнение этих команд и допустимы ли сами команды. Проверив права доступа и синтаксис команд, SQL Server строит план исполнения запроса. Хранимые процедуры в данном случае более эффективны. При создании они сохраняются в SQL Server, поэтому при вызове хранимой процедуры ее содержимое сразу же обрабатывается сервером. Один - единственный оператор позволяет вызвать сложный сценарий Transact-SQL, который содержится в хранимой процедуре, что позволяет избежать пересылки через сеть сотен команд.
Перед созданием хранимой процедуры ее команды проходят синтаксическую проверку. Если при этом не обнаружено ни одной ошибки, имя процедуры сохраняется в таблице SysObjects, а ее текст -- в таблице SysComments. При первом запуске хранимой процедуры создается план исполнения и хранимая процедура компилируется. В дальнейшем ее обработка осуществляется быстрее, поскольку SQL Server не приходится проверять синтаксис команд, создавать план исполнения и компилировать текст процедуры. До создания нового плана в кэше проверяется наличие существующего плана исполнения.
Относительный прирост производительности, вызываемый размещением планов исполнения хранимых процедур в кэше процедур, уменьшается, поскольку планы исполнения всех операторов SQL теперь хранятся в кэше процедур. При исполнении оператора Transact-SQL по возможности предпринимается попытка использования существующего плана исполнения.
Созданную хранимую процедуру можно вызвать в любой момент, при возникновении малейшей необходимости. Это обеспечивает модульность и стимулирует повторное использование кода. Последнее облегчает сопровождение базы данных, так как она изолирована от меняющихся бизнес-правил. Модифицировать хранимую процедуру в соответствии с новыми правилами можно в любой момент. После этого все приложения, использующие ее, автоматически придут в соответствие с новыми бизнес-правилами без непосредственной модификации.
Подобно программам, написанным на других языках программирования, хранимые процедуры способны принимать входные параметры, возвращать значения выходных параметров, поддерживать обратную связь с пользователем посредством вывода кодов состояния и текстовых сообщений, а также вызывать другие процедуры. Например, одна хранимая процедура может возвращать другой код состояния, в зависимости от которого последняя выполняет те или иные действия.
Если разработчикам удобно писать сложные программы на таких языках, как C++, то затем эти программы можно вызывать из SQL Server средствами хранимых процедур особого типа, которые называются расширенными хранимыми процедурами.
Хранимую процедуру пишут для решения какой-либо одной задачи -- в результате ее можно использовать в нескольких базах данных. Например, хранимая процедура sp_rename предназначена для изменения имен созданных пользователем объектов (например, таблицы, поля или пользовательского типа данных) в текущей базе данных. В одной базе данных ее используют для переименования таблицы, в другой -- столбца таблицы и т. д.
Другое важное назначение хранимых процедур -- повышение безопасности посредством изоляции и шифрования. Пользователям можно предоставить право на исполнение хранимой процедуры без непосредственного доступа к объектам базы данных, с которыми работает хранимая процедура. Кроме того, если хранимую процедуру зашифровать при создании или модификации, пользователям не удастся прочитать команды Transact-SQL, составляющие процедуру. Эти функции безопасности позволяют изолировать от пользователя структуру базы данных, что обеспечивает целостность данных и надежность базы.
Существует пять классов хранимых процедур: системные, локальные, временные, расширенные и удаленные. Есть и другие способы классификации, но этот позволяет легко описать местонахождение, назначение и возможности хранимой процедуры.
Системные хранимые процедуры находятся в базе данных Master. Как правило, их имена начинаются с префикса sp_. Они предназначены для поддержки функций SQL Server (в частности, процедур для работы с каталогом). К ним относится выборка данных из системных таблиц внешними приложениями, администрирование базы данных и управление безопасностью.
Локальные хранимые процедуры обычно находятся в пользовательской базе данных. Как правило, их создают для решения определенных задач в конкретной базе данных. Локальные хранимые процедуры также позволяют настраивать системные хранимые процедуры.
Чтобы создать на основе системной хранимой процедуры пользовательскую процедуру, нужно сделать копию системной хранимой процедуры, а затем сохранить ее как локальную хранимую процедуру.
Временная хранимая процедура похожа на локальную, однако она существует лишь до закрытия соединения, в котором создана, или до завершения работы SQL Server. В зависимости от типа такая процедура удаляется после завершения работы сервера или разрыва соединения. Непостоянство обусловлено тем, что временные хранимые процедуры находятся в базе данных TempDB. При каждом запуске сервера эта база создается заново, поэтому после закрытия сервера все объекты этой базы данных исчезают. Временные хранимые процедуры полезны при работе с более ранними версиями SQL Server, которые не поддерживают повторное использование планов исполнения, а также в тех случаях, когда нет смысла сохранять процедуру, поскольку значения ее параметров постоянно меняются.
Существует три типа временных хранимых процедур: локальные (или закрытые), глобальные и создаваемые непосредственно в TempDB. Локальная процедура всегда начинается с символа #, а глобальная -- с ##. При исполнении временной хранимой процедуры ее область действия ограничена соединением, в котором она создана. Однако такая процедура видима всем пользователям, установившим соединение с базой данных, в окне Object Browser в Query Analyzer. Ограниченность области ее действия исключает возникновение конфликтов имен с другими соединениями, в которых созданы временные хранимые процедуры. Чтобы гарантировать уникальность имени временной хранимой процедуры, SQL Server добавляет к нему набор символов подчеркивания и уникальный номер соединения. Привилегии для локальной процедуры не предоставляются другим пользователям. Временная хранимая процедура удаляется из TempDB при закрытии соединения, в котором она создана.
Глобальные временные процедуры разрешается исполнять в любом соединении. Подобно временным процедурам других типов, они создаются в базе данных TempDB, поэтому у них должны быть уникальные имена. Право на исполнение глобальной временной процедуры автоматически предоставляется роли public и не может быть изменено.
Глобальные временные процедуры так же непостоянны, как и локальные. Они удаляются после закрытия соединения, в котором созданы.
Временные хранимые процедуры, которые создаются непосредственно в TempDB. отличаются от локальных и глобальных процедур следующим:
* для них разрешается настроить права доступа;
* они сохраняются даже после завершения соединения, в котором созданы;
* они не удаляются до завершения работы SQL Server.
Поскольку процедуры этого типа создаются непосредственнов TempDB, важно полностью определять имя объекта базы данных в коде Transact-SQL.
Расширенные хранимые процедуры обращаются к внешним программам, скомпилированным в виде 32-разрядных DLL. Некоторые системные хранимые процедуры также рассматриваются как расширенные. Соглашение об именовании предполагает использование в именах расширенных хранимых процедур префикса хр_. Однако имена некоторых расширенных процедур начинаются с префикса sp_, а в именах некоторых других, не расширенных процедур используется префикс хр_. Поэтому нельзя различить системные и расширенные хранимые процедуры, полагаясь лишь на отличия в именах.
Определить, является ли хранимая процедура расширенной, позволяет функция ОВ-JECTPROPERTY. Она возвращает для свойства IsExtendedProc значение 1, если процедура является расширенной, или 0, если процедура таковой не является.
Как следует из названия, удаленная хранимая процедура работает на удаленной копии SQL Server. Удаленные хранимые процедуры оставлены для совместимости с предыдущими версиями, в SQL Server 2000 их заменили распределенные запросы.
В наше БД были созданы хранимых процедуры. Ниже представлен перечень и краткая характеристика хранимых процедур, которые были использованы в наше базе данных.
Процедуры удаления данных:
set ANSI_NULLS OFF
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[AgentDelete]
@Kod_Agent int
AS
Delete from Agent
where
Kod_Agent=@Kod_Agent
Процедуры добавления данных:
set ANSI_NULLS OFF
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[AgentEdit]
@Kod_Agent int,
@Naimen_Agent varchar(25),
@Kont_lico varchar(20),
@Adres varchar(25),
@Tel varchar (25),
@Schet varchar (25)
AS
Update Agent SET
Naimen_Agent = @Naimen_Agent,
Kont_lico = @Kont_lico,
Adres = @Adres,
Tel = @Tel,
Schet = @Schet
where
Kod_Agent=@Kod_Agent
Процедуры обновления данных:
set ANSI_NULLS OFF
set QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[UpdPrihKol]
AS
update Nomenkl
set prihod = p.kolich
from (select kod_nomen, sum(kolich) as kolich
from Prihod
group by kod_nomen) as p
inner join nomenkl n on p.kod_nomen=n.Kod_nomen
Update Nomenkl
set
Ostatok=Prihod-Rashod
4.2.3 Триггеры
Триггеры являются одной из разновидностей хранимых процедур. Их исполнение происходит при выполнении для таблицы какого-либо оператора языка манипулирования данными (DML). Триггеры используются для проверки целостности данных, а также для отката транзакций.
Триггер - это откомпилированная SQL-процедура, исполнение которой обусловлено наступлением определенных событий внутри реляционной базы данных. Применение триггеров большей частью весьма удобно для пользователей базы данных. И все же их использование часто связано с дополнительными затратами ресурсов на операции ввода/вывода. В том случае, когда тех же результатов (с гораздо меньшими непроизводительными затратами ресурсов) можно добиться с помощью хранимых процедур или прикладных программ, применение триггеров нецелесообразно.
Триггеры - особый инструмент SQL-сервера, используемый для поддержания целостности данных в базе данных. С помощью ограничений целостности, правил и значений по умолчанию не всегда можно добиться нужного уровня функциональности. Часто требуется реализовать сложные алгоритмы проверки данных, гарантирующие их достоверность и реальность. Кроме того, иногда необходимо отслеживать изменения значений таблицы, чтобы нужным образом изменить связанные данные. Триггеры можно рассматривать как своего рода фильтры, вступающие в действие после выполнения всех операций в соответствии с правилами, стандартными значениями и т.д.
Триггер представляет собой специальный тип хранимых процедур, запускаемых сервером автоматически при попытке изменения данных в таблицах, с которыми триггеры связаны. Каждый триггер привязывается к конкретной таблице. Все производимые им модификации данных рассматриваются как одна транзакция. В случае обнаружения ошибки или нарушения целостности данных происходит откат этой транзакции. Тем самым внесение изменений запрещается. Отменяются также все изменения, уже сделанные триггером.
Создает триггер только владелец базы данных. Это ограничение позволяет избежать случайного изменения структуры таблиц, способов связи с ними других объектов и т.п.
Триггер представляет собой весьма полезное и в то же время опасное средство. Так, при неправильной логике его работы можно легко уничтожить целую базу данных, поэтому триггеры необходимо очень тщательно отлаживать.
В отличие от обычной подпрограммы, триггер выполняется неявно в каждом случае возникновения триггерного события, к тому же он не имеет аргументов. Приведение его в действие иногда называют запуском триггера. С помощью триггеров достигаются следующие цели:
проверка корректности введенных данных и выполнение сложных ограничений целостности данных, которые трудно, если вообще возможно, поддерживать с помощью ограничений целостности, установленных для таблицы;
выдача предупреждений, напоминающих о необходимости выполнения некоторых действий при обновлении таблицы, реализованном определенным образом;
накопление аудиторской информации посредством фиксации сведений о внесенных изменениях и тех лицах, которые их выполнили;
поддержка репликации.
При условии правильного использования триггеры могут стать очень мощным механизмом. Основное их преимущество заключается в том, что стандартные функции сохраняются внутри базы данных и согласованно активизируются при каждом ее обновлении. Это может существенно упростить приложения. Тем не менее следует упомянуть и о присущих триггеру недостатках:
сложность: при перемещении некоторых функций в базу данных усложняются задачи ее проектирования, реализации и администрирования;
скрытая функциональность: перенос части функций в базу данных и сохранение их в виде одного или нескольких триггеров иногда приводит к сокрытию от пользователя некоторых функциональных возможностей. Хотя это в определенной степени упрощает его работу, но, к сожалению, может стать причиной незапланированных, потенциально нежелательных и вредных побочных эффектов, поскольку в этом случае пользователь не в состоянии контролировать все процессы, происходящие в базе данных;
влияние на производительность: перед выполнением каждой команды по изменению состояния базы данных СУБД должна проверить триггерное условие с целью выяснения необходимости запуска триггера для этой команды. Выполнение подобных вычислений сказывается на общей производительности СУБД, а в моменты пиковой нагрузки ее снижение может стать особенно заметным. Очевидно, что при возрастании количества триггеров увеличиваются и накладные расходы, связанные с такими операциями.
Неправильно написанные триггеры могут привести к серьезным проблемам, таким, например, как появление "мертвых" блокировок. Триггеры способны длительное время блокировать множество ресурсов, поэтому следует обратить особое внимание на сведение к минимуму конфликтов доступа.
В нашей работе триггеры не были использованы ввиду отсутствия необходимости в них.
4.3 Описание типов блокировок
Блокировка -- это объект, с помощью которого программы показывают зависимость пользователя от ресурса. Программы запрещают другим пользователям выполнять над ресурсами операции, которые негативно влияют на зависимость пользователя, владеющего блокировкой, от этого ресурса. Блокировки управляются внутрисистемными механизмами, они устанавливаются и снимаются в зависимости от действий пользователя.
С помощью блокировок SQL Server 2000 реализует пессимистическое управление параллельным выполнением при работе множества пользователей, одновременно модифицирующих БД. По умолчанию SQL Server управляет транзакциями и блокировками для каждого соединения отдельно. Например, если приложение открывает два соединения с
SQL Server, то блокировка, установленная одним соединением, не может быть использована другим. Ни одному из соединений не удастся установить блокировку, конфликтующую с блокировками, удерживаемыми другими соединениями. Это правило не действует лишь на связанные соединения.
Блокировки применяются в БД на разных уровнях. Их устанавливают для строк, страниц, ключей, диапазонов ключей, индексов, таблиц или баз данных. SQL Server динамически определяет уровень блокировки для каждого оператора Transact-SQL. Уровень, на котором задается блокировка, может варьироваться для разных объектов в пределах одного запроса. Например, в одной очень маленькой таблице блокировка устанавливается на уровне таблицы, тогда как в другой, большей таблице она задается для отдельных строк.
Пользователям не нужно определять уровень блокировки, администраторы также не.должны заниматься его настройкой. Каждый экземпляр SQL Server гарантирует, что блокировки, действующие на одном уровне, не нарушат блокировок, установленных на другом уровне.
Существуют несколько видов блокировок: разделяемые, обновления, монопольные, предварительные и блокировки схемы. Вид блокировки показывает уровень зависимости соединения от заблокированного объекта. SQL Server контролирует взаимодействие блокировок разных видов. Например, не удастся установить монопольную блокировку ресурса, если другие соединения удерживают для него разделяемые блокировки.
Блокировки удерживаются на заданном уровне ровно столько, сколько необходимо для защиты ресурса.
Если соединение пытается установить блокировку, конфликтующую с блокировкой, удерживаемой другим соединением, ему не удастся это сделать, пока не произойдет одно из следующих событий:
* освободится конфликтная блокировка;
* истечет тайм-аут соединения. По умолчанию тайм-аут для соединения не задан, но некоторые приложения устанавливают его, чтобы не ожидать неопределенно долго.
Если несколько соединений блокируются в ожидании конфликтной блокировки на одном и том же ресурсе, то освобожденная предыдущим соединением блокировка предоставляется по принципу «первым пришел -- первым обслужен».
В SQL Server предусмотрен алгоритм для обнаружения взаимоблокировок двух соединений. Если экземпляр SQL Server обнаружил взаимоблокировку, то одна из транзакций будет прекращена, что позволит продолжить выполнение другой.
SQL Server динамически повышает или снижает уровень блокировок и меняет их тип.
Например, если операция обновления установила много блокировок на строках, заблокировав, таким образом, значительную часть таблицы, блокировка повышается до уровня таблицы. При установке блокировки таблицы блокировки строк снимаются. SQL Server 2000 редко приходится повышать уровень блокировки, обычно Query Optimizer сразу выбирает нужный уровень во время компиляции плана исполнения.
В SQL Server к оператору SELECT из определения курсора применяются те же правила блокировки транзакций, что и к любому другому оператору SELECT. Однако в курсорах дополнительно разрешается установить набор блокировок перемещения в зависимости от уровня параллелизма курсора.
Блокировки оператора SELECT, в том числе оператора SELECT из определения кур-
сора, управляются следующими параметрами:
* уровнем изоляции транзакции, установленным для соединения;
* любыми условиями блокировки, заданными в конструкции FROM.
Эти блокировки удерживаются до завершения текущей транзакции как для курсоров, так и для независимых операторов SELECT. Когда SQL Server работает в режиме автоматической фиксации, каждый отдельный оператор является транзакцией, поэтому блокировки освобождаются после завершения оператора. Если SQL Server работает в режиме явных или неявных транзакций, то блокировки удерживаются до фиксации или отката транзакции.
Блокирование предотвращает модификацию данных, находящихся под влиянием незавершенных транзакций. В этой главе вы познакомитесь с транзакциями и блокировками, а затем узнаете, как они используются при обработке данных.
С помощью блокировок SQL Server обеспечивает целостность и согласованность БД. Блокировки запрещают пользователям читать данные, изменяемые другими пользователями, и предотвращают одновременную модификацию одних и тех же данных несколькими пользователями. Без использования блокировок логическая целостность данных БД может нарушиться, в результате при запросе выводятся искаженные данные.
5. Программная реализация
5.1 Описание основных хранимых процедур
В проектируемой программе все запросы осуществляются на языке SQL (Structured Query Language) - структурированный язык запросов. И в данном разделе будут приведены различные процедуры на SQL, которые используются программе.
Сначала рассмотрим процедуры по созданию таблицы. Так как они аналогичные для всех таблиц, создаваемых в программе, то данные функции рассмотрим на примере таблицы Klient. Рассматривать же все процедуры на всех таблицах не имеет смысла, потому что они в общем идентичны, а разница лишь в названиях переменных.
При создании таблицы Klient выполняются следующие действия:
CREATE TABLE KLIENT
(
Данная процедура непосредственно создает таблицу. Далее описываются поля данной таблицы и задаются ограничения, накладываемые на них.
В конце процедуры указано ключевое поле:
PRIMARY KEY (Kod_klient)
);
Итак, таблица создана. Теперь опишем действия, которые над ней совершаются.
Добавление записей в таблицу. Данная операция осуществляется при помощи процедуры SQL языка INSERT INTO. Рассмотрим добавление записей в таблицу KLIENT:
INSERT INTO
KLIENT (Kod_Klient, Kratk_naimen, Poln_naimen, Kont_lico, r_s, adres, Tel, Faks, E-mail, inn_kpp, Kod_bank)
VALUES (:Kod_Klient,:Kratk_naimen,:Poln_naimen,:Kont_lico,:r_s,:adres,:Tel,:Faks,:E-mail,:inn_kpp,:Kod_bank);
При редактировании записей таблицы появляется та же форма, что и при вводе, но уже с заполненными полями. Для этого считывается текущий номер заявки, на котором стоит курсор. Далее создается запрос к соответствующей таблице, из которой извлекаются все необходимые данные. Таким образом происходит заполнение полей. После редактирования записей при нажатии кнопки OK происходит обновление соответствующих полей в таблице. Данная операция описана ниже.
update KLIENT set
Kod_Klient:= Kod_Klient,
Kratk_naimen:= Kratk_naimen,
Poln_naimen:= Poln_naimen,
Kont_lico:= Kont_lico,
r_s:= r_s,
adres:= adres,
Tel:= Tel,
Faks:=Faks,
E-mail:= E-mail,
inn_kpp:= inn_kpp,
where
Kod_Klient = Kod_Klient
Удалении соответствующей записи из таблицы также рассмотрим на примере таблицы KLIENT. При выполнении нижеописанной процедуры происходит удаление текущей строки.
DELETE FROM KLIENT
WHERE Kod_klient = Kod_klient;
5.2 Описание представлений
Теперь рассмотрим представление информации пользователю, то есть одно их основных назначение базы данных. Данная операция выполняется оператором SELECT. Результатом выполнения оператора SELECT всегда является таблица. Таким образом, по результатам действий оператор SELECT похож на операторы реляционной алгебры. Любой оператор реляционной алгебры может быть выражен подходящим образом сформулированным оператором SELECT. При открытии таблицы в основном используется следующая функция:
SELECT *
FROM KLIENT;
При выполнении такой процедуры происходит вывд на экран всех записей таблицы Klient. Если же необходимо получить отфильтрованные по какому-либо реквизиту данные, то выполняется следующая процедура:
SELECT *
FROM KLIENT
WHERE KLIENT.Kratk_naimen = naimen
При выполнении данной процедуры произойдет фильтрация контрагентов по наименованю.
5.3 Описание программы
В данном разделе дано описание каждого окна программы. Описаны все поля и функции выполняемые различными командами оконных форм.
При запуске программы на экран выводится окно со справочником номенклатуры, который является основным в данной программе.
Рисунок - Справочник номенклатура
В данном справочнике отражается вся информация о свойствах, характеристиках металлопродукции в виде полей таблицы. Вверху окна расположена командная строка с выпадающим меню, по которому мы можем перемещаться по интересующим нас справочникам, по движению номенклатуры, а также посмотреть справку.
Справочник «Материалы» содержит сведения о материалах, из которых изготовлена продукция. Окно данного справочника довольно небольшое, это обусловлено малым количеством информации, которую он в себя включает Он представлен на рисунке 3.
Рисунок 2 - Материалы
В данной форме предусмотрена кнопка «Номенклатура», по нажатию которой мы получаем таблицу, в которой отражен список номенклатурных позиций, которые связаны с данным материалом.
Рисунок 3 - Номенклатура из данного материала
Вернемся к справочнику «Материалы». По кнопке «редактировать» происходит редактирование текущей записи. Форма та же, что и при создании нового элемента справочника, вызываемой по кнопке «добавить», только поля заполнены соответствующими данными.
Рисунок 4 - Элемент материала
По кнопке удалить появляется подтверждение данной операции.
Рисунок 5 - Подтверждение удаления
При подтверждении удаления, по кнопке «Yes», происходит удаление соответствующей позиции.
Если же запись используется в каком - либо другом справочнике, то удаление невозможно. Такой выход мы посчитали наиболее разумным, так как останется ссылка на пустую позицию. В таком случае выводится предупреждение.
Рисунок 6 - Предупреждение
Две вышеописанные формы выходят во всех оконных формах. При выполнении соответствующих действий.
При выборе в подменю справочника «Единица измерения» мы получаем следующую форму.
Рисунок 6 - Единицы измерения
В данном справочнике мы видим информацию о единицах измерения и имеем возможность выполнять различные операции с записями рассматриваемого справочника по нажатию кнопок. При нажатии кнопки «добавить» происходит добавление информации в справочник, по средством следующей формы.
Рисунок 7 - Добавление единицы измерения
По кнопке «редактировать» происходит редактирование текущей записи. Форма та же, что и при создании нового элемента справочника, вызываемой по кнопке «добавить», только поля заполнены соответствующими данными.
В справочнике «Способ изготовления» мы имеем таблицу с полями, содержащими информацию о различных единицах измерения.
Рисунок 7 - Способ изготовления
В данной форме предусмотрена кнопка «Номенклатура», по нажатию которой мы получаем таблицу, в которой отражен список номенклатурных позиций, которые связаны с данным материалом. Аналогичный пример мы показали выше, поэтому рассматривать его снова не имеет смысла. При нажатии кнопки «добавить» происходит добавление информации в справочник, по средством следующей формы.
Рисунок 7 - Добавление способа изготовления
Справочник «Склады» содержит информацию о складах данного предприятия. При выборе в подменю материалов на экран выводится форма справочника.
Рисунок 8 - Добавление склада
При нажатии кнопки «Партии» мы получаем партии, которые хранятся на данном складе. Связь между данными таблицами осуществляется при вводе партии. На экран выводится таблица, которая содержит элементы таблицы «Партии», связанные с соответствующим элементом таблицы «Склад»
Рисунок 9 - Партии склада
При нажатии кнопки «МОЛ» выводится таблица с соответствующими данному складу материально-ответственных лиц.
Рисунок 10 - МОЛ склада
По кнопке «редактировать» происходит редактирование текущей записи. Форма та же, что и при создании нового элемента справочника, вызываемой по кнопке «добавить», только поля заполнены соответствующими данными.
Рисунок 11 - Редактирование склада
В справочнике «Номенклатура» предусмотрены кнопки с названиями различных справочников. Они дают возможность получить более подробную, чем а таблице, информацию о различных характеристиках связанных с данным элементов других справочников. Так, по кнопке движение мы получаем две таблицы, в которых отражен приход и расход соответственно данной позиции номенклатуры. Также показан итоговый приход, расход и остаток в единицах измерения данной позиции номенклатуры.
Рисунок 12 - Движение номенклатуры
По кнопке «Спецификация» мы получаем таблицу, состоящую из элемента справочника «Спецификации», связанного с текущей позицией номенклатуры.
Рисунок 13 - Спецификация номенклатуры
Также в данном справочнике предусмотрен поиск по различным реквизитам. В меню ComboBox мы выбираем поле, по которому будет осуществляться поиск, а в тексте поиска вводим название либо цифры. Причем поиск устроен таким образом, что он начинается при вводе символов, поэтому нет необходимости вводить целое наименование, а достаточно лишь нескольких первых символов. Что очень удобно. Во - первых экономит время, а во -вторых пользователь зачастую не знает полного наименования.
Рисунок 13 - Поиск номенклатуры
В подменю «Журналы» две ссылки. Одна на приходные документы, а другая на расходные. Именно по этим операциям и осуществляется деятельность фирмы, занимающейся продажей металлопродукции.
В журнале «Приход» мы отображаем информацию о париях.
При нажатии кнопки «Редактировать» происходит изменение информации в справочнике, по средством следующей формы.
Рисунок 14 - Редактирование партии
По кнопке «Добавить» происходит создании нового элемента справочника. Форма та же, что и при, вызываемой по кнопке «Редактировать», только поля не заполнены данными.
Заключение
В данном курсовом проекте мы разработали и реализовали информационную систему для работы с металлопродукцией. При реализации данного проекта столкнулись с вопросом хранения и обработки большого количества информации, разделенного доступа к данным, обработки большого количества информации, а также ее надежного хранения Для решения этой проблемы мы исследовали нашу предметную область. На основе полученных сведений разработали приложение, которое обеспечивает эффективную работу.
Итак, в ходе данного курсового проекта была разработана корпоративная информационная система по учету металлопродукции в среде программирования SQL 2000 и Borland Delphi 7. Разработанное ПО отвечает всем требованиям выдвигаемым к корпоративным информационным системам и может использоваться в крупных предприятиях, имеющих разветвленную как территориальную, так и внутреннюю сети.
Список используемой литературы
1. Гофман В.Э., Хомоненко А.Д. Delphi 7 - СПб.: БХВ-Петербург, 2002. - 1152с.: ил.
2. Гофман В.Э., Хомоненко А.Д. Работа с базами данных в Delphi. - 2-е изд. - СПб.: БХВ-Петербург, 2002. - 624 с.: ил.
3. Ханс Ладани. SQL Энциклопедия пользователя. изд. «ДиаСофт», 1998. - 624с.
4. Фронковяк Д., Гарсиа М., Уолен Э. Руководство администратора MSSQL Server 7.0 Изд «Русская редакция», 2000. - 672с.
5. Горев А.П., Ахаян Р.М., Макашарипов С.Ю. «Эффективная работа с СУБД».СПб.:Питер, 1997.-- 704 с.,ил.
6. Дж. Гофф, П. Вайнберг Энциклопедия SQL. 3-е изд. - СПб: Питер, 2003. - 896 с.: ил.
7. Культин Н.Б. Delphi 6. Программирование на Object Pascal. - СПб.: БХВ-Петербург, 2001. - 528 с.: ил.
8. Фаронов В. В. Delphi 6. Учебный курс. - М.: Издатель Молгачева С. В., 2003. - 672 с., ил.
9. Кирстен В., Ирингер М., Рёриг Б., Шульте П. СУБД Cache: объктно-ориентированная разработка приложений. Учебный курс. - СПб.: Питер, 2001. - 384 с.: ил.
Страницы: 1, 2
|