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 문장을 생성합니다.


각 레코드에 대하여 여러 테이블을 갱신해야 한다면 BeforeUpdateRecord 이벤트 핸들러를 DataSetProvider에 추가합니다. 이벤트 핸들러에서는 각 테이블에 대한 SQL 문장을 발생시켜 실행할 수 있습니다. BeforeUpdateRecord 이벤트 핸들러도 갱신하기 전에 각 레코드를 검사하고 필드의 값을 변경할 장소를 제공합니다. 예외를 발생시켜서 갱신을 전체적으로 봉쇄할 수도 있습니다.


결과적으로 JOIN SQL을 이용해서 가지고온 테이블에서도 필요에따라 필드별 업데이트를 처리 할 수 있습니다.



ProviderFlags.png

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15686
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 14105
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16636
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22217
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23518
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 19062
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39479
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174891
63 이 달의 기술자료 - 2019년 08월 험프리 2019.07.26 330
62 윈도우 10 룩앤필을 바로 적용할 수 있는 윈도우 10 VCL 컨트롤 소개 file 험프리 2020.01.15 329
61 델파이로 개발된 '3D Train Studio'가 BizWireTV의 'Startup Standout' 분야에 선정되었습니다. file 관리자 2017.03.14 325
60 [업데이트][핫픽스][10.1 베를린] iOS 32비트 디버거 핫픽스 험프리 2016.12.22 324
59 IBLite 라이브러리 및 라이선스 배포하기 관리자 2020.04.08 322
58 RAD서버에서 데이터를 JSON으로 어떻게 오픈할 수 있을까요? (JSONValue와 JSONWriter 활용하기) 관리자 2020.01.21 320
57 CodeRage XI 온라인 컨퍼런스 안내 file 험프리 2016.11.15 320
56 [UX Summit 요약] 멀티플랫폼 앱에 가장 효과적인 UX 디자인 (Effective UX Design for Multiplatform Apps) 관리자 2020.11.10 319
55 Fire Power X - RAD스튜디오 10.4 버전에 최적화된 파이어몽키용 컴포넌트 스위트 관리자 2020.08.28 319
54 2020년 5월 GM 업데이트 - 여러분의 비즈니스에 길을 열어주세요! 관리자 2020.05.26 318
53 최신 C++ 표준으로 최신 윈도우 지원까지 관리자 2019.09.10 318
52 [10.3 리오][업데이트 2] C++17이 윈도우 64-bit에서도 지원됩니다. file 관리자 2019.07.25 317
51 [발표자료] 20171116 델파이/C++빌더 의료 개발 세미나 관리자 2017.11.17 317
50 새해 목표: LEARN, TEACH, REPEAT. 관리자 2021.01.05 316
49 C++ 개발자를 위한 파이어닥(FireDAC) 시작하기 관리자 2020.01.14 316
48 함께 축하해요! 델파이 25주년!! #Delphi25th file 관리자 2020.02.14 315
47 이 달의 기술자료 - 2019년 09월 file 험프리 2019.08.28 315
46 [엠바카데로 온라인 세미나] 10.3 RIO를 확인하세요! 관리자 2018.11.14 314
45 C++빌더 마이그레이션, C++ 프로젝트를 간편하게 업데이트 하는 방법 관리자 2021.01.19 312
44 JomiTech – TwineCompile (C++빌더용) 관리자 2020.09.01 311