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

Реферат - Компьютеры, программирование

Другие рефераты по предмету Компьютеры, программирование

dbyname('K4').AsString='' then begin

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

ibtable1.fieldbyname('K4').FocusControl;

abort;

end;

if ibtable1.fieldbyname('SerNo').AsString='' then begin

MessageDlg('Введите серийный номер аппарата!', mterror, [mbok],0);

ibtable1.fieldbyname('SerNo').FocusControl;

abort;

end;

if ibtable1.fieldbyname('K3').AsString='' then begin

MessageDlg('Введите модель аппарата!',mterror,[mbok],0);

ibtable1.fieldbyname('K3').FocusControl;

abort;

end;

if ibtable1.State=dsinsert then IBTable1. FieldByName('KOD5'). AsInteger:=-1; (*)

end;

Нужна для предотвращения занесения null в поля SerNo,K3,K4, по которым можно однозначно идентифицировать запись в наборе данных svodka (по ним можно построить ключ).

Еще один нюанс если убрать строку (*), то при добавлении новой записи будет выдаваться ошибка, что не заполнено поле, на которое стоит ограничение not null. Эта ошибка возникает, потому что сервер interBase генерирует уникальное значение в поле “KOD5” после сохранения, а до сохранения он проверяет значение в поле “KOD5”, записи, полученной от клиентского приложения на пустое значение, то есть до генерации не доходит. Для того, чтобы этого избежать мы при добавлении новой записи заносим в поле “KOD5” любое числовое значение, которое все равно потом триггером поменяется на уникальное. Аналогичное действие мы проводим для всех таблиц.

FormMain и FormVvod2

FormMain основная, родительская форма для всех остальных форм. Управление отображением дочерних окон внутри родительской осуществляется с помощью Api функции ShowWindow.

FormVvod2 экранная форма с отображением параметров одного конкретно взятого прибора. Навигация идет по таблице Svodka, с которой связан компонент IBTable1 из формы DM. Воинская часть и модель отображаются с помощью связи компонента TLookupKomboBox из компонентов IBTable44 и IBTable5 соответственно.

 

 

 

Вид форм при работе программы:

 

FormVvod

 

Вид формы при работе программы:

 

В форме отображаются записи таблицы svodka, с которой связан компонент IBTable1. Добавил поля Lookup в компонент IBTable и в таблице появились поля выбора воинской части и модели аппарата.

Vch

В форме список всех воинских частей.

Вид:

 

 

Svazka

 

Вид формы:

С помощью галочки Связанный набор можно устанавливать или убирать связь между таблицами “Раздел”, “Наименование” и “Модель”. Тип связей: “Наименование” подчиненная для “Раздела”, а “Модель” подчиненная для “Наименования”. Процедура клика на CheckBox:

procedure TSvazka.CheckClick(Sender: TObject);

begin

if check.Checked then begin

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

dm.IBTable3.active:=false;

dm.IBTable4.active:=false;

dm.IBTable3.IndexFieldNames:='K1';

dm.IBTable3.MasterSource:=dm.DataSource2;

dm.IBTable4.IndexFieldNames:='K2';

dm.IBTable4.MasterSource:=dm.DataSource3;

dm.IBTable3.active:=true;

dm.IBTable4.active:=true;

end

else begin

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

dm.IBTable3.MasterSource:=nil;

dm.IBTable3.IndexFieldNames:='NAIM';

dm.IBTable4.MasterSource:=nil;

dm.IBTable4.IndexFieldNames:='MODEL';

end;

end;

 

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

Avt и Opr

О авторе и о программе.

ZaprVibr

 

Вид формы:

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

Запросы

Поиск не списанного или списанного аппарата

 

Данные запросы почти полностью одинаковы, рассмотрим поиск не списанного аппарата.

Вид формы:

 

DbGrid связана с Zapr1 через DZapr.

Текст запроса:

select kod5,vch,model,serno,dvip,cena

from SVODKA,CHASTT,MODELL

where K4 in

(select KOD

from CHASTT

where UPPER(VCH) like upper(:pvch)

) and (UPPER(serno) like upper(:pserno))

and (dspis is null)

and K3 in

(select KOD3

from Modell

where UPPER(Model) like upper(:pmodel)

)

and svodka.k4=chastt.kod and svodka.k3=modell.kod3

order by vch

Тут используются вложенные запросы. Параметры берутся из полей edit. Для независимости от регистра используем процедуру UPPER. Процедура нажатия на кнопку Выполнить:

with dm do begin

Zapr1.Active:=false;

if ch1.Checked then zapr1.ParamByName('pvch').Value:= '%'+edit1.Text+'%'

else zapr1.ParamByName('pvch').Value:='%%';

if ch2.Checked then zapr1.ParamByName('pserno').Value:= '%'+edit2.Text+'%'

else zapr1.ParamByName('pserno').Value:='%%';

if ch3.Checked then zapr1.ParamByName('pmodel').Value: ='%'+edit3.Text+'%'

else zapr1.ParamByName('pmodel').Value:='%%';

Zapr1.Active:=true;

label2.Caption:=inttostr(zapr1.RecordCount);

end;

При нажатии на кнопку просто задаются параметры sql запросу. В SQL используется оператор Like для поиска по части строки символы %, стоящие в начале и в конце параметра означают, что вместо них могут стоять любые другие.

Работает запрос так: ищутся такие записи в svodka, у которых K4 и K3 находятся из вложенных запросов как коды записей с частичным совпадением не ключевых полей с заданными параметрами “pvch” и “pmodel”, и серийный номер частично совпадает с “pserno”.

Аппарат является не списанным, если в поле “DSpis” (Дата списания) содержится значение null. Если нам надо найти списанный аппарат, то запрос будет почти такой же, только DSpis is not null. Поэтому поиск списанного аппарата я рассматривать не буду.

Отобранные записи сортируются по номеру воинской части (Order