Добрый день. Вопрос старый. Но порывшись в Инете я ничего не нашел (или плохо искал или голова не там). Есть запрос, объединяющий несколько таблиц (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. Если да, буду заранее признателен за кусочек кода. Важно, как получить
обновление нескольких связанных ключами таблиц?
Заранее, огромное спасибо всем откликнувшимся!