TOracleSession
コンポーネントと、TOracleLogonコンポーネントを用いてOracleに接続します。

Oracleへの接続とログオン 接続の方法1 – TOracleSession TOracleSession
コンポーネントと、TOracleLogonコンポーネントを用いてOracleに接続します。

TOracleSession

TOracleLogon

TOracleSession の Logonプロパティ で接続先を指定します。(UserName/Password@Database) property LogonDatabase
property LogonUserName property LogonPassword TOracleSession のConnected プロパティをTRUEにすると接続します
property Connected procedure LogOn : Connected := True と同じ procedure LogOff : Connected := False と同じ
ログオンが成功したかどうかも、Connectedプロパティをチェックすればわかります

サンプルデータモジュール OraDataModuleを用意します。(以下は  DFM抜粋)
  object OraDataModule: TOraDataModule  ...
    object Session: TOracleSession
      LogonUsername = 'scott'
        LogonPassword = 'tiger'
      LogonDatabase = 'OKVINCE'
      ...

サンプルソース
  procedure TForm1.ConnectButtonClick(Sender: TObject);
  begin
    with Session do begin
    try
      Connected := True;
      if ExpirationMessage <> '' then //パスワードが期限切れ
        ShowMessage(ExpirationMessage);
      else 
        ShowMessage('ログイン成功');
    except
      on e: EOracleError do begin
      case e.ErrorCode of
        01034: showmessage('サーバが起動していません');
        01017: showmessage('ユーザ名またはパスワードが間違っています');
        12154: showmessage('データベースサービスが見つかりません(TNS名の解決に失敗)');
        28001: showmessage('パスワードの有効期限が切れました');
        else showmessage(e.Message);
      end;
    end;

    if not Session.Connected then showmessage('接続に失敗しました');
  end;

データベース接続に失敗したときの例外は、上記のように処理します。”ORA-NNNNN”エラーに対して、EOracleError.ErrorCodeがNNNNNを返してくれます。アカウントが期限切れの場合は、OracleからExpirationMessageが返されます。

オンラインアプリケーションの場合、メインフォームのOnCreateイベントなどでOracleへの接続を行うと思いますが、OnCreateイベントで接続失敗の場合は即座にApplication.Terminateでアプリケーションを終了させるのが一般的と思われます。(上記の例ではshowmessageだけですが…)

自前でログオン画面を作成する場合は、たとえば以下のようになるでしょう。

サンプルソース
  procedure TForm1.ConnectButtonClick(Sender: TObject);
  var
    MyLogonDialog: TMyLogonDialog;begin
    MyLogonDialog := TMyLogonDialog.Create(self);
    try
      if MyLogonDialog.ShowModal then begin
        with Session do begin
        try
          LogonUserName := MyLogonDialog.UserName;
          LogonPassword := MyLogonDialog.Password;
          LogonDatabase := MyLogonDatabase.DatabaseName;
          Connected := True;
          showmessage('接続成功')
        except
          on e: EOracleError do showmessage(e.Message);
        end;
      end else 
        showmessage('ログオンをキャンセルしました');
      end;
    finally
      MyLoginDialog.Free;
    end;
  end;

なお、自前のログオンダイアログで、Oracleのデータベースエリアスの一覧をドロップダウンリストに表示させたい場合などは、OracleCIユニットの
OracleAliasList関数を利用して取得できます。

期限切れパスワード Oracle8
以降の環境(Net8)では、パスワードの変更はセッションが接続されていなくてもできます。Oracleに接続した際にパスワードが期限切れであった場合、新たなパスワードをセットしてログオンすることが可能です。このときは、LogonPasswordに古いパスワードをセットしたままで、SetPasswordメソッドで新しいパスワードをセットしてから接続しなおします。

  • TOracleSession
    • procedure SetPassword(const NewPassword: string); //新パスワードを設定します
  procedure TForm1.ConnectButtonClick(Sender: TObject);
  begin
    with Session do begin
    try
      Connected := True;
      if ExpirationMessage <> '' then //パスワードが期限切れ
        ShowMessage(ExpirationMessage);
      else 
        ShowMessage('ログイン成功');
    except
      on e: EOracleError do begin
      case e.ErrorCode of
        28001: begin
            showmessage('パスワードの有効期限が切れました');
            SetPassword(GetNewPassword); //GetNewPasswordで、新パスワードを入力するとします
            try
              LogOn;
            except
              on e: EOracleError do showmessage(e.Message);
            end;
          end;
        else showmessage(e.Message);
      end;
    end;

    if not Session.Connected then showmessage('接続に失敗しました');
  end;

なお、セッションが接続中であればいつでもパスワードの変更が可能です。

と、長々と解説しましたが、ほとんどの場合、特に社内向けアプリケーションなどの場合は、次に紹介するTOracleLogonコンポーネントをログオン画面に使うのが楽でしょう。