Delphi dbExpress 에는 TUpdateSQL 컴포넌트가 없어요!
2012.03.05 22:52
BDE를 사용하시던 분들이 dbExpress를 사용하다 보면 TUpdateSQL컴포넌트가 없어졌다는 이야기를 하십니다.
단일 테이블에서는 ApplyUpdates를 이용하여 데이터를 저장하는것이 문제가 없지만
JOIN 쿼리를 이용해서 가지고온 데이블에서는 업데이트를 해야하는 필드가 있을 수 있고
업데이트를 하지 말아야할 필드가 있을 수 있습니다.
이때 주로 사용하던것이 TUpdateSQL 컴포넌트 였었는데요.
dbExpress에서는 각 필드별로 업데이트를 지정해 줄 수 있습니다.
아래 그림과 같이 SQLDataSet의 필드 리스트를 열어서 필드를 선택하면
각 필드별로 ProviderFalgs라는 프로퍼티를 확인할 수 있습니다.
필드의 ProviderFalgs는 4개의 자녀 프로퍼티를 가지고 있는데요.
pfInUpdate
pfInWhere
pfInKey
pfHidden
각각의 Check 값에 따라 ApplyUpdates 메소드가 실행될때 Update를 할것인지 하지 않을것인지를
지정해 줄 수 있습니다.
그러면 SQL 문은 어떻게 작성해야 할까요 답은 DataSetProvider의 OnGetTableName와 BeforeUpdateRecord 이벤트를 사용하는 것입니다.
여러 테이블의 조인에서 단일 테이블의 필드가 갱신되어야 하는 경우라면 먼저, 갱신될 필드들을 식별하도록 필드 에디터에서 작성한 개별 필드의 ProviderFlags 속성의 pfInUpDate,pfInWhere를 True로 지정합니다 . 다음으로 테이블 이름을 리턴 할 OnGetTableName 이벤트 핸들러를 생성하면 프로바이더가 자동으로 SQL 문장을 생성합니다.
결과적으로 JOIN SQL을 이용해서 가지고온 테이블에서도 필요에따라 필드별 업데이트를 처리 할 수 있습니다.