Kori 3월 11일, 2022에 포스트됨 공유하기 3월 11일, 2022에 포스트됨 Docwiki에 있는 "Querying Metadata (FireDAC)"를 번역한 글 (번역일: 2022년 3월 11일) 위로 가기: Working with Metadata (FireDAC) 목차 TFDConnection 사용하기 (Using TFDConnection) TFDMetaInfoQuery 사용하기 (Using TFDMetaInfoQuery) 메타데이터 캐싱 (Metadata caching) 현재 카탈로그와 스키마 (Current catalog and schema) 기타 자료 TFDConnection 사용하기 (Using TFDConnection) TFDConnection에는 오브젝트 이름 목록을 반환하는 GetXxxxNames 메소드들이 있어서 쉽게 사용할 수 있다. GetCatalogNames - 카탈로그 목록; GetSchemaNames - 스키마 목록; GetTableNames - 테이블과 뷰 목록; GetFieldNames - 테이블 필드 목록; GetKeyFieldNames - 테이블 PK(프라이머리 키) 목록; GetGeneratorNames - 제너레이터(generator)/시퀀스(sequence) 목록; GetPackageNames - 패키지 목록; GetStoredProcNames - SP (저장 프로시저) 목록; 이 메소드들이 유용한 상황: 애플리케이션에서 오브젝트 이름이 필요한 하는 경우; 애플리케이션에서 이 오브젝트에 대한 추가 정보가 필요하지 않은 경우; 애를 들어, GetTableNames 메소드는 테이블(table), 뷰(view), 씨노님(synonym) 이름을 현재 데이터베이스와 스키마에서 가져온다. 호출하는 코드는 다음과 같다. FDConnection1.GetTableNames('Northwind', 'dbo', '', Memo1.Lines); ACatalogName 과(또는) ASchemaName을 아규먼트로 전달하면, 특정 카탈로그 와(또는) 스키마에 해당하는 목록만 받을 수 있다. 별도로 지정하지 않으면, "보이는" 또는 현재 데이터베이스/스키마 안에 있는 모든 오브젝트의 목록이 반환된다. 그 범위는 DBMS에 따라 다르다. (MS 액세스 같은) 일부 DBMS에서는 스키마/카탈로그를 지원하지 않으므로 이 아규먼트를 명시하면 에러를 반환한다. 또한, AScope 아규먼트를 사용하면 받게 될 목록을 해당 오브젝트 범위(scope)를 기반으로 제한할 수도 있다. APattern 아규먼트는 오브젝트 이름을 LIKE 검색할 때 사용할 수 있다. TFDCustomManager 클래스에도 유사한 메소드가 있다. 더 자세한 데모: FireDAC\Samples\Comp Layer\TFDConnection\GetFieldNames TFDMetaInfoQuery 사용하기 (Using TFDMetaInfoQuery) TFDMetaInfoQuery는 데이터셋 컴포넌트이며, 메타데이터 목록을 쿼리하고 탐색할 수 있다. 사용하려면, TFDMetaInfoQuery 데이터셋의 Connection과 MetaInfoKind 프로퍼티를 설정한다. 옵션으로 CatalogName, SchemaName, BaseObjectName, ObjectName 프로퍼티를 설정할 수도 있다. 그 다음 TFDMetaInfoQuery 데이터셋을 오픈한다. 테이블 목록을 가져오는 코드 FDMetaInfoQuery1.Connection := FDConnection1; FDMetaInfoQuery1.MetaInfoKind := mkTables; FDMetaInfoQuery1.Open; TFDMetaInfoQuery 데이터셋의 구조에 대한 설명는 Metadata Structure 주제를 참고한다. 만약 DBMS에서 지원하지 않는 특정 메타데이터 타입을 지정하면 (예: MS-SQL 서버는 mkGenerators를 지원하지 않는다), 빈 데이터셋이 반환된다. 메타데이터를 담는 TFDMetaInfoQuery 데이터셋은 읽기-전용 이며, 편집할 수 없다. 메타데이터 캐싱 (Metadata caching) 가져온 메타데이터는 각 Connection 당 하나씩 FireDAC에 캐시된다. 이것을 다루려면 fiMeta를 FetchOptions.Cache에 포함한다. fiMeta를 FetchOptions.Cache에서 배제한다고 해서 해당 메타데이터 캐시를 무효화하지 못한다. 캐시된 모든 메타데이터는 다음에 다시 캐시되기 전까지 캐시에 그대로 남아있다. 특정 오브젝트 캐시 또는 전체 캐시를 새로고침 하려면 TFDConnection.RefreshMetadataCache를 사용한다. 현재 카탈로그와 스키마 (Current catalog and schema) 현재 카탈로그와 스키마 이름을 가져오려면, TFDConnection.ConnectionIntf.CurrentCatalog 와 CurrentSchema 를 사용한다. 현재 카탈로그 또는 스키마를 다른 것으로 바꾸려면 이 프로퍼티에 새로운 값을 할당한다. MetaCurCatalog 와 MetaCurSchema 를 사용하면 데이터베이스 세션이 반환한 정보를 덮어쓸 수 있다. 일부 데이터메이스에서 이 파라미터들을 사용할 때에는 정확한 값을 명시해야 할 수도 있다. API가 정확하지 않은 것들을 반환하기도 해서이다. 기타 자료 Metadata Structure [DocWiki 번역] 고유 식별 필드 (FireDAC) 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.