Реферат: Разработка базы данных

<div v:shape="_x0000_s1026"> <span Courier New"">Министерство образования

<span Courier New"">Российской Федерации

<span Courier New"">

<span Courier New"">Хабаровский Государственный Технический Университет

<span Courier New"">

<span Courier New"">Кафедра

<span Courier New";mso-bidi-font-family: «Times New Roman»">программного обеспечения вычислительной

<span Courier New";mso-bidi-font-family:«Times New Roman»">техники и автоматизированных систем

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<img src="/cache/referats/13710/image002.jpg" v:shapes="_x0000_i1025">

<span Courier New";text-transform:uppercase;letter-spacing:5.0pt">пояснительная записка

<span Courier New";text-transform:uppercase;letter-spacing:5.0pt">к курсовой работе

<span Courier New";mso-bidi-font-family:«Times New Roman»">ПО ДИСЦИПЛИНЕ «БАЗЫ ДАННЫХ»

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">Выполнил:

<span Courier New"">  студент гр. ПО-02

<span Courier New"">    Самойленко Павел

<span Courier New"">Проверил:

<span Courier New"">  к.т.н., доцент

<span Courier New"">     Саринков А. А.

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New"">

<span Courier New";mso-bidi-font-family:«Times New Roman»">Хабаровск 2002г.


<span Courier New"">Задание

<span Courier New"">Разработка клиент – серверного приложения.

<span Courier New"">Введение в технологию клиент-сервер

<span Courier New"">

<span Courier New"">База данных представляетсобой набор файлов на сетевом сервере. Характерная особенность архитектурыклиент-сервер является перенос вычислительной нагрузки на сервер БД(

<span Courier New";mso-ansi-language: EN-US">SQL<span Courier New""><span Courier New"">сервер), атакже максимальная разгрузка клиента от вычислительной работы и существенноеукрепление данных. Взаимодействие сервера и клиента реализуется с помощью <span Courier New";mso-ansi-language: EN-US">SQL<span Courier New"">запросов, которые формирует и отсылает серверу клиент. Сервер, приняв запрос,выполняет его и возвращает результат клиенту. В клиентском приложении восновном осуществляется интерпретация полученных от сервера данных, реализацияпользовательского интерфейса, а также реализация части бизнес — правил.

<span Courier New"">Преимущества архитектурыклиент – сервер:

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New"">Большинствовычислительных процессов происходит на сервере, что снижает требования квычислительной мощности клиента.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New"">Снижаетсясетевой трафик, так как пересылаются не все данные, а только запрошенные.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New"">БДна сервере представляет единый файл, в котором содержатся таблицы, ограниченияцелостности и другие компоненты БД. Взломать, похитить или испортить такую БДзначительно труднее; существенно увеличивается защищенность БД от вводанеправильных значений. Кроме того для каждого пользователя устанавливаются своиуровни доступа.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New"">Серверреализует управление транзакциями и предотвращает  попытки одновременного изменения одних и техже данных.

<span Courier New"">Сервер базыданных

<span Courier New"">При выборе сервера базыданных я остановился на промышленном сервере

<span Courier New";mso-ansi-language:EN-US">InterBase<span Courier New"">. <span Courier New";mso-ansi-language:EN-US">InterBase<span Courier New""> – «родной» сервер для <st1:place w:st=«on»><span Courier New"; mso-ansi-language:EN-US">Delphi</st1:place><span Courier New"">. Для доступа к нему не нужно устанавливать дополнительныхдрайверов. Все данные хранятся на сервере в файле <span Courier New";mso-ansi-language:EN-US">baze<span Courier New"">.<span Courier New";mso-ansi-language:EN-US">gdb<span Courier New"">.

<span Courier New"">Предметная область

<span Courier New"">

<span Courier New"">Программапредназначена для учета медицинских аппаратов, имеющихся в воинских частях.Основная задача — учет драгоценных металлов, содержащихся в этих аппаратах, возможностьподсчета списанных, не списанных и общего числа аппаратов в отдельно взятойчасти и сумма драг. металлов, в них содержащихся.

<span Courier New"">Создание базы данных

<span Courier New"">

<span Courier New"">Структура таблиц и связеймежду ними:

<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">

<span Courier New"">

<div v:shape="_x0000_s1027">

Рис. 1

<span Courier New""><img src="/cache/referats/13710/image004.jpg" v:shapes="_x0000_i1026">

<span Courier New"">

<span Courier New"">Форматы полей в таблицах:

<span Courier New"">CREATE TABLE CHASTT

<span Courier New""> (

<span Courier New""> 

<span Courier New";mso-ansi-language:EN-US">KOD INTEGER NOT NULL,

<span Courier New";mso-ansi-language:EN-US">  VCH VARCHAR(20) NOT NULL

<span Courier New"">)

<span Courier New";mso-ansi-language: EN-US">CREATE TABLE MODELL

<span Courier New"; mso-ansi-language:EN-US">(

<span Courier New";mso-ansi-language:EN-US">  KOD3 INTEGER NOT NULL,

<span Courier New";mso-ansi-language:EN-US">  MODEL VARCHAR(160) NOT NULL,

<span Courier New";mso-ansi-language:EN-US">  <st1:place w:st=«on»>K2</st1:place> INTEGER

<span Courier New"">)

<span Courier New";mso-ansi-language: EN-US">CREATE TABLE NAIMM

<span Courier New"; mso-ansi-language:EN-US"> (

<span Courier New";mso-ansi-language:EN-US">  KOD2 INTEGER NOT NULL,

<span Courier New";mso-ansi-language:EN-US">  NAIM VARCHAR(160) NOT NULL,

<span Courier New";mso-ansi-language:EN-US">  K1 INTEGER

<span Courier New"">)

<span Courier New";mso-ansi-language: EN-US">CREATE TABLE RAZDELL

<span Courier New"; mso-ansi-language:EN-US"> (

<span Courier New";mso-ansi-language:EN-US">  KOD1 INTEGER NOT NULL,

<span Courier New";mso-ansi-language:EN-US"> 

<span Courier New"">RAZDELVARCHAR(160) NOT NULL

<span Courier New"">)

<span Courier New";mso-ansi-language: EN-US">CREATE TABLE SVODKA

<span Courier New"; mso-ansi-language:EN-US"> (

<span Courier New";mso-ansi-language:EN-US">  KOD5 INTEGER NOT NULL,

<span Courier New";mso-ansi-language:EN-US">  SERNO VARCHAR(20),

<span Courier New";mso-ansi-language:EN-US">  K4 INTEGER NOT NULL,

<span Courier New";mso-ansi-language:EN-US">  SER FLOAT,

<span Courier New";mso-ansi-language:EN-US">  ZOL FLOAT,

<span Courier New";mso-ansi-language:EN-US">  PT FLOAT,

<span Courier New";mso-ansi-language:EN-US">  PG FLOAT,

<span Courier New";mso-ansi-language:EN-US">  DVIP CHAR(4),

<span Courier New";mso-ansi-language:EN-US">  DVVOD CHAR(4),

<span Courier New";mso-ansi-language:EN-US">  DSPIS CHAR(4),

<span Courier New";mso-ansi-language:EN-US">  SROK SMALLINT,

<span Courier New";mso-ansi-language:EN-US">  KATEGOR SMALLINT,

<span Courier New";mso-ansi-language:EN-US">  CENA FLOAT,

<span Courier New";mso-ansi-language:EN-US">  PRIMECH CHAR(200),

<span Courier New";mso-ansi-language:EN-US">  K3 INTEGER

<span Courier New"">)

<span Courier New"">Между полями в таблицахустановлена ссылочная целостность согласно рисунку 1.

<span Courier New"">В

<span Courier New";mso-ansi-language:EN-US">InterBase<span Courier New""> отсутствует аппаратавтоинкрементных столбцов. Вместо этого для установки уникальных значенийстолбцов я использовал аппарат генераторов. Перед запоминанием для каждойтаблицы генерируется уникальное значение с помощью функции <span Courier New";mso-ansi-language: EN-US">Gen<span Courier New"">_<span Courier New";mso-ansi-language: EN-US">id<span Courier New"">.Например,<span Courier New"; mso-ansi-language:EN-US"> <span Courier New"">для<span Courier New"; mso-ansi-language:EN-US"> <span Courier New"">сводной<span Courier New"; mso-ansi-language:EN-US"> <span Courier New"">таблицы<span Courier New";mso-ansi-language:EN-US">

<span Courier New"; mso-ansi-language:EN-US">CREATE TRIGGER NOVOE FOR RAZDELL BEFORE INSERTPOSITION 0 AS

<span Courier New"; mso-ansi-language:EN-US">BEGIN

<span Courier New"; mso-ansi-language:EN-US">  new.kod1 =gen_id(gen1,1);

<span Courier New"">END

<span Courier New"">Удаленными процедурами непользовался – хватило возможностей

<span Courier New";mso-ansi-language:EN-US">sql<span Courier New""> запросов для реализациивсех потребностей.

<span Courier New"">Задал индексы по полям:

<span Courier New";mso-ansi-language: EN-US">Modell<span Courier New"">.<span Courier New";mso-ansi-language: EN-US">model<span Courier New"">, <span Courier New";mso-ansi-language: EN-US">naimm<span Courier New"">.<span Courier New";mso-ansi-language: EN-US">naim<span Courier New"">, <span Courier New";mso-ansi-language: EN-US">chastt<span Courier New"">.<span Courier New";mso-ansi-language: EN-US">vch<span Courier New"">, <span Courier New";mso-ansi-language: EN-US">razdell<span Courier New"">.<span Courier New";mso-ansi-language: EN-US">razdel<span Courier New""><span Courier New"">для увеличенияскорости выполнения запросов.

<span Courier New"">Проектирование приложения в среде

<span Courier New";mso-ansi-language:EN-US">Delphi

<span Courier New"">Используемые средства

<span Courier New"">

<span Courier New"">Приложение было написано всреде

<span Courier New"; mso-ansi-language:EN-US">Delphi<span Courier New""> 7 на компьютере <span Courier New";mso-ansi-language:EN-US">Athlon<span Courier New""> 1600+<span Courier New";mso-ansi-language: EN-US">XP<span Courier New"">, чтоочень плохо, потому что приложение написано для компьютера, намного уступающегопо мощности моему. Платформа БД – <span Courier New";mso-ansi-language:EN-US">InterBase<span Courier New""> 6.0.

<span Courier New"">Формы

<img src="/cache/referats/13710/image006.jpg" v:shapes="_x0000_s1028">
<span Courier New"">Первая форма типа

<span Courier New";mso-ansi-language: EN-US">DataModule<span Courier New"">– “<span Courier New"; mso-ansi-language:EN-US">DM<span Courier New"">”, на которой располагаются не визуальные компонента доступа кданным. Вид формы на этапе проектирования:

<span Courier New"">Для доступа к данным яиспользовал компоненты со вкладки

<span Courier New";mso-ansi-language:EN-US">InterBase<span Courier New"">, характерной особенностьюкоторых является то, что они не обращаются к <span Courier New";mso-ansi-language:EN-US">BDE<span Courier New""> и являются более компактнымии быстрыми.

<span Courier New"">Назначение компонентов:

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New";mso-ansi-language:EN-US">IBDataBase<span Courier New"">1 – создает соединение с БД <span Courier New";mso-ansi-language: EN-US">InterBase<span Courier New"">.Есть свойство <span Courier New"; mso-ansi-language:EN-US">DataBaseName<span Courier New"">, которое указывает имя физической БД, с которойсвязан компонент. При связи с удаленной БД по протоколу <span Courier New";mso-ansi-language: EN-US">TCP<span Courier New"">/<span Courier New";mso-ansi-language: EN-US">IP<span Courier New""><span Courier New"">имя записываетсяв формате <имя сервера>:<имя файла БД>; по протоколу <span Courier New";mso-ansi-language: EN-US">NetBios<span Courier New"">– в формате \<имясервера><имя файла БД>; по протоколу <span Courier New";mso-ansi-language:EN-US">SPX<span Courier New""> <span Courier New"">– в формате <имя сервера>@<имяфайла БД>. При запуске приложения расположение БД берется из файла <span Courier New";mso-ansi-language: EN-US">del<span Courier New"">.<span Courier New";mso-ansi-language: EN-US">ini<span Courier New"">:

<span Courier New";mso-ansi-language:EN-US"> 

<span Courier New";mso-ansi-language: EN-US">Inii := TIniFile.Create(getcurrentdir+'del.ini');

<span Courier New"; mso-ansi-language:EN-US">  try

<span Courier New"; mso-ansi-language:EN-US">  str:=Inii.ReadString( 'Baza', 'Put', '');

<span Courier New"; mso-ansi-language:EN-US">  ibdatabase1.databaseName:=str;

<span Courier New"; mso-ansi-language:EN-US">  IBDatabase1.Connected:=true;

<span Courier New"; mso-ansi-language:EN-US">  IBTransaction1.Active:=true;

<span Courier New"; mso-ansi-language:EN-US">  IBTable1.Active:=true;

<span Courier New"; mso-ansi-language:EN-US">  IBTable2.Active:=true;

<span Courier New"; mso-ansi-language:EN-US">  IBTable3.Active:=true;

<span Courier New"; mso-ansi-language:EN-US">   IBTable4.Active:=true;

<span Courier New"; mso-ansi-language:EN-US">  IBTable5.Active:=true;

<span Courier New"; mso-ansi-language:EN-US">  

<span Courier New"">IBTable44.Active:=true;

<span Courier New"">Текст файла

<span Courier New";mso-ansi-language: EN-US">del<span Courier New"">.<span Courier New";mso-ansi-language: EN-US">ini<span Courier New"">,если БД на локальном компьютере в папке <span Courier New";mso-ansi-language:EN-US">D<span Courier New"">:<span Courier New";mso-ansi-language:EN-US">interBase<span Courier New"">:

<span Courier New"">[Baza]

<span Courier New"">Put=D:interBasebase.gdb

<span Courier New"">Следущее использованноесвойство –

<span Courier New"; mso-ansi-language:EN-US">Params<span Courier New"">, которое содержит список параметров, которые передаются серверув момент соединения:

<span Courier New"">USER_NAME=SYSDBA

<span Courier New"">PASSWORD=masterkey

<span Courier New"">lc_ctype=WIN1251

<span Courier New"">Тут задается имяпользователя и пароль – окно с запросом пароля при подключении не появляется.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New";mso-ansi-language:EN-US">IBTranzaction1 – <span Courier New"">транзакция

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New";mso-ansi-language:EN-US">IBTable<span Courier New"">~ — аналог <span Courier New";mso-ansi-language: EN-US">TTable<span Courier New"">.Отличается тем, что работает быстрее и грузит данные по надобности.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New";mso-ansi-language:EN-US">IBQyery~<span Courier New""> — аналог <span Courier New";mso-ansi-language: EN-US">TQuery<span Courier New"">.

<span Courier New";mso-fareast-font-family:«Courier New»">o<span Times New Roman"">  

<span Courier New";mso-ansi-language:EN-US">OPDial<span Courier New""> – окно выбора файла – длязагрузки запроса из файла.

<span Courier New"">При попытке сохранениязаписи в таблицу

<span Courier New";mso-ansi-language:EN-US">Svodka<span Courier New""> <span Courier New"">запускается процедура:

<span Courier New"; mso-ansi-language:EN-US">procedure TDM.IBTable1BeforePost(DataSet: TDataSet);

<span Courier New"">begin

<span Courier New"; mso-ansi-language:EN-US">  ifibtable1.fieldbyname('K4').AsString='' then begin

<span Courier New";mso-ansi-language:EN-US">

<span Courier New";mso-ansi-language:EN-US">   

<span Courier New"">MessageDlg('Введите номер воинскойчасти',mterror,[mbok],0);

<span Courier New"">   

<span Courier New";mso-ansi-language: EN-US">ibtable1.fieldbyname('K4').FocusControl;

<span Courier New"; mso-ansi-language:EN-US">    abort;

<span Courier New"; mso-ansi-language:EN-US">  end;

<span Courier New"; mso-ansi-language:EN-US">  ifibtable1.fieldbyname('SerNo').AsString='' then begin

<span Courier New"; mso-ansi-language:EN-US">    MessageDlg('

<span Courier New"">Введите<span Courier New"; mso-ansi-language:EN-US"> <span Courier New"">серийный<span Courier New";mso-ansi-language:EN-US"> <span Courier New"">номер<span Courier New"; mso-ansi-language:EN-US"> <span Courier New"">аппарата<span Courier New";mso-ansi-language: EN-US">!', mterror, [mbok],0);

<span Courier New"; mso-ansi-language:EN-US">   ibtable1.fieldbyname('SerNo').FocusControl;

<span Courier New"; mso-ansi-language:EN-US">    abort;

<span Courier New"; mso-ansi-language:EN-US">  end;

<span Courier New"; mso-ansi-language:EN-US">  ifibtable1.fieldbyname('K3').AsString='' then begin

<span Courier New"; mso-ansi-language:EN-US">    MessageDlg('

<span Courier New"">Введите<span Courier New"; mso-ansi-language:EN-US"> <span Courier New"">модель<span Courier New";mso-ansi-language:EN-US"> <span Courier New"">аппарата<span Courier New"; mso-ansi-language:EN-US">!',mterror,[mbok],0);

<span Courier New"; mso-ansi-language:EN-US">   ibtable1.fieldbyname('K3').FocusControl;

<span Courier New"; mso-ansi-language:EN-US">    abort;

<span Courier New"; mso-ansi-language:EN-US">  end;

<span Courier New"; mso-ansi-language:EN-US">    if ibtable1.State=dsinsert then IBTable1. FieldByName('KOD5').

<span Courier New""><span Courier New";mso-ansi-language:EN-US">AsInteger:=-1;<span Courier New""> (*)

<span Courier New"">end;

<span Courier New"">Нужна для предотвращениязанесения

<span Courier New"; mso-ansi-language:EN-US">null<span Courier New""> <span Courier New"">в поля <span Courier New";mso-ansi-language:EN-US">SerNo<span Courier New"">,<span Courier New";mso-ansi-language:EN-US">K<span Courier New"">3,<span Courier New";mso-ansi-language:EN-US">K<span Courier New"">4, по которым можнооднозначно идентифицировать запись в наборе данных <span Courier New";mso-ansi-language:EN-US">svodka<span Courier New""> (по ним можно построитьключ).

<span Courier New"">Еще один нюанс – если убратьстроку (*), то при добавлении новой записи будет выдаваться ошибка, что не заполненополе, на которое стоит ограничение

<span Courier New";mso-ansi-language:EN-US">not<span Courier New""> <span Courier New";mso-ansi-language: EN-US">null<span Courier New"">.Эта ошибка возникает, потому что сервер <span Courier New";mso-ansi-language:EN-US">interBase<span Courier New""> <span Courier New"">генерирует уникальноезначение в поле “<span Courier New";mso-ansi-language:EN-US">KOD<span Courier New"">5” после сохранения, а до сохранения он проверяетзначение в поле “<span Courier New";mso-ansi-language:EN-US">KOD<span Courier New"">5”, записи, полученной от клиентского приложения напустое значение, то есть до генерации не доходит. Для того, чтобы этогоизбежать мы при добавлении новой записи заносим в поле “<span Courier New";mso-ansi-language: EN-US">KOD<span Courier New"">5”любое числовое значение, которое все равно потом триггером поменяется науникальное. Аналогичное действие мы проводим для всех таблиц.

<span Courier New";mso-ansi-language: EN-US">FormMain

<span Courier New""> <span Courier New"">и<span Courier New"; mso-ansi-language:EN-US">FormVvod<span Courier New"">2

<span Courier New";mso-ansi-language: EN-US">FormMain

<span Courier New"">– основная, родительская форма для всех остальных форм. Управление отображениемдочерних окон внутри родительской осуществляется с помощью <span Courier New";mso-ansi-language: EN-US">Api<span Courier New""><span Courier New"">функции ShowWindow.

<span Courier New";mso-ansi-language: EN-US">FormVvod

<span Courier New"">2– экранная форма с отображением параметров одного конкретно взятого прибора.Навигация идет по таблице <span Courier New";mso-ansi-language:EN-US">Svodka<span Courier New"">, с которой связан компонент<span Courier New"; mso-ansi-language:EN-US">IBTable<span Courier New"">1 из формы <span Courier New";mso-ansi-language:EN-US">DM<span Courier New"">. Воинская часть и модель отображаютсяс помощью связи компонента <span Courier New";mso-ansi-language:EN-US">TLookupKomboBox<span Courier New""> <span Courier New"">из компонентов <span Courier New";mso-ansi-language: EN-US">IBTable<span Courier New"">44и <span Courier New"; mso-ansi-language:EN-US">IBTable<span Courier New"">5 соответственно.

<span Courier New"">

<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">

<img src="/cache/referats/13710/image008.jpg" v:shapes="_x0000_s1030">
<span Courier New"">

<span Courier New"">Вид форм при работепрограммы:

<span Courier New"">

<span Courier New";mso-ansi-language: EN-US">FormVvod

<span Courier New"">

<img src="/cache/referats/13710/image010.jpg" v:shapes="_x0000_s1031">
<span Courier New"">Вид формы при работепрограммы:

<span Courier New"">

<span Courier New"">В форме отображаются записи таблицы

<span Courier New";mso-ansi-language: EN-US">svodka<span Courier New"">,с которой связан компонент <span Courier New";mso-ansi-language:EN-US">IBTable<span Courier New"">1. Добавил поля <span Courier New";mso-ansi-language: EN-US">Lookup<span Courier New""><span Courier New""> в компонент <span Courier New";mso-ansi-language:EN-US">IBTable<span Courier New""> и в таблице появились полявыбора воинской части и модели аппарата.

<span Courier New";mso-ansi-language: EN-US">Vch

<span Courier New"">

<span Courier New"">В форме – список всехвоинских частей.

<span Courier New"">Вид:

<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">

<span Courier New"">

<img src="/cache/referats/13710/image012.jpg" v:shapes="_x0000_s1032">
<span Courier New";mso-ansi-language: EN-US">Svazka

<span Courier New"">

<img src="/cache/referats/13710/image014.jpg" v:shapes="_x0000_s1033">
<span Courier New"">Вид формы:

<span Courier New"">С помощью галочки «Связанныйнабор» можно устанавливать или убирать связь между таблицами “Раздел”, “Наименование”и “Модель”. Тип связей: “Наименование” подчиненная для “Раздела”, а “Модель” –подчиненная для “Наименования”. Процедура

<span Courier New";mso-ansi-language:EN-US"> <span Courier New"">клика<span Courier New";mso-ansi-language:EN-US"> <span Courier New"">на<span Courier New";mso-ansi-language:EN-US"> CheckBox:

<span Courier New"; mso-ansi-language:EN-US">procedure TSvazka.CheckClick(Sender: TObject);

<span Courier New"; mso-ansi-language:EN-US">begin

<span Courier New"; mso-ansi-language:EN-US">  if check.Checkedthen begin

<span Courier New"; mso-ansi-language:EN-US">   

<span Courier New"">svazka.Caption:='Редактированиесвязанных таблиц: Раздел->Наименование->Модель';

<span Courier New"">   

<span Courier New";mso-ansi-language: EN-US">dm.IBTable3.active:=false;

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable4.active:=false;

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable3.IndexFieldNames:='K1';

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable3.MasterSource:=dm.DataSource2;

<span Courier New"; mso-ansi-language:EN-US">    dm.IBTable4.IndexFieldNames:='<st1:place w:st=«on»>K2</st1:place>';

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable4.MasterSource:=dm.DataSource3;

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable3.active:=true;

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable4.active:=true;

<span Courier New"; mso-ansi-language:EN-US"> 

<span Courier New"">end

<span Courier New"">  else begin

<span Courier New"">    svazka.Caption:='Редактирование несвязанных таблиц';

<span Courier New"">   

<span Courier New";mso-ansi-language: EN-US">dm.IBTable3.MasterSource:=nil;

<span Courier New"; mso-ansi-language:EN-US">    dm.IBTable3.IndexFieldNames:='NAIM';

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable4.MasterSource:=nil;

<span Courier New"; mso-ansi-language:EN-US">   dm.IBTable4.IndexFieldNames:='MODEL';

<span Courier New"; mso-ansi-language:EN-US"> 

<span Courier New"">end;

<span Courier New"">end;

<span Courier New"">

<span Courier New"">Из текста процедуры видно,что мы меняем свойства

<span Courier New";mso-ansi-language:EN-US">MasterSource<span Courier New"">, которое содержит ссылку наглавную таблицу и выставляем индекс – для сортировки по алфавиту при отсутствиисвязей между таблицами. Но эта форма используется еще и для задания параметровзапросу, который будет рассмотрен ниже.

<span Courier New";mso-ansi-language: EN-US">Avt

<span Courier New""><span Courier New"">и <span Courier New";mso-ansi-language: EN-US">Opr<span Courier New"">

<span Courier New"">О авторе и о программе.

<span Courier New";mso-ansi-language: EN-US">ZaprVibr

<span Courier New"">

<img src="/cache/referats/13710/image016.jpg" v:shapes="_x0000_s1034">
<span Courier New"">Вид формы:

<span Courier New"">Форма нужна для выбора типазапроса(а по запросу формируем отчет).

<span Courier New"">Запросы

<span Courier New"">Поиск не списанного илисписанного аппарата

<img src="/cache/referats/13710/image018.jpg" v:shapes="_x0000_s1035">
<span Courier New"">Данные запросы почтиполностью одинаковы, рассмотрим поиск не списанного аппарата.

<span Courier New"">Вид формы:

<span Courier New"">

<span Courier New";mso-ansi-language: EN-US">DbGrid

<span Courier New""><span Courier New"">связана с <span Courier New";mso-ansi-language: EN-US">Zapr<span Courier New"">1 через<span Courier New"; mso-ansi-language:EN-US">DZapr<span Courier New"">.

<span Courier New"">Текст

<span Courier New";mso-ansi-language:EN-US"> <span Courier New"">запроса<span Courier New";mso-ansi-language: EN-US">:

<span Courier New"; mso-ansi-language:EN-US">select kod5,vch,model,serno,dvip,cena

<span Courier New"; mso-ansi-language:EN-US">from SVODKA,CHASTT,MODELL

<span Courier New"; mso-ansi-language:EN-US">where  K4 in

<span Courier New"; mso-ansi-language:EN-US">   (select KOD

<span Courier New"; mso-ansi-language:EN-US">    from CHASTT

<span Courier New"; mso-ansi-language:EN-US">    whereUPPER(VCH) like upper(:pvch)

<span Courier New"; mso-ansi-language:EN-US">    )    and (UPPER(serno) like upper(:pserno)) 

<span Courier New"; mso-ansi-language:EN-US">              and (dspis is null)

<span Courier New"; mso-ansi-language:EN-US">                      and  K3 in

<span Courier New"; mso-ansi-language:EN-US">                       (select KOD3

<span Courier New"; mso-ansi-language:EN-US">                       from Modell

<span Courier New"; mso-ansi-language:EN-US">                       where UPPER(Model) like upper(:pmodel)

<span Courier New"; mso-ansi-language:EN-US">                       )

<span Courier New"; mso-ansi-language:EN-US">and svodka.k4=chastt.kod and svodka.k3=modell.kod3

<span Courier New"">orderby vch

<span Courier New"">Тут используются вложенныезапросы. Параметры берутся из полей

<span Courier New";mso-ansi-language:EN-US">edit<span Courier New"">. Для независимости отрегистра используем процедуру <span Courier New";mso-ansi-language:EN-US">UPPER<span Courier New"">. Процедура нажатия накнопку «Выполнить»:

<span Courier New"">  with dm do begin

<span Courier New"">  Zapr1.Active:=false;

<span Courier New"; mso-ansi-language:EN-US">  if ch1.Checkedthen zapr1.ParamByName('pvch').Value:= '%'+edit1.Text+'%'

<span Courier New"; mso-ansi-language:EN-US">    elsezapr1.ParamByName('pvch').Value:='%%';

<span Courier New"; mso-ansi-language:EN-US">  if ch2.Checkedthen zapr1.ParamByName('pserno').Value:= '%'+edit2.Text+'%'

<span Courier New"; mso-ansi-language:EN-US">    elsezapr1.ParamByName('pserno').Value:='%%';

<span Courier New"; mso-ansi-language:EN-US">  if ch3.Checkedthen zapr1.ParamByName('pmodel').Value: ='%'+edit3.Text+'%'

<span Courier New"; mso-ansi-language:EN-US">    elsezapr1.ParamByName('pmodel').Value:='%%';

<span Courier New"; mso-ansi-language:EN-US"> Zapr1.Active:=true;

<span Courier New"; mso-ansi-language:EN-US"> label2.Caption:=inttostr(zapr1.RecordCount);

<span Courier New"; mso-ansi-language:EN-US"> 

<span Courier New"">end;

<span Courier New"">При нажатии на кнопку простозадаются параметры

<span Courier New";mso-ansi-language:EN-US">sql<span Courier New""> <span Courier New"">запросу. В <span Courier New";mso-ansi-language: EN-US">SQL<span Courier New""><span Courier New"">используетсяоператор <span Courier New"; mso-ansi-language:EN-US">Like<span Courier New""> – для поиска по части строки символы %, стоящие в начале и вконце параметра означают, что вместо них могут стоять любые другие.

<span Courier New"">Работает запрос так: ищутсятакие записи в

<span Courier New";mso-ansi-language:EN-US">svodka<span Courier New"">, у которых <span Courier New";mso-ansi-language:EN-US">K<span Courier New"">4 и <span Courier New";mso-ansi-language:EN-US">K<span Courier New"">3 находятся из вложенныхзапросов как коды записей с частичным совпадением не ключевых полей с заданнымипараметрами “<span Courier New"; mso-ansi-language:EN-US">pvch<span Courier New"">” и “<span Courier New";mso-ansi-language:EN-US">pmodel<span Courier New"">”, и серийный номер частично совпадает с “<span Courier New";mso-ansi-language: EN-US">pserno<span Courier New"">”.

<span Courier New"">Аппарат является несписанным, если в поле “

<span Courier New";mso-ansi-language:EN-US">DSpis<span Courier New"">” (Дата списания) содержитсязначение <span Courier New"; mso-ansi-language:EN-US">null<span Courier New"">. Если нам надо найти списанный аппарат, то запрос будет почтитакой же, только <span Courier New";mso-ansi-language:EN-US">DSpis<span Courier New""> <span Courier New";mso-ansi-language:EN-US">is<span Courier New""> <span Courier New";mso-ansi-language: EN-US">not<span Courier New""><span Courier New"; mso-ansi-language:EN-US">null<span Courier New"">. Поэтому поиск списанного аппарата я рассматривать не буду.

<span Courier New"">Отобранные записисортируются по номеру воинской части (

<span Courier New";mso-ansi-language:EN-US">Order<span Courier New""> <span Courier New";mso-ansi-language: EN-US">by<span Courier New""><span Courier New"; mso-ansi-language:EN-US">vch<span Courier New"">).

<span Courier New"">Кнопка «Перейти» нужна дляперехода в таблице

<span Courier New";mso-ansi-language:EN-US">IBTable<span Courier New"">1  каппарату, который является текущим в таблице отобранных с помощью запросааппаратов. Процедура нажатия на кнопку «Перейти»:

<span Courier New"; mso-ansi-language:EN-US">procedure TZ1.SpeedButton1Click(Sender: TObject);

<span Courier New"; mso-ansi-language:EN-US">begin

<span Courier New"; mso-ansi-language:EN-US">dm.IBTable1.Locate('KOD5',vararrayof([dm.zapr1.FieldByName('kod5').Value]),[]);

<span Courier New"; mso-ansi-language:EN-US"> ShowWindow(formvvod2.Handle, SW_SHOW);

<span Courier New"; mso-ansi-language:EN-US"> 

<span Courier New"">formvvod2.Show;

<span Courier New"">end;

<span Courier New"">Переход нужен для просмотра параметров, которые не выводятсязапросом или же для изменения значений полей.

<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">

<span Courier New"">Поиск аппарата по группам

<img src="/cache/referats/13710/image020.jpg" v:shapes="_x0000_s1036">
<span Courier New"">После выбора данноговида поиска на экране появляется форма “

<span Courier New";mso-ansi-language:EN-US">Svazka<span Courier New"">”, дополненная несколькимиэлементами. Ее вид:

<span Courier New"">

<span Courier New"">

<span Courier New"">Добавились 3

<span Courier New";mso-ansi-language: EN-US">CheckBox<span Courier New"">– для выбора по какому критерию мы будем отбирать аппараты. Одновременно большеодного критерия быть выбрано не может. Процедура нажатия на кнопку «Выполнить»:

<span Courier New";mso-ansi-language: EN-US">procedure TSvazka.SpeedButton2Click(Sender: TObject);

<span Courier New";mso-ansi-language: EN-US">begin

<span Courier New";mso-ansi-language: EN-US">  with dm do begin

<span Courier New";mso-ansi-language: EN-US">    Zapr3.Active:=false;

<span Courier New";mso-ansi-language: EN-US">    zapr3.SQL.Clear;

<span Courier New";mso-ansi-language: EN-US">    zapr3.SQL.Add('select *');

<span Courier New";mso-ansi-language: EN-US">    zapr3.SQL.Add('from naimm,modell,chastt,svodka');

<span Courier New";mso-ansi-language: EN-US">    if c3.Checked then begin

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('wheresvodka.k3= '+dm.ibtable4.fieldbyname('KOD3').AsString);

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('and modell.kod3='+dm.ibtable4.fieldbyname('KOD3').AsString);

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('and modell.k2=naimm.kod2');

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('andsvodka.k4=chastt.kod');

<span Courier New";mso-ansi-language: EN-US">    end

<span Courier New";mso-ansi-language: EN-US">    else if c2.Checked then begin

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('wheresvodka.k3=modell.kod3');

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('andnaimm.kod2= '+dm.ibtable3.fieldbyname('KOD2').AsString);

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('and modell.k2='+dm.ibtable3.fieldbyname('KOD2').AsString);

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('andsvodka.k4=chastt.kod');

<span Courier New";mso-ansi-language: EN-US">    end

<span Courier New";mso-ansi-language: EN-US">    else if c1.Checked then begin

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('wheresvodka.k3=modell.kod3');

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('andmodell.k2=naimm.kod2');

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('and naimm.k1='+dm.ibtable2.fieldbyname('KOD1').AsString);

<span Courier New";mso-ansi-language: EN-US">      zapr3.SQL.Add('andsvodka.k4=chastt.kod');

<span Courier New";mso-ansi-language: EN-US">    end;

<span Courier New";mso-ansi-language: EN-US">    zapr3.SQL.Add('and  svodka.k4=chastt.kod');

<span Courier New";mso-ansi-language: EN-US">    zapr3.SQL.Add('order by vch');

<span Courier New";mso-ansi-language: EN-US">    if c1.Checked or c2.Checked orc3.Checked then Zapr3.Active:=true

<span Courier New";mso-ansi-language: EN-US">   

<span Courier New"">elsemessagedlg('Надо выделить хоть одну категорию!',mtinformation,[mbok],0);

<span Courier New"">   

<span Courier New";mso-ansi-language: EN-US">z3.label2.Caption:=inttostr(zapr3.RecordCount);

<span Courier New";mso-ansi-language: EN-US">  end;

<span Courier New";mso-ansi-language: EN-US">    ShowWindow(z3.Handle,SW_SHOW);

<span Courier New";mso-ansi-language: EN-US">   

<span Courier New"">z3.Show;

<span Courier New"">end;

<span Courier New"">

<span Courier New"">Процедура заполняет

<span Courier New";mso-ansi-language: EN-US">sql<span Courier New""><span Courier New"">запроскомпонента <span Courier New"; mso-ansi-language:EN-US">zapr<span Courier New"">3 и выводит на экран форму “<span Courier New";mso-ansi-language:EN-US">Z<span Courier New"">3” с результатом:

<span Courier New""><img src="/cache/referats/13710/image022.jpg" v:shapes="_x0000_i1027">

<span Courier New"">В этой форме таблицасвязанна с

<span Courier New"; mso-ansi-language:EN-US">zapr<span Courier New"">3, а кнопка «Перейти» работает также как кнопка, описанная выше.Количество отобранных записей выводится с помощью метода <span Courier New";mso-ansi-language: EN-US">recordcount<span Courier New"">.

<span Courier New"">Загрузка запроса из файла.

<span Courier New"">Текст запроса загружается спомощью метода

<span Courier New";mso-ansi-language:EN-US">loadfromfile<span Courier New"">. Возможность загрузкизапроса из файла очень удобна, так как запрос очень легко можно перенести и ненадо перекомпилировать программу.

<span Courier New"">Пример:

<span Courier New"">Текст запроса в файле «Всеиз сводки.

<span Courier New"; mso-ansi-language:EN-US">sql<span Courier New"">»:

<span Courier New"">select*

<span Courier New"">fromsvodka

<span Courier New"">/* грузит все из таблицы сводки */

<img src="/cache/referats/13710/image024.jpg" v:shapes="_x0000_s1037">
<span Courier New"">Форма с результатами:

<span Courier New"">

<span Courier New"">Список аппаратов вопределенной части

<span Courier New"">Для этого запроса меняпросили сделать отчет. Запрос показывает все аппараты в заданной воинской частисо всеми их характеристиками.

<span Courier New"">Поиск идет по неполномусовпадению (

<span Courier New"; mso-ansi-language:EN-US">Like<span Courier New"">). Но если нужен отчет, то надо задать номер воинской частиполностью (чтоб по нескольким воинским частям выборки не произошло).<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">

<img src="/cache/referats/13710/image026.jpg" v:shapes="_x0000_s1038">
<span Courier New"">Вид формы:

<span Courier New"">

<span Courier New"">Текст

<span Courier New";mso-ansi-language:EN-US"> sql <span Courier New"">запроса<span Courier New";mso-ansi-language: EN-US">:

<span Courier New"; mso-ansi-language:EN-US">selectvch,razdel,naim,model,serno,dspis,dvvod,cena,ser,zol,pt,pg,kod5

<span Courier New"; mso-ansi-language:EN-US">from chastt,razdell,naimm,modell,svodka

<span Courier New"; mso-ansi-language:EN-US">where

<span Courier New"; mso-ansi-language:EN-US">chastt.vch like :par   

<span Courier New"; mso-ansi-language:EN-US">and        svodka.k4=chastt.kod

<span Courier New"; mso-ansi-language:EN-US">and        svodka.k3=modell.kod3

<span Courier New"; mso-ansi-language:EN-US">and        naimm.kod2=modell.k2

<span Courier New"">and         razdell.kod1=naimm.k1

<span Courier New"; mso-ansi-language:EN-US">order by vch,razdel,naim,model,dspis

<span Courier New"">

<span Courier New"">

<span Courier New"">Этот запрос я сделал безподзапросов (не знаю что быстрее, наверное быстрее без подзапросов, зато сподзапросами нагляднее).

<span Courier New"">Формирование отчета.

<span Courier New"">В

<span Courier New";mso-ansi-language:EN-US">Delphi<span Courier New""> 7 отчеты делаются уже не спомощью компонентов <span Courier New";mso-ansi-language:EN-US">QReport<span Courier New"">, а с помощью <span Courier New";mso-ansi-language:EN-US">Rave<span Courier New""> <span Courier New";mso-ansi-language: EN-US">Report<span Courier New"">.Вкладки <span Courier New"; mso-ansi-language:EN-US">QReport<span Courier New""> <span Courier New"">больше не существует. Так как система <span Courier New";mso-ansi-language:EN-US">Delphi<span Courier New""> 7 вышла недавно, топришлось разбираться по справке. В общем то принципы остались те же – разбитиедокумента на несколько полос и т. д. Для работы с отчетами на форме расположенодва не визуальных компонента — RvProject1, с помощью которого идет связь сфайлом проекта и RvDataSetConnection1 – связь с набором данных. Файл проектастроится с помощью утилиты <span Courier New";mso-ansi-language:EN-US">Rave<span Courier New""> <span Courier New";mso-ansi-language:EN-US">Designer<span Courier New"">. Отчет при проектированиивыглядит так:

<span Courier New"">

<span Courier New"">

<img src="/cache/referats/13710/image028.jpg" v:shapes="_x0000_s1039">
<span Courier New"">

<span Courier New"">

<span Courier New"">Я сформировал отчет,выровнял и сохранил как

<span Courier New";mso-ansi-language:EN-US">otch<span Courier New"">4.<span Courier New";mso-ansi-language:EN-US">rav<span Courier New"">.

<img src="/cache/referats/13710/image030.jpg" v:shapes="_x0000_s1040">
<span Courier New"">Вид отчета при работеприложения:

<span Courier New"">

<span Courier New"">Отчет вызывается по нажатиина кнопку «Отчет» через метод

<span Courier New";mso-ansi-language:EN-US">execute<span Courier New""> <span Courier New"">компонента rvproject1.

<span Courier New"">Заключение

<span Courier New"">Самый сложный этап –формирование таблиц, связей между ними, ссылочной целостности. Типы данных в

<span Courier New";mso-ansi-language: EN-US">InterBase<span Courier New"">какие-то «корявые». <span Courier New";mso-ansi-language:EN-US">Float<span Courier New""> – точность 7 знаков. Если вносишь десятичную дробь,целая часть у которой равна нулю, то в дробной части гарантируется точность до7 знаков после запятой. Например, если внести 0.123, а потом сохранить запись,то в этом поле будет число 0.1230000004233858, что конечно же не наглядно иприбавляет программисту лишней головной боли. Тип <span Courier New";mso-ansi-language:EN-US">varchar<span Courier New""> – доставляет пробелов додлины строки – опять неудобства – если максимальная длина строки – 120символов, а там допустим слово из 5 букв, то будет сохранено слово+115 пробеловперед ним, теперь смотрим в поле – видим пусто (если поле длиной меньше 120символов). При попытке переформировать таблицу данные исчезают. Возможно этонеудобство <span Courier New"; mso-ansi-language:EN-US">InterBase<span Courier New"">, но есть системы и лучше – <span Courier New";mso-ansi-language:EN-US">MS<span Courier New""> <span Courier New";mso-ansi-language: EN-US">SQLServer<span Courier New"">,<span Courier New"; mso-ansi-language:EN-US">Oracl<span Courier New"">. После соединения с сетевой базой данных работа с ней мало чемотличается от работы с локальной базой данных.

<span Courier New"">Я получил приложение,которое осуществляет все виды операций с удаленной базой данных, такие, каквставка, удаление, выборка данных. Подключение идет через стандартные сетевыепротоколы к серверу баз данных

<span Courier New";mso-ansi-language:EN-US">InterBase<span Courier New"">. Если сравнивать локальныеи сетевые базы данных, то, на мой взгляд, будущее за сетевыми базами данных, алокальные базы будут уходить в прошлое. Причина – широкое распространениелокальных сетей и сети <span Courier New";mso-ansi-language:EN-US">Internet<span Courier New"">. Проще подключиться к сети,сформировать запрос и тут же получить нужные данные, чем хранить все на своемкомпьютере. Как видно из моей работы, с помощью объектно-ориентированного программированиястроить сложное приложение становится все проще и проще, растут мощности компьютеров,объемы ОЗУ и ПЗУ и приложения работают с базами данных все быстрее и быстрее.<span Courier New";mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">

<span Courier New"">Список используемой литературы:

<span Courier New"; mso-fareast-font-family:«Courier New»">1.<span Times New Roman"">

<span Courier New"">«Microsoft®Access 2000», И.А. Харитонова, В.Д. Михеева, издательство «БХВ — Петербург»,1999

<span Courier New"; mso-fareast-font-family:«Courier New»">2.<span Times New Roman"">

<span Courier New"">«Базыданных: Учебный курс», С.В. Глушаков, Д.В. Ломотько, ООО «Издательство АСТ»,2000

<span Courier New"; mso-fareast-font-family:«Courier New»">3.<span Times New Roman"">

<span Courier New"">«Delphi5 Руководство разработчика баз данных», В.В. Фаронов, П.В. Шумаков,издательство «Нолидж», 2001

<span Courier New"; mso-fareast-font-family:«Courier New»">4.<span Times New Roman"">

<span Courier New"">«Работас базами данных в Delphi», В.Э. Гофман, А.Д. Хомоненк
еще рефераты
Еще работы по программированию, базе данных