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

[DocWiki 번역] TFDManager와 TFDConnection 질문과 답변 (FireDAC)


Recommended Posts

Docwiki에 있는 "TFDManager and TFDConnection Questions (FireDAC)"을 번역한 글: 번역일: 2022년 4월 18일

위로 가기: [DocWiki 번역] FAQ (FireDAC)

 

TFDManager와 TFDConnection 질문과 답변을 정리한 목록이다.

 

Q: 나는 TFDManager가 있는 기반 데이터 모듈(base data module) 클래스가 있다. 자손(descendant) 클래스를 만들려고 하는데,  'Application must have only one FDManager' 에러가 발생한다. 뭐가 잘못되었나?

A: 애플리케이션 안에 FDManager은 오직 하나만 있을 수 있다. 당신의 클래스 안에서 명시적으로 FDManager를 생성하지 말고, 싱글톤(singleton) 오브젝트로 참조하여 FDManager의 함수를 사용하라.

 

Q: 내 프로젝트 그룹(project group) 안에는 델파이 프로젝트들(애플리케이션들)이 여러개 들어있다. 각 프로젝트 별로 저마다 데이터모듈(DataModule)과 FDManager가 있다.이 데이터모듈을 (복사하거나 비교하기 위해) 하나 이상 같이 열려고 하면, 애플리케이션에서는 FDManager를 오직 하나만 가질 수 있다는 에러가 발생하고 바로 데이터 모듈 하나가 제거된다. 

A: TFDManager가 정말 필요한가? 애플리케이션에서 TFDManager를 명시적으로 생성할 필요는 없다. TFDManager는 옵션과 구성 파일(configuration file)을 디자인-타임 즉 개발화면에서 설정하기 위해 필요한 것이다.

Q: 내 FDManager들이 자꾸 사라져서 새로 만들어야 한다. 고칠 방법이 있나?

A: 고칠 방법이 없다. 그이유는 TFDManager는 디자인-타임(개발 중)이나 런-타임(실행 중)에 오직 하나만 생성되기 때문이다. 만약 TFDManager가 여러개 있으면, FireDAC은 어느 TFDManager의 설정을 따라야 할 지를 알 수 없게 된다. 맨 위의 질문을 참고  

Q: FireDAC은 연결 풀링(connection pooling)을 지원하나?

A: 그렇다. FireDAC은 연결 풀링을 지원한다. 대개 연결 풀링이란 열려있는(open) "물리적" 연결들을 풀(pool)에 모아두고, TFDConnection.Connected가 True로 지정되면 FireDAC은 그 풀(pool) 안에서 "물리적" 연결 하나를 가져다 쓴다.  TFDConnection.Connected가 False로 지정되면, 그 "물리적" 연결은 닫힘(close)이 되고, 풀(pool) 안으로 돌아간다. 

FireDAC에서 연결 풀링을 사용하려면, 연결 정의(connection definition)에서 Pooled=True를 추가하기만 하면 된다. 다른 조치는 필요없다. "멀티쓰레딩(Multithreading)"에 보다 자세히 설명되어 있다.

Q: 연결 에디터(Connection Editor) 창은 FDPhysFBDriverLink1.VendorLib을 무시하는 것 같고 하드-코딩된 드라이버를 사용한다.

A: 해당 드라이버를 사용하도록 VendorLib을 지정하기는 첫 연결을 하기 전에 해야 한다. 연결이 설정된(established) 다음에, 해당 DBMS 클라이언트가 로드된다.

디자인-타임에, TFDPhysXXXDriverLink의 프로퍼티들이 사용되도록 분명히 하려면, 데이터 모듈(data module) / 폼(form)을 생성하는 순서 상 TFDPhysXXXDriverLink가 가장 먼저인지를 확인하라. 그리고 원한다면 델파이 IDE를 다시 시작하라.

런-타임에, 해당 드라이버 링크의 Release 메소드를 사용하라.

FDConnection1.Close;
...
FDConnectionN.Close;

FDPhysFBDriverLink.VendorLib := 'c:\fbclient.dll';
FDPhysFBDriverLink.Release;

FDConnection1.Open;
...
FDConnectionN.Open;

또한, 가상 드라이버(virtual driver)를 정의하는 방법도 있다. 자세한 내용은 "드라이버 구성하기(Configuring Drivers)"를 참고하라. 예를 들면,

[FB_Embedded]
BaseDriverID=FB
VendorLib = C:\fb\fbembed.dll

디자인-타임에 DriverID로 FB_Embedded 드라이버를 사용한다. 런-타임에는 FDDrivers.ini를 사용하거나 또는 TFDPhysXXXDriverLink를 구성하라.

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

이 토의에 참여하세요

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

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...

중요한 정보

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