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

[DocWiki 번역] 연결을 설정하기 (FireDAC)


Recommended Posts

Docwiki에 있는 "Establishing Connection (FireDAC)"을 번역한 글 (번역일: 2022년 3월 31일)

위로 가기: [DocWiki 번역] 연결(connection)을 가지고 작업하기 (FireDAC)

FireDAC을 사용하여 DBMS 연결을 열기(open)와 닫기(close) 하는 방법을 설명한다. FireDAC에서는 TFDConnection 컴포넌트를 사용하여 데이터베이스에 대한 연결을 오픈(open)할 수 있다.

 

1 일반 (General)

연결 정의(connection definition)를 만들고 난 후에, 그 연결을 이용하여 데이터베이스 연결 설정을 할 수 있다. 대체로, 2가지 방법이 있다.

  • 명시적 연결 설정: TFDCustomConnection.Connected를 True로 지정하거나, 그 연결에서 Open 메소드를 호출한다.
  • 암묵적 연결 설정: DBMS에게 이야기를 걸어야 하는 액션(action)을 수행한다. 예를 들면, TFDQueryActive 프로퍼티를 True로 지정한다. 이때 주의할 점은 ResourceOptions.AutoConnect가 반드시 True로 지정된 상태에서 수행해야 한다는 점이다. 그렇지 않으면 예외(exception)가 발생한다.

FireDAC에는 Connected 프로퍼티 이외에도 추가로 여러가지 TFDCustomConnection.Open 메소드가 있다. 이 메소드에서는 FireDAC 연결 문자열(connection string)을 사용할 수 있다. 이 문자열의 형식은 param=value[;...param=value]이다. 예를 들면,

FDConnection1.Open('DriverID=SQLite;Database=c:\test.sdb;Password=12345');

연결이 오픈(open)되기 전에는 BeforeConnect 이벤트가 발효(fire)된다. 연결이 설정되고 나면 AfterConnect 이벤트가 발효(fire)된다.

2 연결 에러 핸들링하기 (Handling Connection Errors)

연결 설정에 실패하면, 애플리케이션은 실패를 분석할 수도 있을 것이다. 다음 방식 중 하나를 사용한다.

  • TFDCustomConnection.OnError 이벤트 핸들러를 사용하기: 암묵적으로 연결을 오픈할 때 더 알맞은 방식이다.
  • try ... except ... end 구문 사용하기: 명시적으로 연결을 오픈할 때 가장 좋은 방식이다. 예를 들면,
uses
  FireDAC.Stan.Consts, FireDAC.Stan.Error;
...
try
  FDConnection1.Connected := True;
except
  on E: EFDException do
    if E.FDCode = er_FD_ClntDbLoginAborted then
      ; // 사용자가 로그인 대화창에서 Cancel 버튼을 눌렀다
  on E: EFDDBEngineException do
    case E.Kind of
    ekUserPwdInvalid: ; // user name과 password가 맞지 않음
    ekUserPwdExpired: ; // user password가 만료되었음
    ekServerGone: ;     // DBMS에 접근할 수 없음 어떤 이유가 있을 것임
    else                // 기타 이슈
    end;
end;

주의: 로그인 대화창은 ekUserPwdInvalid 에러를 자동으로 대처한다. 즉 사용자에게 인증 정보를 다시 입력하라고 알려준다. 이 자동 대처 기능을 끄려면, TFDGUIxLoginDialog.LoginRetries를 -1로 지정한다. ekUserPwdExpired 에러에도 역시 자동으로 대처한다. 즉 password를 다시 입력하라고 알려준다.

또한, 만약 연결 복구 (connection recovery)가 설정되어 있으면, 에러가  ekServerGone 유형일 때 연결은 처음에 오프라인 상태가 된다. 대안으로는,  TFDCustomConnection.Ping 메소드를 사용하여 ekServerGone 에러를 피하고, DBMS가 사용할 수 있는 상태일 때 연결을 활성화 할 수 있다.

자세한 내용은 "[DocWiki 번역] 에러 핸들링하기"를 참고한다.

 

3 로그인 대화창 사용하기 (Using the Login Dialog)

GUI 애플리케이션에서는 TFDGUIxLoginDialog 컴포넌트를 사용하여 최종 사용자가 데이터베이스 인증 정보를 입력하도록 구현할 수 있다. 다음 중 한가지 방식으로 로그인 대화창을 연결할 수 있다.

  • TFDGUIxLoginDialog 컴포넌트를 폼 위에 올려둔다. 설정을 따로 할 필요가 없다. 올려놓은 대화창은 이 애플리케이션에서 기본 로그인 대화창이 된다. 
  • TFDGUIxLoginDialog 컴포넌트를 폼 위에 올려둔다. 그리고 나서 TFDCustomConnection.LoginDialog 프로퍼티에 이 대화창을 지정한다. 해당 연결(connection)은 이 대화창을 프라이빗하게 사용할 수 있다. 

 LoginPrompt = True이면,  TFDCustomConnection이 자동으로 이 로그인 대화창을 불러낸다.

FireDACLoginFDDemo.png

TFDGUIxLoginDialog.VisibleItems 프로퍼티를 사용하면, 최종 사용자에게 어떤 연결 정의 (connection definition) 파라미터가 보여지는 지를 정할 수 있고 이름을 지정할 수 있다. 마지막 옵션은 로그인 대화창을 현지화 할 때 사용한다. 예를 들어, 독일어 SQL 서버 개발자라면 다음과 같이 명시할 것이다.

with FDGUIxLoginDialog1.VisibleItems do begin
  Clear;
  Add('Server');
  Add('User_name=Benutzer');
  Add('Password=Kennwort');
  Add('OSAuthent');
end;
FDConnection1.LoginDialog := FDGUIxLoginDialog1;
FDConnection1.Connected := True;

DBMS에서 password 기간 만료를 지원한다면, password가 만료되고, TFDGUIxLoginDialog.ChangeExpiredPassword가 True 인 경우, 로그인 대화창은 새 password를 요구한다.

4 연결 종료하기 (Closing Connection)

다음 상황 중 하나에 해당하면 연결이 종료(close)된다.

FireDAC은 연결을 종료하기 전에 만약 활성화된 트랜젝션이 있으면 그 트랜젝션을 끝낸다. 이 액션(action)을 제어하려면, TxOptions.DisconnectAction을 사용한다.

또한, 종료괴기 전에는 TFDCustomConnection.BeforeDisconnect 이벤트 핸들러가 발효된다. 연결이 종료된 후에는 AfterDisconnect 이벤트 핸들러가 발효된다.

 

5 기타 참고 (See Also)

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

이 토의에 참여하세요

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

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

중요한 정보

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