Показать сообщение отдельно
  #9  
Старый 15.06.2013, 20:19
listerine listerine вне форума
Прохожий
 
Регистрация: 20.03.2013
Сообщения: 41
Версия Delphi: Delphi XE2
Репутация: выкл
По умолчанию

Приведу простой пример чтоб смысл был понятен. Предположим на форме 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 тогда конечно лучше с помощью запросов, но можно и так. Я лишь привел код простой для понимания.
Ответить с цитированием