While not IBQueryAsc.Eof do begin

FormNewFlight.ComboBox.Items.Add(IBQueryAsc.Fields[0].AsString);

IBQueryAsc.Next;

end;

После того как на форме FormNewFlight будет нажата кнопка Ок, создадим новый рейс. Для этого опять нужно воспользоваться динамически создаваемым запросом.

if (FormNewFlight.ShowModal = mrOk)

and (FormNewFlight.ComboBox.Text <> '')

Then begin

//получили № борта - создаем рейс

IBQueryAsc.SQL.Text :=

'INSERT INTO FLIGHT (FL_DATE, FL_NUM, FL_BRD_NUM) '

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

+ ''',''' + IBQueryTarifTR_AL_NUM.AsString + ''','''

+ FormNewFlight.ComboBox.Text + ''')';

IBQueryAsc.ExecSQL;

end else//Была нажата кнопка Cancel, выходим

exit;

Теперь проверяем выбрана ли личность в IBQueryPRS. Если не выбрана, то нужно создать новую личность с фамилией, именем и отчеством из полученными из однострочных редакторов EditName, EditName2, EditName3. Опять создаем динамический запрос для добавки записи в таблицу PERSON.

If FormNewTicket.IBQueryPRSPR_CODE.IsNull then begin

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

IBQueryAsc.SQL.Text :=

'INSERT INTO PERSON( pr_name, pr_name2, pr_name3) '

+ 'VALUES (''' + FormNewTicket.EditName.Text

+ ''',''' + FormNewTicket.EditName2.Text

+ ''',''' + FormNewTicket.EditName3.Text + ''')';

IBQueryAsc.ExecSQL;

//обновить список личностей на форме FormNewTicket

FormNewTicket.IBQueryPRS.Close;

FormNewTicket.IBQueryPRS.Open;

end;

Теперь все готово чтобы создать новый билет.

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

IBQueryAsc.SQL.Text :=

'INSERT INTO TICKET (TC_NUM, TC_PR_CODE, TC_TR_CODE, '

+ 'TC_FL_DATE, TC_FL_NUM, TC_ROW, TC_LIT ) '

+ 'VALUES (' + FormNewTicket.EditNum.Text + ','

+ FormNewTicket.IBQueryPRSPR_CODE.AsString + ','

+ IBQueryTarifTR_CODE.AsString

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

+ ''',''' + IBQueryTarifTR_AL_NUM.AsString + ''','

+ IntToStr(FormNewTicket.sNum) + ',''' + FormNewTicket.sLit + ''')';

IBQueryAsc.ExecSQL;

//обновим даты вылета и количество проданных билетов

IBQueryCntTick.Close;

IBQueryCntTick.Open;

Теперь соберем все фрагменты вместе. Приведем событие, которое происходит, кода нажимается кнопка «Купить билет».

procedure TFormTicket.ButtonNewTicketClick(Sender: TObject);

Begin

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

FormNewTicket.DateTimePickerTicket.DateTime :=

IBQueryCntTick.FieldByName('fl_date').AsDateTime

Else

FormNewTicket.DateTimePickerTicket.DateTime := Now;

if FormNewTicket.ShowModal = mrOk then begin

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

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.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;

While not IBQueryAsc.Eof do begin

FormNewFlight.ComboBox.Items.Add(IBQueryAsc.Fields[0].AsString);

IBQueryAsc.Next;

end;

if (FormNewFlight.ShowModal = mrOk)

and (FormNewFlight.ComboBox.Text <> '')

Then begin

//получили № борта - создаем рейс

IBQueryAsc.SQL.Text := 'INSERT INTO FLIGHT (FL_DATE, FL_NUM, FL_BRD_NUM) '

+ 'VALUES ( ''' + DateToStr(FormNewTicket.DateTimePickerTicket.Date) + ''','''

+ IBQueryTarifTR_AL_NUM.AsString + ''','''

+ FormNewFlight.ComboBox.Text + ''')';

IBQueryAsc.ExecSQL;

End else

exit;

end;

Наши рекомендации