보통의 DB Application을 TService 안에서 CreateProcess 또는 Winexec로 실행하면,
DB연결이 정상적으로 되지 않는 경우가 있습니다. 그냥 윈도우화면에서 실행하면 정상적으로 작동하는데 서비스안에서 실행하면 DB 연결하는 부분에서 exception이 발행합니다. 이것 막상 당해보면 정신놓게 됩니다.
이문제는 대부분 ODBC설정과 관련되어 있습니다. 저는 c++builder 6 사용합니다.
제가 겪은 시나리오 입니다.
DB는 SQL서버이고 ADOConnection을 통해서 연결해서 잘 사용하고 있었는데, 컴퓨터가 시작되면 자동으로 시작되로록 service에서 실행하니까 문제가 발생했습니다.
결국 원인은 ADOConnection 공급자에서 Microsoft OLE DB Provider for ODBC drivers를 사용했는데,
이것을 Microsoft OLE DB Provider for SQL Server로 변경하니까 정상적으로 작동합니다.
BDE에서도 ODBC Alias를 사용하면 같은 현상이 발생하므로 연결시에 MSSQL로 사용해야 합니다.
(*BDE Administrator에서 icon이 BCDEMOS와 같도록 하면됩니다.)
|
디자인타임에서 Microsoft OLE DB Provider for ODBC drivers로 연결했을때 connect되다가, Runtime에서는 연결이 안되는 경우가 발생합니다.