업무상 메인으로 유지보수중인 시스템이 있는데, 특정 폼을 수정하고나면 프로그램 exe가 실행 자체가 안되는 경우가 종종 있었다.
특이한건 개발PC 에서는 아무 탈 없이 실행이 되는데, 클라이언트 PC에서만 실행이 안된다는것..
원인을 찾으려고 약 이틀간 삽질한 결과.. 그 '특정' 폼에 사용된 ADOConnection 의 속성값이 문제였다.
프로그램에 ADOConnection과 ADOQuery가 떡칠(...)이 되어있는데, 사용된 ADOConnection 들 중 하나에만 Connected 속성값이 True로 되어 있었다.
위 이미지의 Connected 속성이 True 로 되어있었다.
이게 어디에 써먹는건지도 여태 몰랐는데, 이번 기회에 특징을 조금 알게 되었다.
우선 저게 체크되어있으면, 델파이로 소스를 열자마자 ConnectionString 에 들어있는 연결문자열대로 DB에 접속을 시도한다.
예시로, IP나 DB 명을 일부러 틀리게 입력해놓고 저장한 뒤 델파이를 재실행하고 소스를 열면 바로 DB 접속에 실패했다는 에러메시지가 뜬다
나의 경우는 DB명과 계정정보가 맞게 입력이 되어있었고, IP는 로컬을 보도록 되어있었다.
그래서 로컬에 DB서버가 설치되어있는 개발PC에서는 프로그램이 정상작동 했지만, 클라이언트PC 에서는 실행이 안되었던것..
그런데, 일부러 에러메시지가 뜨도록 소스를 열고 컴파일을 해서 생겨난 exe 파일은 클라이언트에서 잘 실행이 된다. 아마도 Connected 값이 True로 되어있어도, 컴파일 할 당시에 ConnectionString에 입력되어있는 정보대로 DB연결이 되지않으면 자동으로 Connected 값을 내부적으로만 False로 바꾸나보다.
결론은,
1. Connected 속성값을 True 로 해놓고,
2. ConnectionString 의 연결문자열 값에 IP 를 로컬로 해놓으면.
클라이언트 PC에서 해당 프로그램의 exe를 실행함과 동시에 로컬에서 DB 를 찾으려 하기 때문에.. 타임아웃에 걸려서 그냥 프로그램이 뻗어버리는 현상이 발생한다.
차라리 디비를 못찾는다는 에러라도 떴으면 금방 찾았을텐데.. 아무 에러도 없이 뻗기만 해서 찾느라 애좀 먹었다.
'Delphi' 카테고리의 다른 글
[델파이/Delphi] Directory 내용 불러오기, File 내용 추출하기 예제 (0) | 2022.02.17 |
---|---|
[델파이/Delphi] 자료구조 - Queue (0) | 2022.01.19 |
[델파이/Delphi] 시간 측정 - TStopWatch (0) | 2021.12.14 |
[델파이/Delphi] TStringBuilder (0) | 2021.12.14 |
[델파이/Delphi] Generic(제네릭) 간단 사용 예제 (0) | 2021.11.27 |