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コンポーネントをログオン画面に使うのが楽でしょう。