UpdateSQL
От: ed_30  
Дата: 19.01.04 08:02
Оценка:
Добрый день. Вопрос старый. Но порывшись в Инете я ничего не нашел (или плохо искал или голова не там). Есть запрос, объединяющий несколько таблиц (MySQL+InnoDB+Delphi5+ZeosDBO):
SELECT
  orders.*,
  partorders.partorder_number,
  makets.maket_fileext,
  makets.maket_selected
FROM `orders`
LEFT JOIN partorders ON orders.order_idx=partorders.order_idx
LEFT JOIN makets ON partorders.partorder_idx=makets.partorder_idx


Необходимо его обновить. Сейчас делаю так (добавление записи):

procedure TForm1.qReestrUpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
var
  OrderIdx, PartOrderIdx: Integer;
begin
  with qReestrUpdate do begin
    try
      if UpdateKind = ukInsert then begin
        //обновляем Orders 
      Close;
    SQL.Clear;
      SQL.Add('INSERT INTO orders (order_name, order_typeidx) ');
        SQL.Add('VALUES (:order_name, :order_typeidx)');
      ParamByName('OrderName').Value := qReestr.FieldByName('order_name').Value;
      ParamByName('OrderTypeIdx').Value := qReestr.FieldByName('order_typeidx').Value;}
       ExecSQL;
        //получаем индекс вставленной в Orders записи
        Close;
        SQL.Clear;
        SQL.Add('SELECT order_idx FROM orders WHERE order_name = :OrderName');
     ParamByName('OrderName').Value := qReestr.FieldByName('order_name').Value;
        Open;
        if RecordCount <= 0 then raise Exception.Create('Insert error');
        OrderIdx := qOrdersEdit.FieldByName('order_idx').AsInteger;
        //обновляем Partorders 
        Close;
        SQL.Clear;
        SQL.Add('INSERT INTO partorders (order_idx, partorder_number) ');
        SQL.Add('VALUES (:OrderIdx, :PartOrderNumber)');
        ParamByName('OrderIdx').Value := OrderIdx;
        ParamByName('PartOrderNumber').Value := qReestr.FieldByName('partorder_number').AsInteger;
        ExecSQL;
        //получаем индекс вставленной в Partorders записи
        Close;
        SQL.Clear;
        SQL.Add('SELECT partorder_idx FROM partorders WHERE order_idx = :OrderIdx AND partorder_number = :PartOrderNumber');
     ParamByName('OrderIdx').Value := OrderIdx;
        ParamByName('PartOrderNumber').Value := qReestr.FieldByName('partorder_number').Value;
        Open;
        if RecordCount <= 0 then raise Exception.Create('Insert error');
        PartOrderIdx := qOrdersEdit.FieldByName('partorder_idx').AsInteger;
        //обновляем Makets
        Close;
        SQL.Clear;
        SQL.Add('INSERT INTO makets ');
        SQL.Add('(partorder_idx, maket_selected, maket_fileext) ');
        SQL.Add('VALUES (:PartOrderIdx, :MaketSelected, :MaketFileExt)');
        ParamByName('PartOrderIdx').Value := PartOrderIdx;
        ParamByName('MaketSelected').Value := False;
        ParamByName('MaketFileExt').Value := '.TIF';
    ExecSQL;
        qReestr.Transaction.Commit;
      except
        on E: Exception do begin
            ShowMessage(E.Message);
      qReestr.Transaction.Rollback;
        end;
      end;
   end;
end;


А можно ли все то же самое проделать через UpdateSQL. Если да, буду заранее признателен за кусочек кода. Важно, как получить обновление нескольких связанных ключами таблиц?

Заранее, огромное спасибо всем откликнувшимся!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.