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;