我正在使用以下命令从表“ posoja”中删除记录:
procedure TForm2.cxButton3Click(Sender: TObject);
begin
DataModule3.FDTransaction1.StartTransaction;
DataModule3.DEL_POSOJA.ExecSQL;
DataModule3.FDTransaction1.Commit;
DataModule3.POSOJA.Refresh;
end;
DEL_POSOJA查询的属性是这样的:
从“返回不为空”的贷款中删除;
因此,所有确实填有'vrnjeno'的记录都将被删除。
现在,在删除填充记录之前,我想更新我的“ filmi”表。查询是这样的:
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'不为null,UPD_NA_VOLJO_AFT_DEL查询也会更新'filmi'表。
我不能将其放在删除“ posoja”表之前,因为它只能捕获dbnavigator使用的事件。
问题是我需要将要删除的值来更新我的表。
任何想法如何解决这个问题?牙疼,无法思考海峡... :)
尝试使用IN函数通过一项操作设置更新集:
UPDATE `filmi` SET na_voljo=1 WHERE `filmi`.`dvd_id` IN(SELECT `DVD_ID` FROM `posoja`)
为POSOJA使用正确的表名。您无需浏览此表(NEXT,NEXT等...)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句