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