Kori 3월 15일, 2022에 포스트됨 공유하기 3월 15일, 2022에 포스트됨 Docwiki에 있는 "Unique Identifying Fields (FireDAC)"를 번역한 글 (번역일: 2022년 3월 15일) 위로 가기: Editing Data (FireDAC) 일반사항 (Generalities) 고유 식별 필드(unique identifying columns)는 데이터셋에 있는 각 레코드를 식별할 수 있도록 하는 고유한 컬럼(들) 세트이다. 만약 데이터셋이 단일 테이블 SELECT의 결과라면, 이 데이터셋의 고유 식별 필드는 FROM 뒤에 적힌 테이블의 프라이머리 키 (PK)이다. 종종 자동-증가 필드가 테이블의 프라이머리 키 (PK)가 된다. 사용 (Usage) 고유 식별 필드(unique identifying columns)는 WHERE 구문을 구성할 때 사용된다. 데이터셋에서 업데이트(Edit/Post)와 삭제(Delete)를 전달(Post)할 때, 이것은 UpdateOptions.UpdateMode가 upWhereKeyOnly 또는 upWhereChanged 일 때 그렇다; 현재 데이터셋을 새로고침 할 때 (RefreshRecord); 지연된 "BLOB(FetchBlobs) 값" 또는 "연결된 디테일 데이터셋(FetchDetails)"을 SELECT할 때 사용된다.. 제공 (Provision) TFDQuery, TFDTable, TFDMemTable, TFDCommand는 자동으로 고유 식별 필드(mkPrimaryKeyFields)를 추출한다. 이때 SELECT ... FROM ...구문에 있는 주요(첫번째) 테이블에서 가져온다. 이것은 fiMeta가 FetchOptions.Items에 포함되어 있을 때 그렇다. 주의사항: mkPrimaryKeyFields 쿼리는 시간이 많이 걸릴 수 있다; 애플리케이션에서 직접 고유 식별 컬럼을 명시해야 하는 경우도 있다. FireDAC이 고유 식별 컬럼을 올바로 결정하지 못하는 경우에 그렇다. 고유 식별 컬럼을 직접 명시하려면, fiMeta를 FetchOptions.Items에서 빼낸 후 다음 옵션 중 하나를 사용한다. UpdateOptions.KeyFields에 ';'로 구분된 컬럼 이름 목록을 지정한다; pfInKey를 해당 TField.ProviderFlags 프로퍼티에 넣어준다. 애플리케이션에서 영속 필드 (Persistent Field)를 생성하면, 처음에는 TField.ProviderFlag가 올바로 설정된다. 그 이후에는 DB 구조 또는 쿼리가 변경되어도 자동으로 필드가 설정되지 않는다. 이 경우에는 개발자가 수작업으로 ProviderFlag를 업데이트 하여 고유 식별 컬럼 목록을 조정해야 한다. 만약 프라이머리 키 (PK)가 여러 필드로 구성된다면, 해당 필드가 모두 영속 필드 (Persistent Field)에 포함되어 있어야 한다. 행 식별 컬럼 (Row Identifying Columns) 대안으로, SELECT 목록에 행 식별 컬럼 (Row Identifying Columns)이 포함될 수 있다. FireDAC은 이런 컬럼을 발견하면, mkPrimaryKeyFields 메타데이터를 추출하지 않고, 행 식별 컬럼을 사용한다. 이것을 지원하는 DBMS는 다음과 같다. DBMS 행 식별 컬럼 (Row Identifying Columns) Firebird DB_KEY Informix ROWID Interbase DB_KEY / RDB$DB_KEY Oracle ROWID PostgreSQL OID. 테이블이 OID와 함께 생성되어야 한다. SQLite ROWID 예를 들어, Oracle에서 : SELECT T.*, ROWID FROM Orders T 기타 자료 (See Also) Update Command Generation [DocWiki 번역] 자동-증가 필드 (FireDAC) 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.