마스터 디테일 관계를 트랜잭션 처리할때 마스터키를 자동증가필드로 설정했을경우
디테일쪽에 Append가 안됩니다.
어찌해야할지요...
예를들어 두개의 쿼리를 다음과 같이 마스터 디테일로 엮었을때
query1: 마스터
SQL: select Code1,Name from Table1 // Code1은 Table1의 자동증가필드,프라이머리키
query2: 디테일
SQL: select Code2,Tel,Code1 from Table2 where Code1 = :Code1 // Code2는 Table2의 자동증가필드,프라이머리키
// Code1은 Table2의 포린키, :Code1은 Table1의 프라이머리키
이와 같이 query1과 query2를 마스터디테일 관계로 맹근다음
추가버튼 클릭시 두개의 쿼리를 Append 시킨다음
저장버튼클릭시 아래와 같이하면 디테일(query2)쪽에 인서트가 안됩니다.
아무래도 트랜잭션이 걸려 있는상태에서 마스터쪽의 자동증가키(Code1)가 DB에 적용되어있지 않은상태에서
디테일의 포린키 Code1의값이 부여되어 있지 않아서 인듯 하군요...
만일 마스터의 키값을 임의로 부여하는 방식으로 구현하면 될듯도 싶지만 전 DB의 자체적인 자동증가필드로 사용하려 하거든요..
이럴땐 어떻게 해결해야할지 난감합니다. 답변좀...
DataBase1.StartTransaction;
try
if query1.UpdatesPending = true then
query1.ApplyUpdates;
if query2.UpdatesPending = true then
query2.ApplyUpdates; // query2에 물려있는 query1의 자동증가필드가 DB에 적용이 안되어 포린키값이 널이라는 에러가 뜨네요..
DataBase1.Commit;
except
DataBase1.Rollback;
end;
질문이 좀 허접하네요..