2017-10-11 20 views
2

내 응용 프로그램은 소스 연결로 디자인 시간이 TFDConnectionTFDPhysFBDriverLink입니다. 이것은 파이어 버드 임베디드 모드에서 열릴 수도 있고 열리지 않을 수도 있습니다 (그렇다면 FDPhysFBDriverLink.VendorLib := 'fbembed.dll'이 설정됩니다 (32 비트)).두 번째 TFDPhysFBDriverLink 설정 - 가능하고 필요합니까?

나는 파이어 버드는 PC (우리의 설치 공급 fbembed.dll)에 설치되어있는 경우 우리가 모르기 때문에 사용 파이어 버드를 포함해야한다 런타임 대상 TFDConnection을 만들 수 있습니다.

어떻게 설정하나요? 런타임에 다른 TFDPhysFBDriverLink을 만들고 VendorLib을 설정할 수 있지만 FireDAC은 관련 연결이 무엇인지 어떻게 알 수 있습니까? 또는 응용 프로그램에 FDPhysFBDriverLink 하나만 사용할 수 있습니까?

이것은 이전 코드입니다. DirectSQL을 사용하고 있으며, 이것도 대상 데이터베이스에만 적용되는 마법 SDFib.SqlApiDLL := FBEMBED 속성을 설정하는 데 사용됩니다.

답변

1

상황에 따라 최악의 경우는 Firebird가 설치되어있어 하나의 연결이 설치된 서버 인스턴스에 연결되어 있고 다른 하나는 내장 된 서버 인스턴스에 연결됩니다. 그것은 하나의 물리적 드라이버 객체를 가지기에 충분하지만, 더 많은 것을 가지는 데 문제가 없습니다.

그래서, 그 경우에는 실제적인 의미가 없다 (형태 나 고유 이름 데이터 모듈 및 설치의 DriverID 속성 하나 TFDPhysFBDriverLink (즉 어떤 드라이버 기본 드라이버 ID로서 사용되지 않는다)를 삭제하고 Embedded로 표시 이 때 VendorLib을 지정할 때 드라이버를 식별 할 수 있지만 FireDAC은이 속성을 사용하여 기본 라이브러리를로드할지 여부를 결정합니다.

그리고 하나의 연결을 위해 사용자가 정의한 DriverID를 사용하고 다른 하나 개는 사용 대체 자사 BaseDriverID (I 생략 한이 작업에 대한 불필요한 설정)을 사용하여 파이어 버드 드라이버 설정을 기본 :

FDPhysFBDriverLink1.DriverID := 'FBEmbedded'; { ← ID not used by any BaseDriverID } 
FDPhysFBDriverLink1.Embedded := True; { ← not mandatory when VendorLib is specified } 
FDPhysFBDriverLink1.VendorLib := 'C:\fbembed.dll'; { ← client library file name } 

FDConnection1.Params.DriverID := 'FB'; { ← driver's BaseDriverID } 
FDConnection1.Open; { ← this will connect to the installed server } 

FDConnection2.Params.DriverID := 'FBEmbedded'; { ← driver's DriverID } 
FDConnection2.Open; { ← this will connect to the embedded server } 

하지만를 두 개의 별도 드라이버 객체 (기본 드라이버와 같은 기본 설정이있는)와 임베디드 서버를위한 하나의 설치된 서버를 선호합니다. 예 :

FDPhysFBDriverLink1.DriverID := 'FBEmbedded'; { ← ID not used by any BaseDriverID } 
FDPhysFBDriverLink1.Embedded := True; { ← not mandatory when VendorLib is specified } 
FDPhysFBDriverLink1.VendorLib := 'C:\fbembed.dll'; { ← client library file name } 

FDPhysFBDriverLink2.DriverID := 'FBInstalled'; { ← ID not used by any BaseDriverID } 

FDConnection1.Params.DriverID := 'FBEmbedded'; { ← driver 1 DriverID } 
FDConnection1.Open; { ← this will connect to the embedded server } 

FDConnection2.Params.DriverID := 'FBInstalled'; { ← driver 2 DriverID } 
FDConnection2.Open; { ← this will connect to the installed server } 
+0

Embedded 속성의 기능은 무엇입니까? 어떤 문서도 찾을 수 없습니다. (* Embarcadero Technologies는 현재 어떤 추가 정보도 가지고 있지 않습니다 *) –

+0

'VendorLib'가 설정되지 않은 경우'fbclient.dll' 대신'fbembed.dll' 라이브러리 만로드됩니다. 이 경우에는'VendorLib'을 지정하기 때문에 쓸모가 없지만 앞으로 추가 할 수 있도록 사용했습니다 (그리고 드라이버를 식별하는 데 사용할 수 있습니다). – Victoria

+0

좋아,이 작품, 고마워. 두 개의 다른 TFDPhysFBDriverLinks를 사용하고 있습니다. 필자가 지적한 한가지 : 나는 DriverName과 DriverID를 할당해서는 안된다. –