FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[1747] Re:[질문] Firebird embed 를 IBDatabase컴포로 접속 하는 방법..
박지훈.임프 [cbuilder] 2456 읽음    2006-01-05 13:16
아마도 gds32.dll 때문인 거 같네요. 원래 gds32.dll는 파이어버드의 이전 버전 격인 인터베이스의 클라이언트 dll입니다.
그리고 파이어버드 서버의 클라이언트 dll은 fbclient.dll이고요.
그런데 파이어버드가 설치시에 하위호환성 때문에 fbclient.dll을 gds32.dll로 리네임해서 복사해두기도 합니다.

그런데 gds32.dll은 인터베이스나 파이어버드를 단 한번이라도 깔았거나 하면 윈도우의 시스템 디렉토리에 이 gds32.dll이
복사되어 버립니다. 따라서 여러 버전들 사이에 환경변수 경로의 문제가 생길 수 있습니다.
델파이나 C++빌더를 설치하면서도 인터베이스는 무심코 같이 설치할 수 있고...

파이어버드 임베디드 서버의 경우에는 임베디드 서버 자체가 클라이언트 dll을 대신하는 것이므로 fbembed.dll입니다.
따라서 파이어버드에 연결할 때 클라이언트 dll로 이 fbembed.dll을 가리키도록 해야 합니다.
IBDatabase를 말씀하시는 걸로 봐서는 InterBaseExpress를 쓰시는 거 같은데.. dbExpress에서는 클라이언트 dll을
지정할 수 있게 되어 있는데, InterBaseExpress에서는 IBHeader.pas의 소스에 다음과 같이 const로 박혀있지요.

const
...
{$IFDEF MSWINDOWS}
  IBASE_DLL = 'gds32.dll'; {do not localize}
{$ENDIF}
{$IFDEF LINUX}
  IBASE_DLL = 'libgds.so.0'; {do not localize}
{$ENDIF}

그래서, fbembed.dll을 그대로 가리킬 수 없으므로 이걸 gds32.dll로 이름을 바꿔주어야 합니다.
"실행화일 경로 아래에 gds32.dll(firebird embed용..)를 복사"했더니 잘된다는 것이 이런 이유 때문입니다.

파이어버드 임베디드 서버를 쓰시려면 그렇게 하시는 것이 당연하다고 생각하시면 됩니다.
여러 애플리케이션이 동시에 접속하는 일반 디비 서버가 아니라 단일 애플리케이션이 내부적으로만 접근하기 위한
임베디드 서버니까 당연한 겁니다.

만약 런타임에는 잘 돌아가는데 디자인타임에는 안된다면, 윈도우 시스템 디렉토리(혹은 경로가 설정된 다른 디렉토리)에
인터베이스나 파이어버드의 gds32.dll이 있기 때문입니다. "not a valid database"라는 메시지가 나왔다면, 파이어버드
서버의 gds32.dll이 아니라 인터베이스의 gds32.dll일 가능성이 크겠네요.

이제... 파일찾기로 gds32.dll을 찾아낸 후에 그 파일을 임베디드의 fbembed.dll로 덮어씌워버리세요.
이 파일만 복사해도 돌아가겠지만, 임베디드 서버에는 부가 파일이 필요한 경우가 있으므로(에러가 발생했을 때 메시지를
출력하기 위해서.. 등등) 완벽하게 하려면 같은 경로에 임베디드 서버의 파일 몇개를 더 복사해줘야 할 수도 있습니다.
필요할 수 있는 파일에 대해서는 다음 글을 참고하세요.
http://firebird.borlandforum.com/impboard/impboard.dll?action=read&db=fb_tutorial&no=11

그럼...


바람 님이 쓰신 글 :
: 안녕하세요.
:
: IBExpert를 사용 Firebird embed 1.5 의 dll을 이용하여 database file를 만들었습니다.
: c:\xxx\test.gdb
: IBExpert 에서는 접속 잘되고 table로 잘만들어 집니다..
:
: 델파이에서 IBDatabase컴포로 디자인 타임시에 접속하는 방법을 알고 싶습니다.
: IBDatabase의 databasename := localhost:c:\xxx\test.gdb
: 로 몇일전까지 접속이 잘되었는데..
:
: 갑자기 c:\xxx\test.gdb is not a valid database란 에러가 나오네요..
: 물론 IBExpert에서는 잘 접속 됩니다..
:
: 컴파일후 실행화일 경로 아래에 gds32.dll(firebird embed용..)를 복사해 두고
: IBDatabase의 databasename := c:\xxx\test.gdb 로 하면
: 실행시 접속 잘됩니다..
:
: 질문내용 정리 하겠습니다.
: 델파이 IBDatabase 사용 '디자인 타임시'에 test.gdb 접속을 gds32.dll(firebird embed용..)으로 접속하는 방법
: (소스 변경이나 레지스트리 등 그외 방법 으로 dll의 경로를 지정하는 방법)

+ -

관련 글 리스트
1745 [질문] Firebird embed 를 IBDatabase컴포로 접속 하는 방법.. 바람 1876 2006/01/05
1747     Re:[질문] Firebird embed 를 IBDatabase컴포로 접속 하는 방법.. 박지훈.임프 2456 2006/01/05
1749         Re:Re:[질문] Firebird embed 를 IBDatabase컴포로 접속 하는 방법.. 바람 2228 2006/01/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.