안녕하세요. 또 지영이 입니다.
Tdatabase의 ApplyUpdates메소드를 사용하다가 문제에 봉착해서
또 질문 드립니다....
중간에 한개의 새로운 레코드가 삽입되었을때 삽입된 레코드 다음의
레코드들의 SN의 값을 +1하여 전체적으로 볼때 레코드의 SN이
가지런하게 일련번호를 유지하도록 만드려고 합니다.
DB는 오라클을 쓰고 있구요..
폼에는 DataBase1과 Query1,DataSource1,UpdateSQL1이 있습니다.
Query1을 한개씩 수정,삽입,삭제 할때는 저장할때 아무런 문제가 발생하지
않는데..
문제는..
loop로 처리하였을때 Update Failed라는 에러가 발생합니다.
언젠가 봉착했던 문제인데 결국 해결을 못하고 넘어갔었지만
오늘에서는 결국 집에도 못가고..
아시는 분 계시면 지영이 집에 보내준다는 넓은 마음으로 도와주셔요..흑..
with Query1 do
begin
while not EOF do
begin
sn := FieldByName('SN').AsInteger;
if sn > seq_number then
begin
Edit;
FieldByName('SN').AsInteger := sn + 1;
Post;
end;
Next;
end;
Database1.ApplyUpdates([Query1]);
end;
> loop로 처리하였을때 Update Failed라는 에러가 발생합니다.
>
> with Query1 do
> begin
> while not EOF do
> begin
> sn := FieldByName('SN').AsInteger;
> if sn > seq_number then
> begin
> Edit;
> FieldByName('SN').AsInteger := sn + 1;
> Post;
> end;
> Next;
> end;
> Database1.ApplyUpdates([Query1]);
> end;
새벽부터 고생하십니다...
제가 쓰는 로직하고는 많이 다르네요.
database1.starttransaction;
try
with Query1 do
begin
while not EOF do
begin
sn := FieldByName('SN').AsInteger;
if sn > seq_number then
begin
Edit;
FieldByName('SN').AsInteger := sn + 1;
ApplyUpdates; // 바로바로 써주니까 에러가
end; // 안나는건지도 ^^;
Next;
end;
end;
database1.commit;
except
Query1.Cancelupdates;
database1.rollback;
end;
이렇게 쓸때는 다중루프에서도 별 문제없이 수행되고 있습니다만.