Master/Detail에서 입력할때의 처리문제 입니다..
Master 한건의 데이타에 대해 Detail이 여러건이 존재합니다..
Master은 Edit로 입력을 받고.. Detail은 DBGrid에 입력을 하구 확인 버튼눌러 한번에
인서트 처리를 할려구 합니다.. 프로시져를 작성해보았는데 master을 입력한후
master의 키(PK)를 얻어서 이키를 detail에 Insert를 하는것입니다..
문제는 Master한건에 대해 detail이 한건의 데이타면 문제가 없는데,, 여러건이 존재하므로 여러건의데이타를 DBgrid에 입력후 한번에 Insert하는 방법이 알고 싶습니다..
물론 프로시져를 사용하므로 SQL로 처리를 해야만 합나다... 저의 개인적인 생각으로는
DBGrid에 입력된행의 갯수를 알아내어서 이갯수를 프로시로 가지고가서 detail의 Insert
부분을 그 갯수만큼 루프를 돌려주면 될것같은데.. 몇가지 문제가 있니다..
첫번째는 DBGrid에서 Post되지도 않은 행의 갯수를 어
제 생각엔 캐쉬업데이트 기능을 모르시는거 같아서 생긴 고민인거 같은데요.
일단 마스터에 연결된 쿼리1개와 디테일에 연결된 쿼리1개 ,,기본적으로 두개의
쿼리의 속성중 CACHEDUPDATE란게 있을꺼에여..그걸 TRUE로 하시구염
그리고 마스터의 키값을 DETAIL에 넣는 문제는여,
DETAIL QUERY의 BEFORE POST이벤트에 마스터의 키필드 값을
디테일 쿼리의 필드에 할당하시면, := 아시져?
그럼 디테일필드 각각에 마스터의 키값이 자동으로 들어간답니다.
그리구, 저장버튼을 눌렀을때요 마스터와 디테일이 한꺼번에 저장되면 되잖아염
그럼 저장버튼의 클릭이벤트에다가
마스터 디테일 두개의 쿼리가 인서트나 에디트 상태인지 체크하고 POST명령어를
일단 써주시구염,
그다음
Database1.ApplyUpdates([Query1,Query2]);
이런 식으로 써주셔도 되구염, 이러면 그 쿼리들에 연결된 데이터베이스 컴포넌트를
이용해서 트랜잭션 처리가 다 되는거구염.
아니면 QUERY1.ApplyUpdates ;이런식으로 두개를 각각 써주시고
트랜잭션 문장을 구성해주시면.. (STARTTRANSACTION...)
완성인데여?