답변이 넘 늦은 듯 한데... 질문을 파이어버드쪽에 올리셨으면 좀 더 빨리 답변을 받지 않으셨을까 싶습니다.
그렇다고 확답을 드릴 수 있는 건 아니고... ^^;;
글 쓰신 내용으로 유추해보건대, fbembed.dll 파일 하나만 넣으신 것이 아닌가 싶습니다.
파이어버드 2.0 이상의 버전을 기준으로, fbembed.dll에는 추가로 최소한 아래와 같은 dll 파일들이 더 필요합니다.
msvcr80.dll
msvcp80.dll
icuuc30.dll
icuin30.dll
icudt30.dll
이중 위의 두개 dll은 파이어버드가 VC로 컴파일되었기 때문에 필요한 VC 런타임이구요. 아래의 세개 dll들은 파이어버드에서 유니코드 지원을 위해 불러 쓰는 파일들입니다. 이 dll 파일 다섯개가 없으면 fbembed.dll이 로드되지 않고 말씀하신 것과 같은 에러가 납니다.
참고로, 반드시 필요한 것은 아니지만 ib_util.dll과 firebird.msg 파일도 넣어주시는 게 좋습니다. 앞의 파일이 없으면 파이어버드 로그 파일에 이 파일이 없다는 메시지가 자꾸 찍혀서 귀찮아지기 때문이고, 두번째 파일은 파이어버드의 에러메시지들이 들어있는 파일입니다. 이 firebird.msg 파일이 없으면 파이어버드에서 에러가 났을 때 무슨 원인으로 에러가 발생했는지 알아보기가 어렵게 되지요.
그리고 참고로 몇가지 더 알려드립니다.
64비트 OS에서는, 파이어버드 서버 버전이라면 64비트든 32비트든 아무거나 상관없습니다만, 서버가 아닌 임베디드의 경우는 개발하시는 애플리케이션이 32비트이면 32비트 파이어버드를 쓰는 게 맞습니다. 32비트 애플리케이션에서 64비트 fbembed.dll을 불러올 수가 없거든요. 결론적으로 32비트를 쓰신 것이 맞습니다.
또, 파이어버드 임베디드 버전을 dbExpress로 불러 쓰실 때는 반드시 fbembed.dll을 fbclient.dll로 이름을 바꾸실 필요는 없습니다. 왠냐하면 dbExpress의 TSQLConnection에서는 VendorLib이라는 속성이 있어서, 여기서 클라이언트 dll의 이름을 지정할 수 있거든요. 여기다가 이름을 바꾸지 않고도 fbembed.dll를 바로 지정해주시면 정상 동작합니다.
하나 더, 파이어버드 임베디드의 파일들을 system32에 넣어주셔도 물론 아무 문제 없이 동작합니다만, 제 경우에는 애플리케이션의 디렉토리 혹은 서브 디렉토리에 넣는 방법을 선호합니다. system32에 넣는 것이 유리한 경우는 파이어버드 서버 버전, 즉 fbclient.dll의 경우인데, 이 경우는 파일 단 하나인데다, 서버이기 때문에 여러 애플리케이션에서 불러쓸 경우도 있으니까요. system32에 여러 파일들을 추가해서 지저분해지는 걸 싫어하고, 핸디하게 배포할 수 있는 면이 있어서요.
파이어버드 임베디드를 호출하는 애플리케이션 디렉토리에 그대로 fbembed.dll과 위의 추가 dll들을 몽땅 다 넣으시면 다른 손 안대고도 그대로 사용할 수 있고요. 애플리케이션 디렉토리에 파일들이 많거나 해서 그 아래에 서브디렉토리를 만들어 임베디드 관련 파일들을 넣을 경우에는, 해당 서브디렉토리를 환경변수 path에 추가하면 되는데요. 환경변수에 추가해야 한다고 해서 시스템 환경변수(즉 윈도우의 환경변수)를 직접 수정해서 추가해야 하는 것은 아니고, 현재 애플리케이션의 환경변수에 설정하는 API 함수 SetEnvironmentVariable() 함수를 호출해주면 됩니다.
장희진 님이 쓰신 글 :
: 먼저 제 개발환경은 Win7 Home Premiun K 64bit 운영체제에
: Delphi 환경은 XE, XE2가 있습니다.
:
: Win7, 32bit 운영체제에서 BDE, Paradox로 로컬 DB를 사용했었는데
: 64bit에서는 안되더라구요.. 자료를 찾다가 64bit 환경에서는 BDE가 안먹는다 그래서
: DBExpress로 갈아탈겸,
: 또 Firebird Embeded라는 것이 library(fbclient.dll)만 있으면 로컬 DB사용이 가능하다하여
: 개발을 해보려 합니다.
:
: 참고로 전 이제 막 시작한 초급 개발자라서 질문과 글이 어이없거나 횡설수설해도 이해 부탁드립니다 ㅠ
:
: 먼저 FireBird Embeded를 Win64버전으로 받아야할지 Win32버전으로 받아야할지부터 잘 모르겠습니다.
: 개발 후에 배포환경은 32bit환경이구요..
:
: 둘 다 설치를 해보았습니다만.. 결과는 마찬가지였습니다 ㅠ
: IB Expert로 DB를 만들려다보니 Tool 환경이 32bit이라 library도 32bit 꺼를 써야한다는 메시지가 뜨더라구요.
: 그래서 현재는 32bit 버전의 Embeded를 설치했습니다.
:
: VCL Form에 TSQLConnection 컴포넌트를 올린 후,
: Driver : Firebird
: Database : C:\Database\TEST.FDB { IB Expert를 통해 만든 Local DB입니다.. }
: 위와 같이 설정한 후 Connected를 True로 했더니
:
: DBX Error: Driver could not be properly initialized. Client library may be missing, not installed properly, of the wrong version, or the driver may be missing from the system path..
:
: 라는 에러메시지가 뜹니다.
:
: Embeded Firebird를 받아 압축을 풀면 fbEmbeded.dll 이란 파일이 있는데 이 것을 fbClient.dll로 이름을 바꿔서 SYSTEM 폴더에 넣어주면 된다고 들었는데요..
:
: 개발환경은 64비트라 SYSWOW64에도 넣어보고.. 안되서 SYSTEM32에도 넣어봤는데
: 역시나 같은 에러가 발생합니다..
:
: 고수님들의 조언 부탁드립니다.. ㅠ
:
:
:
:
: 요점 정리
: 개발환경 : Win7 Home Premiun K 64bit 운영체제, Delphi XE
: 컴포넌트 : DBExpress
: DB : Firebird Embeded
:
: 문의사항
: 1. Firebird Embeded는 어느버전으로 받아야하는지.. (32bit? or 64bit?)
: 2. Local DB를 만들어 Delphi와 연결하려면 어떻게 해야하는지..
:
:
: 감사합니다.
|