数据库 一对多剔除
数据库 一对多删除
[code=Delphi(Pascal)][/code]
Close;
SQL.Clear;
SQL.Text := 'SELECT ID AS ID FROM Piece WHERE Produce =' + IntToStr(PID);
Open;
First;
while not QryYS.Eof do //只能执行一次 不能循环
begin
PIID := FieldByName('ID').AsInteger;
Next;
if PIID > 0 then
begin
Close;
SQL.Clear;
SQL.Text := 'DELETE FROM Dosage WHERE Piece =' + IntToStr(PIID);
ExecSQL;
end;
end;
------解决方案--------------------
执行两个sql,要用两个query;
否则第二个执行sql语句,第一个就被动变成第二个的结果了
------解决方案--------------------
原因分析:
[code=Delphi(Pascal)][/code]
Close;
SQL.Clear;
SQL.Text := 'SELECT ID AS ID FROM Piece WHERE Produce =' + IntToStr(PID);
Open;
First;
while not QryYS.Eof do //只能执行一次 不能循环
begin
PIID := FieldByName('ID').AsInteger;
Next;
if PIID > 0 then
begin
Close;
SQL.Clear;
SQL.Text := 'DELETE FROM Dosage WHERE Piece =' + IntToStr(PIID);
ExecSQL;
end;
end;
------解决方案--------------------
执行两个sql,要用两个query;
否则第二个执行sql语句,第一个就被动变成第二个的结果了
------解决方案--------------------
原因分析:
- Delphi(Pascal) code
Close; SQL.Clear; SQL.Text := 'SELECT ID AS ID FROM Piece WHERE Produce =' + IntToStr(PID); Open; First; while not QryYS.Eof do //这里以未到记录尽头为条件进行循环 begin PIID := FieldByName('ID').AsInteger; Next; if PIID > 0 then begin //像楼上朋友所说,这里应该使用另外一个数据集!! Close; SQL.Clear; SQL.Text := 'DELETE FROM Dosage WHERE Piece =' + IntToStr(PIID); ExecSQL;//这句没有记录返回,从而造成循环条件不再成立! end; end;