Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

[DocWiki 번역] 메타데이터 쿼리하기 (FireDAC)


Recommended Posts

Docwiki에 있는 "Querying Metadata (FireDAC)"를 번역한 글 (번역일: 2022년 3월 11일)


위로 가기: Working with Metadata (FireDAC)

목차


TFDConnection 사용하기 (Using TFDConnection)

TFDConnection에는 오브젝트 이름 목록을 반환하는 GetXxxxNames 메소드들이 있어서 쉽게 사용할 수 있다.

이 메소드들이 유용한 상황:

  • 애플리케이션에서 오브젝트 이름이 필요한 하는 경우;
  • 애플리케이션에서 이 오브젝트에 대한 추가 정보가 필요하지 않은 경우;

애를 들어, 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 데이터셋의 ConnectionMetaInfoKind 프로퍼티를 설정한다. 옵션으로 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에 포함한다.
fiMetaFetchOptions.Cache에서 배제한다고 해서 해당 메타데이터 캐시를 무효화하지 못한다. 캐시된 모든 메타데이터는 다음에 다시 캐시되기 전까지 캐시에 그대로 남아있다. 특정 오브젝트 캐시 또는 전체 캐시를 새로고침 하려면 TFDConnection.RefreshMetadataCache를 사용한다.

 

현재 카탈로그와 스키마 (Current catalog and schema)

현재 카탈로그와 스키마 이름을 가져오려면, TFDConnection.ConnectionIntf.CurrentCatalogCurrentSchema 를 사용한다. 현재 카탈로그 또는 스키마를 다른 것으로 바꾸려면 이 프로퍼티에 새로운 값을 할당한다.

MetaCurCatalogMetaCurSchema 를 사용하면 데이터베이스 세션이 반환한 정보를 덮어쓸 수 있다. 일부 데이터메이스에서 이 파라미터들을 사용할 때에는 정확한 값을 명시해야 할 수도 있다. API가 정확하지 않은 것들을 반환하기도 해서이다.

기타 자료

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

 공유하기

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.