안녕하세요
수고 많습니다.
아래와 같은 내용때문에 문의 합니다.
Bill_No Seq Name Q'ty
1 001 Lee 10
2 002 kim 20
3 003 cho 20
3 003 Lee 10
3 003 kang 40
4 004 park 50
5 005 lee 20
품에 Query,UpDateSQL,DataSource컴포넌트를 사용하고 있습니다.
Query 컴포넌트에는
select * from forder
where bill_no=:bill_no and Fact_Name <> '' and Matr_CostPr <> 0
이렇게 되어있습니다.
그리고 UpDateSQL에 DeleteSQL에는
delete from forder
where BILL_NO = :OLD_BILL_NO and SEQ = :OLD_SEQ(중복 가능합니다.)
이렇게 되어 있습니다.
Bill_No와 SEQ 유일한 값일때는 삭제가 잘 되입니다.
그런데 값이 여러개 중복 될때 삭제을 하면 Error가 발생 합니다.
QDetail :Update Failed 이렇게 나타납니다.
중복 되는 데이타는 DBGrid일때 어떻게 삭제 해야하는지 알고 싶습니다.
작업을 많이 해서 StringGrid로 되돌아 못갑니다.
많은 답변을 부탁 드립니다.
감사 합니다.
아래는 작업 내용 입니다.
procedure TfFOrCha.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key<>VK_Delete then exit;
if Application.MessageBox('Are you sure delete?',
'Confirm...', mb_OKCancel + mb_DefButton1 +mb_ICONQUESTION) =idcancel then
exit;
try
Dm1.DataBase1.StartTransaction;
with QDetail do
begin
Delete;
ApplyUpdates;//이부분에서 Update Failed에러가 발생합니다.
end;
Dm1.DataBase1.Commit;
except
QDetail.Cancel;
Dm1.DataBase1.RollBack;
Application.MessageBox(PChar('Data Delete Failure... Please Retry!!!'),
'Confirm',mb_Ok+mb_iconwarning);
end;
end;
이것은 케시를 사용할때 적용 됩니다.
UpdateSQL을 하용 했다면 TTable이라고
생각 하고 하십시오...
그리고 이건 제 경험입니다.
네트웍 프로그램이라면 그냥 TQuery만가지고
프로그램 하십시오.. 그렇지 않으면 네트웍에
부하를 많이 줍니다. UpdateSQL은 실시간으로
움직이거든요..