【问题标题】:how to update another table before relevant data for update gets deleted from current table如何在更新的相关数据从当前表中删除之前更新另一个表
【发布时间】:2015-08-19 03:10:07
【问题描述】:

我正在删除表 'posoja' 中的记录:

procedure TForm2.cxButton3Click(Sender: TObject);
begin
DataModule3.FDTransaction1.StartTransaction;
DataModule3.DEL_POSOJA.ExecSQL;
DataModule3.FDTransaction1.Commit;
DataModule3.POSOJA.Refresh;
end;

DEL_POSOJA 查询的属性是这样的:

从 POSOJA 中删除 VRNJENO 不为 NULL 的位置;

因此,所有填写了“vrnjeno”的记录都将被删除。

现在,就在我删除填充记录之前,我想更新我的“电影”表。查询是这样的:

while not POSOJA.EOF do begin
FDTransaction5.StartTransaction;
try
UPD_NA_VOLJO_AFT_DEL.Close;
UPD_NA_VOLJO_AFT_DEL.SQL.Clear;
UPD_NA_VOLJO_AFT_DEL.SQL.Text := 'update filmi set na_voljo=1 where dvd_id=:a1';
UPD_NA_VOLJO_AFT_DEL.Params.ParamByName('a1').asString := DataModule3.POSOJA.FieldByName('DVD_ID').AsString;
UPD_NA_VOLJO_AFT_DEL.ExecSQL;
POSOJA.Next;
FDTransaction5.Commit;
except
on E: Exception do  begin
      ShowMessage(E.Message);
      DataModule3.FDTransaction5.Rollback;
end;
end;
DataModule3.FILMI.Refresh;
end;

我的问题是我不知道将这些行放在哪里。我尝试在执行 DEL_POSOJA 查询之前将其打开(它工作正常),但查询会执行,因此即使“vrnjeno”不为空,UPD_NA_VOLJO_AFT_DEL 查询也会更新“filmi”表。

我不能把它放在删除“posoja”表之前,因为它只捕获 dbnavigator 使用的事件。

问题是我需要那些即将被删除的值才能更新我的表。

任何想法如何解决这个问题?牙疼,想不通... :)

【问题讨论】:

    标签: delphi firedac


    【解决方案1】:

    尝试使用 IN 函数在一个操作中设置更新:

    UPDATE `filmi` SET na_voljo=1 WHERE `filmi`.`dvd_id` IN(SELECT `DVD_ID` FROM `posoja`)
    

    为 POSOJA 使用正确的表名。您无需浏览此表(NEXT、NEXT 等...)。

    【讨论】:

    • 这似乎有效:UPD_NA_VOLJO_AFT_DEL.SQL.Text := 'UPDATE filmi SET na_voljo=1 WHERE dvd_id IN(SELECT DVD_ID FROM posoja where vrnjeno is not null)';谢谢你 asd-tm ......你让我走上了正确的道路。我在执行 DEL_POSOJA 查询之前就这样做了。
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2016-09-10
    • 2017-06-15
    • 2016-12-26
    • 2011-08-15
    相关资源
    最近更新 更多