Q&A

  • ado connection 실패시 예외처리
얼마전에 bde를 쓰다 모두 ado로 바꿨는데요 에러처리가 안돼고있습니다..

  try
    db접속
  except
    showmessage('정기 PM으로인한 오라클 접속 PASSWORD 에러입니다. PASSWORD를 변경해 주십시오!!!');
    password변경폼 open;
  end;

이전에는 위와 같이 예외처리를 해주고 있었는데요 ado로 바꾸고 나서부터는

EOleException 에러가 나면 에러가 except문안에 걸리지 않고 있습니다..

여기저기 찾아봐도 ado에 관한 자료는 너무 없는 편이고 미치겠습니다,,

몇일후면 db password가 변경되어서 예외처리가 꼭 필요한 상황인데

조그만 팁이라도 있으신분은 빠른 답변좀 부탁드립니다
3  COMMENTS
  • Profile
    nilriri™ 2007.11.27 18:47
    db접속  이라는게 어떻게 접속을 햇다는 거죠?

    선언부에..
    con : TADOConnection;  이라면..

    con.connectstring := ...;

    con.Open;

    if not con.connected then
    begin
        //여기서 접속되지 않았을때 처리를 해주면 되지 않을까요?
    end;

    uses절에..
       comObj  인가???  추가해 주셔야 할겁니다...물론 다른것도..^^

    try
    except
        on e : exception do
             showmessage(e.classname + #10#13 + e.message);해서 한번 보시구요..
    end;



  • Profile
    조비아 2007.11.27 23:16
    db접속부분은 환경파일에서 아래와 같이 password를 읽어와서 ConnectionString 을 업데이트하구요,,

      Try
        Oini := TiniFile.Create('.\OSS.INI');
        pw := Oini.ReadString('OSSDB','Provider','');
        Oini.Free;
        ADOConnection1.ConnectionString := 'Provider='+ pw;

      Except
        E := Exception(ExceptObject);
        showmessage('에러: '+E.Message);
       cngpw.show;//pw변경 폼
    end;

    그리고 if문안에 예외처리를 하는것은 if문을 타기전에 에러먼저 뜨기 때문에 소용이 없는것 같습니다..

    다른 방법은 없을까요?

  • Profile
    nilriri™ 2007.11.28 06:02
    간단히 컨넥션중 에러 발생했을때 단순히 메시지만 띠우고 다시 컨넥션 스트링 받도록 했습니다...

    그냥 참고만 하시구요...

    Exception  이라고 검색하셔서  에러처리에 대한 관련 자료들 더 찾아보시고 참고하세요..

    그럼..

    <!--CodeS-->

    unit Unit1;

    interface

    uses
       Windows,
       Messages,
       SysUtils,
       Variants,
       Classes,
       Graphics,
       Controls,
       Forms,
       Dialogs,
       StdCtrls,
       DB,
       ComObj,
       ADODB;

    type
       TForm1 = class(TForm)
          ADOCon: TADOConnection;
          Button1: TButton;
          procedure Button1Click(Sender: TObject);
       private
          { Private declarations }
       public
          { Public declarations }
       end;

    var
       Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
       isConnect: boolean;
       ConStr: string;
    begin

       try
          while not isConnect do
          begin

             ADOCon.Close;

             if not isConnect then
                ConStr := inputbox('Connection String', 'Connection String...',
                   'Provider=MSDAORA.1;Password=암호;User ID=아이디;Data Source=데이터소스;Persist Security Info=True');

             ADOCon.ConnectionString := ConStr;

             try
                ADOCon.Open;
             except
                // 에러메시지 모두 무시하려면 아무런 코드 없이..
                // EOLEException 이 뜬다는 것이 델파이에서 F9로 바로 실행된 디버그 모드
                // 에서 나온다는건 아니겠죠?
                // 여기에서 showmessae안 넣으면 에러가 나도 아무런 메시지 없이 다음으로 진행됩니다.
                // exe를 만들어서 테스트 해보세요..
                on e: Exception do
                   ShowMessage(e.ClassName + #13 + e.Message);
             end;

             isConnect := ADOCon.Connected;

             if not isConnect then
                ShowMessage('데이터베이스 연결실패.')
             else
                ShowMessage('데이터베이스에 연결되었습니다.')

          end;
       except
       end;
    end;

    end.

    <!--CodeE-->