如何在更新的相关数据从当前 table 中删除之前更新另一个 table
how to update another table before relevant data for update gets deleted from current table
我正在删除 table 'posoja' 中的记录:
procedure TForm2.cxButton3Click(Sender: TObject);
begin
DataModule3.FDTransaction1.StartTransaction;
DataModule3.DEL_POSOJA.ExecSQL;
DataModule3.FDTransaction1.Commit;
DataModule3.POSOJA.Refresh;
end;
属性 DEL_POSOJA 查询是这样的:
delete from POSOJA where VRNJENO IS NOT NULL;
所以所有 'vrnjeno' 填充的记录都会被删除。
现在,就在我删除填充的记录之前,我想更新我的 'filmi' table。查询是这样的:
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' table。
我不能把它放在删除 'posoja' table 之前,因为它只捕获 dbnavigator 使用的事件。
问题是我需要那些即将被删除的值来更新我的 table。
有什么解决办法吗?牙疼,想不通……:)
尝试使用 IN 函数在一个操作中完成更新集:
UPDATE `filmi` SET na_voljo=1 WHERE `filmi`.`dvd_id` IN(SELECT `DVD_ID` FROM `posoja`)
为 POSOJA 使用正确的 table 名称。您将不需要导航此 table(NEXT、NEXT 等...)。
我正在删除 table 'posoja' 中的记录:
procedure TForm2.cxButton3Click(Sender: TObject);
begin
DataModule3.FDTransaction1.StartTransaction;
DataModule3.DEL_POSOJA.ExecSQL;
DataModule3.FDTransaction1.Commit;
DataModule3.POSOJA.Refresh;
end;
属性 DEL_POSOJA 查询是这样的:
delete from POSOJA where VRNJENO IS NOT NULL;
所以所有 'vrnjeno' 填充的记录都会被删除。
现在,就在我删除填充的记录之前,我想更新我的 'filmi' table。查询是这样的:
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' table。
我不能把它放在删除 'posoja' table 之前,因为它只捕获 dbnavigator 使用的事件。
问题是我需要那些即将被删除的值来更新我的 table。
有什么解决办法吗?牙疼,想不通……:)
尝试使用 IN 函数在一个操作中完成更新集:
UPDATE `filmi` SET na_voljo=1 WHERE `filmi`.`dvd_id` IN(SELECT `DVD_ID` FROM `posoja`)
为 POSOJA 使用正确的 table 名称。您将不需要导航此 table(NEXT、NEXT 等...)。