デバッガ例外通知について

解決


のりたま  2020-07-10 15:35:59  No: 148896

こんにちは。
Oracleデータベースを利用したアプリケーション開発をしています。

ユニットが複数(30ファイル程度)あるソースなのですが
実行(F9)すると「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。
どのユニットをConnectStringの情報に誤りがあるか検索する方法はあるのでしょうか?
ユニットファイル一つ一つ探せば済むのですが
時間がかかるので検索する方法があれば教えてください。
よろしくお願いいたします。

環境は以下の通りです。
Windows 10 Pro 64bit
Delphi Berlin Ent


HFUKUSHI  2020-07-10 16:21:11  No: 148897

IDEが例外を捕まえた状態ですので、そこでブレークを選択すると、ソースコード上で例外を送出した行が表示されます。
そのときに左上の呼出履歴にはそのコードに至る呼出履歴が表示されますので、これでどのような実行経路でその行が呼び出されたかがわかると思います。
もしライブラリのソースのブレークした行が表示されないようであれば、プロジェクトオプションのコンパイルのデバッグのあたりにあるデバッグ版DCUを使用するをチェックオンにしてください(デバッグビルドならデフォルトでオンのはずですが)


のりたま  2020-07-10 17:24:59  No: 148898

HFUKUSHIさん、ご回答ありがとうございます。
ご指導いたただきましたように「ブレーク」を選択しましたがイベントログには
ソースコード上で例外を送出した行が表示されません。
また、呼出履歴にもエラー箇所のヒントになるようなものはありませんでした。

プロジェクト>オプション>デバック版DCUにチェックを入れ再度 実行(F9)をしましたが
変化はありませんでした。


HFUKUSHI  2020-07-10 18:19:29  No: 148899

データベース接続には何を使っていますか?
また接続はコードで(Open; とか Active := True; で)やっていますか?それとも設計時にコンポーネントのプロパティでActiveをTrueにして自動的に接続させていますか?


HFUKUSHI  2020-07-10 18:24:40  No: 148900

あとエラーでブレークしたときに、コードエディタ上に表示される現在実行中の行は自分のコードですか?それともDelphiのライブラリのコードですか?


のりたま  2020-07-10 20:18:25  No: 148901

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を参照しています。


のりたま  2020-07-10 20:22:37  No: 148902

> また接続はコードで(Open; とか Active := True; で)やっていますか?
> それとも設計時にコンポーネントのプロパティでActiveをTrueにして自動的に接続させていますか?
コードでopenしています。

> あとエラーでブレークしたときに、コードエディタ上に表示される現在実行中の行は自分のコードですか?
>それともDelphiのライブラリのコードですか?
自分のコードです。


igy  2020-07-11 00:33:36  No: 148903

TdmFuncに貼り付けているADOConnectionのプロパティ ConnectionString は、
オブジェクトインスペクタ、あるいは、コード上で指定していますか?


のりたま  2020-07-11 07:15:12  No: 148904

おはようございます。
igyさんお返事ありがとうございます。
TdmFuncに貼り付けてあるADOConnectionのプロパティ ConnectionStringは
オブジェクトインスペクタで指定しています。(パスワード変更してログイン成功確認しています。)


igy  2020-07-11 08:36:05  No: 148905

>> あとエラーでブレークしたときに、コードエディタ上に表示される現在実行中の行は自分のコードですか?
>>それともDelphiのライブラリのコードですか?
>自分のコードです。

このコード付近で、TADOQueryなどをOpenしたり、操作していたり、していますか?


のりたま  2020-07-11 10:38:54  No: 148906

igyさんお返事ありがとうございます。
今日はお休みではないのでか?

私はスキルがないので時間をかけて頑張っています。

igyさんのご質問ですが
> このコード付近で、TADOQueryなどをOpenしたり、操作していたり、していますか? 
おっしゃる通りコード上に oprn; を記述しています。

これが原因でしょうか? 


igy  2020-07-11 10:42:36  No: 148907

前の書き込みでは、

> 各formに貼り付けたTADOQueryのConnectプロパティはTdmFuncのADOConnectionを参照しています。

とありましたが、そのTADOQueryのConnectプロパティにも、TdmFuncのADOConnectionが指定されていますか?
また、その時には、TdmFuncのADOConnection自体、ConnectedプロパティはTrueになっていますか?


のりたま  2020-07-11 10:57:18  No: 148908

igyさん、お付き合いいただきましてありがとうございます。
本当に感謝いたします。

Donnectionプロパティに「dmFunc.ADOConnection」と記載しています。

> その時には、TdmFuncのADOConnection自体、ConnectedプロパティはTrueになっていますか? 
Falseになっています。
ちなみにTrueにして実行(F9)しましたが変化はありませんでした。
(「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。 )


igy  2020-07-11 11:06:11  No: 148909

同じでしたか・・・

では、問題の切り分けを行うために、新規プロジェクトで、
フォームにADOConnectionを追加して、 ConnectionStringプロパティを設定。
フォームにボタンを追加し、OnClickイベントにて、
  ADOConnection.Open;
または、
  ADOConnection.Connected := True;
を実行してみたら、同じエラーが出ますか?


のりたま  2020-07-11 11:30:41  No: 148910

igyさん、度々のお返事ありがとうございます。

新規でプロジェクトを作成しました。
お指示いただきました通リに
新規フォームを作成して
そのフォームにADOConnecttionを追加して
ConnectionStringプロパティを設定したしました。
そして、そのフォームにButtonを追加して
OnClickイベントに「ADOConnection.Open」や「ADOConnection.Connected := True」を記述し
実行(F9)しました。
結果、どちらともエラーは発生しませんでした。


igy  2020-07-11 11:41:56  No: 148911

単体テストでの接続でエラーが出ないようなので、環境やConnectionStringプロパティに問題は、なさそうなので・・・

従来のプロジェクトのほうで、

>> その時には、TdmFuncのADOConnection自体、ConnectedプロパティはTrueになっていますか? 
>Falseになっています。
>ちなみにTrueにして実行(F9)しましたが変化はありませんでした。 

こちらは、Trueにしているなら、Falseに戻してから、

TdmFuncのFormCreateイベントにて、

ADOConnection.Open; 

を追加してみた場合では、エラーは表示しますか?


のりたま  2020-07-11 14:00:23  No: 148912

igyさん、ご指導ありがとうございます。

エラーが発生しているプロジェクトのTdmFuncのADOConnection ConnectedプロパティはFalseになっているので
そのままにしておき
空っぽのTdmFuncのOnCreateイベントに ADOConnection.Open; を追加して実行(F9)しましたが
同様な エラー発生しました。
(「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。 )


igy  2020-07-11 14:10:18  No: 148913

エラーでブレークしている場所は、
今回、追加してもらった
ADOConnection.Open;
で、止まってますか?


のりたま  2020-07-11 14:22:30  No: 148914

igyさん、お付き合いありがとうございます。

プロジェクトの途中で止まっています。

  Application.Initialize;
  Application.CreateForm(TfrmMenuSample, frmMenuSample);
  Application.CreateForm(TdmFunc, dmFunc);
  Application.CreateForm(TfrmSample, frmSample);   ←ここで止まっています
    ・
    ・
    ・


igy  2020-07-11 14:34:49  No: 148915

新規プロジェクトでつくってもらったほうの、ADOConnectionのConnectionStringプロパティと、
従来のプロジェクトのADOConnectionのConnectionStringプロパティは、同じですか?


のりたま  2020-07-11 14:48:32  No: 148916

igyさん

新規プロジェクトで作ったものと従来プロジェクトの
ADOConnectionのConnectionStringプロパティは全く同様でした。


igy  2020-07-11 14:57:01  No: 148917

Delphiのメニュー[プロジェクト]-[オプション]で表示する、そのプロジェクトのオプション画面で、
画面左にある[フォーム]を選択すると、[自動生成フォーム]欄があると思いますが、
dmFunc

frmMenuSample
の上に移動した場合も、同じエラーになりますか?


のりたま  2020-07-11 16:16:56  No: 148918

igyさんお世話になり恐縮しています。

ご指示いただきました
左側の自動生成フォームにある dmFunc を 右側の使用可能フォームに移動させ実行(F9)しました。
すると今度は
「プロジェクト〇〇.exeは例外クラスEDatabaseError(マッセージ'ConnectionまたはConnectionStringプロパティが指定されていません。')を送出しました。」
というエラーが発生しました。
ADOQueryのConnectionプロパティはTdmFuncのADOConnectionを参照しているのですが・・・


igy  2020-07-11 16:28:58  No: 148919

> 右側の使用可能フォームに移動させ

すみません。私の書き方が悪かったみたいです。

右側の使用可能フォームへの移動ではなく、
左側の[自動生成フォーム]欄で、
おそらく
 frmMenuSample
 dmFunc
 frmSample
の並びだと思うのですが、
 dmFunc
を一番上に移動して、
 dmFunc
 frmMenuSample
 frmSample
の並び、すなわち、生成の順番をdmFuncが最初になるようにしたら、
結果がどうなるか、知りたかったのです。


のりたま  2020-07-11 16:36:25  No: 148920

理解不足で申し訳ありません。

ご指示ありました
自動生成フォーム欄にある dmFunc を一番先頭にして実行(F9)しましたが
変化はありませんでした。
(「プロジェクト〇〇.exeは例外クラスEDatabaseError(メッセージ'ORA-017017:ユーザー名/パスワードが無効です。
ログオンは拒否されました。')を送出しました。」というエラーが発生します。 )


igy  2020-07-11 16:59:40  No: 148921

(関係ないかもしれませんが・・)
Delphi Berlin は、Update2まで出ているのですが、適用済みですか?


のりたま  2020-07-11 19:05:55  No: 148922

はい。
update2まで適用されております。


igy  2020-07-11 19:15:06  No: 148923

一応、気になる箇所は、確認してもらったのですが、
なかなか原因の特定につながらないですね・・・

あとは・・
ADOConnection は、TdmFuncにあるADOConnection だけですか?
もしかして、ソースのどこかで動的に生成したりとかは、ありますか?


のりたま  2020-07-11 20:32:34  No: 148924

igyさん、申し訳ありません。
ソース中に書き込んでいました。
こんなことで、一日中お付き合いさせてしまい・・・

あやまっても あやまっても ・・・
本当に申し訳ありませんでした。


igy  2020-07-11 20:57:43  No: 148925

> あやまっても あやまっても ・・・
> 本当に申し訳ありませんでした。

気にしなくてもいいですよ。
解決できて、良かったです!!


のりたま  2020-07-12 08:36:29  No: 148926

igyさん、優しいですね。
ありがとうございます。
以後、このようなことがないように
気をつけてご質問させて頂きます。
今後ともよろしくお願いいたします。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加