Kori 3월 31일, 2022에 포스트됨 공유하기 3월 31일, 2022에 포스트됨 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)을 수행한다. 예를 들면, TFDQuery의 Active 프로퍼티를 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이 자동으로 이 로그인 대화창을 불러낸다. 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)된다. 명시적으로 종료하기: TFDCustomConnection.Connected를 False로 지정한 경우 암묵적으로 종료하기: 연결(connection) 오브젝트를 사용하는 활성화된 명령(active command)이 더이상 없고 ResourceOptions.KeepConnection이 False인 경우. FireDAC은 연결을 종료하기 전에 만약 활성화된 트랜젝션이 있으면 그 트랜젝션을 끝낸다. 이 액션(action)을 제어하려면, TxOptions.DisconnectAction을 사용한다. 또한, 종료괴기 전에는 TFDCustomConnection.BeforeDisconnect 이벤트 핸들러가 발효된다. 연결이 종료된 후에는 AfterDisconnect 이벤트 핸들러가 발효된다. 5 기타 참고 (See Also) [DocWiki 번역] 에러 핸들링하기 [DocWiki 번역] 연결을 정의하기 [DocWiki 번역] 연결을 오프라인 모드으로 하기 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.