こんにちは。
Oracleデータベースを利用したアプリケーション開発をしています。
ユニットが複数(30ファイル程度)あるソースなのですが
実行(F9)すると「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。
どのユニットをConnectStringの情報に誤りがあるか検索する方法はあるのでしょうか?
ユニットファイル一つ一つ探せば済むのですが
時間がかかるので検索する方法があれば教えてください。
よろしくお願いいたします。
環境は以下の通りです。
Windows 10 Pro 64bit
Delphi Berlin Ent
IDEが例外を捕まえた状態ですので、そこでブレークを選択すると、ソースコード上で例外を送出した行が表示されます。
そのときに左上の呼出履歴にはそのコードに至る呼出履歴が表示されますので、これでどのような実行経路でその行が呼び出されたかがわかると思います。
もしライブラリのソースのブレークした行が表示されないようであれば、プロジェクトオプションのコンパイルのデバッグのあたりにあるデバッグ版DCUを使用するをチェックオンにしてください(デバッグビルドならデフォルトでオンのはずですが)
HFUKUSHIさん、ご回答ありがとうございます。
ご指導いたただきましたように「ブレーク」を選択しましたがイベントログには
ソースコード上で例外を送出した行が表示されません。
また、呼出履歴にもエラー箇所のヒントになるようなものはありませんでした。
プロジェクト>オプション>デバック版DCUにチェックを入れ再度 実行(F9)をしましたが
変化はありませんでした。
データベース接続には何を使っていますか?
また接続はコードで(Open; とか Active := True; で)やっていますか?それとも設計時にコンポーネントのプロパティでActiveをTrueにして自動的に接続させていますか?
あとエラーでブレークしたときに、コードエディタ上に表示される現在実行中の行は自分のコードですか?それともDelphiのライブラリのコードですか?
HFUKUSHIさん、お返事ありがとうございます。
データベース接続ですが
TdmFuncにADOConnectionを貼り付けて
プロバイダーは「Microsoft OLE DB Provider for Oracle」を使用しています。
その「Microsoft OLE DB Provider for Oracle」のパスワードを変更しました。
その上で、実行(F9)したところ
「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。
各formに貼り付けたTADOQueryのConnectプロパティはTdmFuncのADOConnectionを参照しています。
> また接続はコードで(Open; とか Active := True; で)やっていますか?
> それとも設計時にコンポーネントのプロパティでActiveをTrueにして自動的に接続させていますか?
コードでopenしています。
> あとエラーでブレークしたときに、コードエディタ上に表示される現在実行中の行は自分のコードですか?
>それともDelphiのライブラリのコードですか?
自分のコードです。
TdmFuncに貼り付けているADOConnectionのプロパティ ConnectionString は、
オブジェクトインスペクタ、あるいは、コード上で指定していますか?
おはようございます。
igyさんお返事ありがとうございます。
TdmFuncに貼り付けてあるADOConnectionのプロパティ ConnectionStringは
オブジェクトインスペクタで指定しています。(パスワード変更してログイン成功確認しています。)
>> あとエラーでブレークしたときに、コードエディタ上に表示される現在実行中の行は自分のコードですか?
>>それともDelphiのライブラリのコードですか?
>自分のコードです。
このコード付近で、TADOQueryなどをOpenしたり、操作していたり、していますか?
igyさんお返事ありがとうございます。
今日はお休みではないのでか?
私はスキルがないので時間をかけて頑張っています。
igyさんのご質問ですが
> このコード付近で、TADOQueryなどをOpenしたり、操作していたり、していますか?
おっしゃる通りコード上に oprn; を記述しています。
これが原因でしょうか?
前の書き込みでは、
> 各formに貼り付けたTADOQueryのConnectプロパティはTdmFuncのADOConnectionを参照しています。
とありましたが、そのTADOQueryのConnectプロパティにも、TdmFuncのADOConnectionが指定されていますか?
また、その時には、TdmFuncのADOConnection自体、ConnectedプロパティはTrueになっていますか?
igyさん、お付き合いいただきましてありがとうございます。
本当に感謝いたします。
Donnectionプロパティに「dmFunc.ADOConnection」と記載しています。
> その時には、TdmFuncのADOConnection自体、ConnectedプロパティはTrueになっていますか?
Falseになっています。
ちなみにTrueにして実行(F9)しましたが変化はありませんでした。
(「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。 )
同じでしたか・・・
では、問題の切り分けを行うために、新規プロジェクトで、
フォームにADOConnectionを追加して、 ConnectionStringプロパティを設定。
フォームにボタンを追加し、OnClickイベントにて、
ADOConnection.Open;
または、
ADOConnection.Connected := True;
を実行してみたら、同じエラーが出ますか?
igyさん、度々のお返事ありがとうございます。
新規でプロジェクトを作成しました。
お指示いただきました通リに
新規フォームを作成して
そのフォームにADOConnecttionを追加して
ConnectionStringプロパティを設定したしました。
そして、そのフォームにButtonを追加して
OnClickイベントに「ADOConnection.Open」や「ADOConnection.Connected := True」を記述し
実行(F9)しました。
結果、どちらともエラーは発生しませんでした。
単体テストでの接続でエラーが出ないようなので、環境やConnectionStringプロパティに問題は、なさそうなので・・・
従来のプロジェクトのほうで、
>> その時には、TdmFuncのADOConnection自体、ConnectedプロパティはTrueになっていますか?
>Falseになっています。
>ちなみにTrueにして実行(F9)しましたが変化はありませんでした。
こちらは、Trueにしているなら、Falseに戻してから、
TdmFuncのFormCreateイベントにて、
ADOConnection.Open;
を追加してみた場合では、エラーは表示しますか?
igyさん、ご指導ありがとうございます。
エラーが発生しているプロジェクトのTdmFuncのADOConnection ConnectedプロパティはFalseになっているので
そのままにしておき
空っぽのTdmFuncのOnCreateイベントに ADOConnection.Open; を追加して実行(F9)しましたが
同様な エラー発生しました。
(「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。 )
エラーでブレークしている場所は、
今回、追加してもらった
ADOConnection.Open;
で、止まってますか?
igyさん、お付き合いありがとうございます。
プロジェクトの途中で止まっています。
Application.Initialize;
Application.CreateForm(TfrmMenuSample, frmMenuSample);
Application.CreateForm(TdmFunc, dmFunc);
Application.CreateForm(TfrmSample, frmSample); ←ここで止まっています
・
・
・
新規プロジェクトでつくってもらったほうの、ADOConnectionのConnectionStringプロパティと、
従来のプロジェクトのADOConnectionのConnectionStringプロパティは、同じですか?
igyさん
新規プロジェクトで作ったものと従来プロジェクトの
ADOConnectionのConnectionStringプロパティは全く同様でした。
Delphiのメニュー[プロジェクト]-[オプション]で表示する、そのプロジェクトのオプション画面で、
画面左にある[フォーム]を選択すると、[自動生成フォーム]欄があると思いますが、
dmFunc
を
frmMenuSample
の上に移動した場合も、同じエラーになりますか?
igyさんお世話になり恐縮しています。
ご指示いただきました
左側の自動生成フォームにある dmFunc を 右側の使用可能フォームに移動させ実行(F9)しました。
すると今度は
「プロジェクト〇〇.exeは例外クラスEDatabaseError(マッセージ'ConnectionまたはConnectionStringプロパティが指定されていません。')を送出しました。」
というエラーが発生しました。
ADOQueryのConnectionプロパティはTdmFuncのADOConnectionを参照しているのですが・・・
> 右側の使用可能フォームに移動させ
すみません。私の書き方が悪かったみたいです。
右側の使用可能フォームへの移動ではなく、
左側の[自動生成フォーム]欄で、
おそらく
frmMenuSample
dmFunc
frmSample
の並びだと思うのですが、
dmFunc
を一番上に移動して、
dmFunc
frmMenuSample
frmSample
の並び、すなわち、生成の順番をdmFuncが最初になるようにしたら、
結果がどうなるか、知りたかったのです。
理解不足で申し訳ありません。
ご指示ありました
自動生成フォーム欄にある dmFunc を一番先頭にして実行(F9)しましたが
変化はありませんでした。
(「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。 )
(関係ないかもしれませんが・・)
Delphi Berlin は、Update2まで出ているのですが、適用済みですか?
はい。
update2まで適用されております。
一応、気になる箇所は、確認してもらったのですが、
なかなか原因の特定につながらないですね・・・
あとは・・
ADOConnection は、TdmFuncにあるADOConnection だけですか?
もしかして、ソースのどこかで動的に生成したりとかは、ありますか?
igyさん、申し訳ありません。
ソース中に書き込んでいました。
こんなことで、一日中お付き合いさせてしまい・・・
あやまっても あやまっても ・・・
本当に申し訳ありませんでした。
> あやまっても あやまっても ・・・
> 本当に申し訳ありませんでした。
気にしなくてもいいですよ。
解決できて、良かったです!!
igyさん、優しいですね。
ありがとうございます。
以後、このようなことがないように
気をつけてご質問させて頂きます。
今後ともよろしくお願いいたします。
ツイート | ![]() |