Приведу простой пример чтоб смысл был понятен. Предположим на форме 1 расположена таблица со следующими столбцами:
ID_Рейсаа,
Откуда_Куда и
Кол-во_билетов. Названия схематичны чтоб было понятно и столбцы самые необходимые. На 3 форме допустим таблица(пассажиры) со столбцами:
ID_Рейса,
ФИО_Пассажира.
Выбираем подходящий рейс и жмем (с ваших слов) кнопку "Купить билет", далее вводим ФИО пассажира и жмем ОК. И в таблицу(пассажиры) на 3 форме добавляется ФИО и ID рейса. Вот например можно так:
Код:
//ADOQuery1 - работает с таблицей на 1 форме
//ADOQuery3 - работает соответственно с таблицей на 3 форме
//Вычитаем один билет если он есть
if ADOQuery1.FieldValues['Кол-во_билетов']<>0 then
begin
ADOQuery1.Edit;
ADOQuery1.FieldValues['Кол-во_билетов']:=ADOQuery1.FieldValues['Кол-во_билетов']-1;
ADOQuery1.Post;
end
else
begin
ShowMessage('Нет билетов');
exit;
end;
//Добавляем пассажира
ADOQuery3.Insert;
ADOQuery3.FieldValues['ID_Рейса']:=ADOQuery1.FieldValues['ID_Рейса'];
//Присваиваем ID рейса пассажиру
ADOQuery3.FieldValues['ФИО_Пассажира']:=Edit1.Text;
//И фио, допустим оно в Едит1
ADOQuery3.Post;
А если надо удалить пассажира купившего билет. Можно сделать например так:
Код:
//Ищем нужный рейс
ADOQuery1.Filtred:=false;
ADOQuery1.Filter:=
'ID_Рейса = '+ADOQuery3.FieldValues['ID_Рейса'];
ADOQuery1.Filtred:=true;
//Поскольку Id рейса уникален он отфильтрует только 1 строчку
//На всякий случай проверку если не нашел
ADOQuery1.FieldValues['ID_Рейса']<>null then
begin
//И возвращаем билет
ADOQuery1.Edit;
ADOQuery1.FieldValues['Кол-во_билетов']:=
ADOQuery1.FieldValues['Кол-во_билетов']+1;
ADOQuery1.Post;
end
else
ShowMessage('Не найден рейс');
На всякий случай "FieldValues" обращение к выделенной строке.
Вариантов решение вашей задачи масса, раз ADOQuery тогда конечно лучше с помощью запросов, но можно и так. Я лишь привел код простой для понимания.