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 15498
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13974
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16508
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22066
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23289
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18934
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39275
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174737
30 [델파이 샘플 코드] 안드로이드, iOS, OSX, 윈도우, 리눅스, HTML5 관리자 2019.11.13 674
29 가장 강력한 ‘데이터베이스 연동’ 기능을 자체적으로 제공하는 프레임워크는? (델파이 VS. WPF VS. ELECTRON) 관리자 2021.03.04 670
28 델파이, C++빌더의 윈도우10과 High DPI 디스플레이 지원 김원경 2020.02.28 669
27 리펙토링 1-클래스, 정적메소드, 속성, 필드 이동하기 file 김원경 2017.02.23 651
26 [고객 사례- 의료, 델파이] 의료용 소프트웨어(폐활량&심전도 체크) - Advanced Spirometer and ECG 관리자 2019.10.25 647
25 [고객 사례- 금융, 델파이] 주식, 화폐 등 금융 정보 분석 소프트웨어 - 게임스탑, 비트코인, 아마존, 구글 등 관리자 2021.02.04 628
24 [DelphiCon 요약] 델파이 코드 빠르게 작성하기 (Code Faster in Delphi) 관리자 2020.12.22 611
23 델파이 코드 컨버전 빠르게 완료하기 관리자 2019.11.06 600
22 델파이 개발자를 위한 파이썬 file 관리자 2020.09.23 569
21 리팩토링 2-수퍼 클래스(인터페이스) 추출하기 file 김원경 2017.02.23 552
20 [다시보기] RAD Studio 10 시애틀 딥다이브 세션 다시보기(영문) Humphery 2015.10.02 552
19 [고객 사례- 델파이, 교육] 교육용 프로그래밍 도구 – DEVFLOWCHARTER 관리자 2021.02.19 540
18 NEW! 델파이 오브젝트 파스칼 스타일 가이드 관리자 2021.05.04 512
17 델파이 개발자용 웹 개발 기술들 비교 및 평가 (Evaluating Web Development Frameworks for Delph) file 관리자 2020.11.17 507
16 [오브젝트 파스칼을 처음 접하는 사람들을 위한] 무료 튜토리얼 비디오 (DEREK BANAS) 관리자 2021.05.25 506
15 머신 러닝: 윈도우 앱에 적용하는 5가지 방법(파이썬과 델파이) 관리자 2021.04.30 502
14 델파이용 볼드(BOLD FOR DELPHI) 오픈 소스 공개! 관리자 2020.09.25 485
13 [고객사례-솔루션, 델파이] SQLGate - 데이터베이스 관리/개발 IDE 관리자 2019.12.19 476
12 ‘장기 활용 가능성’이 가장 뛰어난 프레임워크는? (델파이 VS. WPF VS. ELECTRON) 관리자 2021.02.01 463
11 [10.3 리오][업데이트 2] 델파이에서 맥OS 64-bit 애플리케이션 개발이 가능합니다. 관리자 2019.07.25 442