<!--Codes-->
// RDS를 이용한 DB 연결 입니다.
try
RDSRS := CreateOleObject('ADODB.RecordSet');
RDSRS := RDSDataFactory.query(RDSConnection.connect, strQuery);
// 예외 상황 발생시 에러 메세지를 Text파일에 저장하고 예외 문장을 출력한다.
except
on e:exception do
begin
append(F);
writeln(F, formatdatetime('hh:mm:ss', now) + e.Message);
showMessage('DB Connect Fail ' + #13#13 + e.Message);
closeFIle(F);
end;
end;
<!--CodeE-->
안녕 하세요. 맨날 구경만 하다가 처음으로 용기내서 질문 올려 봅니다.
저는 델파이 시작한지 이제 3주 정도 됐는데요, 도통 감이 안 오네요.
본론으로 넘어가서.. 지금 만드는 프로그램은 RDS를 이용해서
DB에 접속이 되는지 검사를 하는 프로그램입니다. 만약 접속이 안된다면
무엇이 문제인지까지 나오게 하려고 합니다.
그래서 DB 접속 실패시 예외 처리를 이용하여 정확한 원인을 집어 내고 싶습니다.
그냥 저 프로그램 돌리면 메세지창으로 '[ODBC]['는 접속 되지 않습니다]'
정도만 나옵니다.
하지만 제가 원하는건, 뭐가 문제 생겼을때 ID나 Password가 틀렸을 경우 그에 해당하는
반환값을 숫자로 받아서 그에 해당하는 메세지를 직접 출력하게 만들고 싶습니다.
예를 들자면, 주소가 틀려서 '30'이라는 숫자를 반환 받았을 경우
if DB_Return = 30 then
messagebox('ID나 Password가 틀렸습니다')
이런식으로 하고 싶습니다. 말이 길어 졌네요..
부디 답까지는 아니더라도 해결책을 좀 주셨으면 감사 하겠습니다.
접속하고자 하는 DB는 MS-SQL 2005입니다~
아차...그리고 하나 더..ㅜ.ㅜ
이거 하나만 더 알려 주시면 감사 하겠습니다.
특정 싸이트가 접속이 되는지 확인 하는 방법이 있는지..
web browser 컴포넌트를 이용하라고 하는데..
아무리 봐도 모르겠어요.. 좀 도와 주세요..ㅜ.ㅜ
그럼 다들 좋은 일만 있기를 바래요.. *^^*
만일 그렇다면, 작업하시는 DB 종류의 레퍼런스를 참조하셔서 일일이 기술하셔야 할듯한데..;
두번째 질문은.. 아래 함수를 참고해 보세요..
오래전에 작성해둔 함수인데 특정사이트가 접속가능한지 알아내는 함수입니다.
WINSOCK 구동여부 먼저 확인하시구 하세요..
그럼~ 즐거운 프로그래밍 하시길~
function IsConnect(sConnectIp: string; iPort: LongInt) : string;
procedure DoCloseSocket(var SocketId: TSocket);
begin
if SocketId <> INVALID_SOCKET then
if WSAISBlocking then
WSACancelBlockingCall;
CloseSocket(SocketId);
SocketId := INVALID_SOCKET;
end;
var
Address: DWord;
Phe: PHostEnt;
ConnectIn: TSockAddrIn;
ConnectSkt: Tsocket;
DelayTime: Longint;
begin
Result := '';
Screen.Cursor := crHourGlass;
try
Address := inet_addr(PChar(sConnectIp));
if (Address = INADDR_NONE) then
begin
Phe := GetHostByName(PChar(sConnectIp));
if Phe <> Nil then
Address := Longint(plongint(Phe^.h_addr_list^)^);
end
else
begin
Phe := GetHostByAddr(@Address, 4, PF_INET);
if Phe = Nil then
Address := INADDR_NONE;
end;
if Address = INADDR_NONE then
begin
Result := '서버를 알 수 없습니다. IP가 정확한지 확인하세요.';
Exit;
end;
with ConnectIn do
begin
FillChar(ConnectIn, SizeOf(ConnectIn), #0);
sin_family := PF_INET;
sin_addr.s_addr := Address;
sin_port := htons(iPort);
end;
Application.ProcessMessages;;
ConnectSkt := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if ConnectSkt = INVALID_SOCKET then
begin
Result := '네트워크 오류: 소켓핸들을 얻을 수 없습니다.';
Exit;
end;
DelayTime := 1000;
if SetSockOpt(ConnectSkt, SOL_SOCKET, SO_RCVTIMEO, @DelayTime, SizeOf(DelayTime)) <> 0 then
begin
Result := '네트워크 오류: 소켓의 옵션을 바꿀 수 없습니다.';
DoCloseSocket(ConnectSkt);
Exit;
end;
if Connect(ConnectSkt, ConnectIn, sizeof(ConnectIn)) <> 0 then
begin
Result := sConnectIp + ' 에 접속할 수 없습니다.';
DoCloseSocket(ConnectSkt);
Exit;
end;
Result := sConnectIp + ' 에 접속할 수 있습니다.';
finally
DoCloseSocket(ConnectSkt);
Screen.Cursor := crDefault;
end;
end;