End else if (Ord(sLit[1]) - Ord('А')) < inRow then

Inc(sLit[1]) //В том же ряду

else begin

Inc(sNum);

sLit := 'А';

end;

EditSeat.Text := IntToStr(sNum) + sLit;

End

end;

 

Обратите внимание, как в текст запроса подставляются строки с кавычками.

Форма FormNewTicket обрабатывает еще одно событие – OnFormCloseQuery. Это событие не позволяет нажать на кнопку Ок (не возможно приобрести новый билет) если не указан номер места, номер билета или покупатель.

 

procedure TFormNewTicket.FormCloseQuery(Sender: TObject;

var CanClose: Boolean);

Begin

if ModalResult = mrOk then begin

//если покупатель не указан, на Ок нажать нельзя

CanClose := (EditSeat.Text <> '') and (EditNum.Text <> '') and

(Length(EditName.Text) > 2) and (Length(EditName2.Text) > 2);

end;

end;

Разберем теперь пошагово, что происходит когда пользователь нажал на кнопку Ок на форме FormNewTicket, т.е. как собственно происходит создание нового билета.

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

procedure TFormTicket.ButtonNewTicketClick(Sender: TObject);

Begin

//заполним поля на вспомогательной форме FormNewTicket

//покажем форму FormNewTicket

If <была нажата кнопка Ок?> then begin

//проверяем - нужно ли создавать новый рейс

//ищем наличие рейса за выбранную на форме FormNewTicket дату

If <количество рейсов за дату равно 0?> then begin

//рейса за эту дату нет, создаем новый рейс

end;

If <личность форме FormNewTicket не выбрана?> then begin

//Личность не выбрана, создаем новую

end;

end;

//Создаем билет

end;

 

Теперь заменим каждое многоточие фрагментом кода.

//заполним поля на вспомогательной форме FormNewTicket

If not IBQueryCntTick.FieldByName('fl_date').IsNull then

FormNewTicket.DateTimePickerTicket.DateTime :=

IBQueryCntTick.FieldByName('fl_date').AsDateTime

Else

FormNewTicket.DateTimePickerTicket.DateTime := Now;

 

В компоненту DateTimePickerTicket на форме FormNewTicket мы подставляем дату полученную из запроса IBQueryCntTick (даты вылета), а если такой даты нет, то подставляем текущую дату.

Далее показываем форму FormNewTicket, дожидаемся, когда форма будет закрыта и проверяем, была ли нажата кнопка Ок. Это все делается одной строкой.

 

if FormNewTicket.ShowModal = mrOk then begin

 

Теперь проверяем нужно ли создавать новый рейс. Для этого динамически создаем запрос, который вернет количество рейсов по маршруту из заданного тарифа за заданную дату (дату получаем из компоненты DateTimePickerTicket на форме FormNewTicket). Для динамических запросов воспользуемся компоненом доступа к данным IBQueryAny, который расположен на форме. Запрос возвращает единственное поле – количество рейсов.

//проверяем - нужно ли создавать новый рейс

IBQueryAsc.SQL.Text := 'select count(*) from FLIGHT where FL_NUM = '

+ IBQueryTarifTR_AL_NUM.AsString + ' AND FL_DATE = '''

+ DateToStr(FormNewTicket.DateTimePickerTicket.Date) + '''';

IBQueryAsc.Open;

if IBQueryAsc.Fields[0].AsInteger = 0 then begin

//рейса за эту дату нет - будем создавать

 

Теперь если рейса, на который мы собирались продать билет, не существует, нужно его создать. Но для создания рейса нужно указать номер борта. Для этого нам придется создать еще одну форму, назовем ее FormNewFlight (рис 26).

Рисунок 26 Форма для подтверждения создания нового рейса

 

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

 

//готовим форму для запроса № борта

FormNewFlight.Memo1.Text :=

'Рейса на маршруте ' + IBQueryTarifTR_AL_NUM.AsString

+ ' за ' + DateToStr(FormNewTicket.DateTimePickerTicket.Date)

+ ' не существует, будете создавать?';

 

FormNewFlight.ComboBox.Clear;

FormNewFlight.ComboBox.Items.Clear;

IBQueryAsc.SQL.Text := 'select BRD.BRD_NUM from BOARD BRD '

+ 'INNER JOIN AIRLINE AL ON BRD.BRG_AC_CODE = AL.AL_AC_CODE '

+ 'WHERE AL.AL_NUM = ' + IBQueryTarifTR_AL_NUM.AsString;

IBQueryAsc.Open;

//заполняем список номеров бортов



php"; ?>