C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

共通変数の設定方法について


(過去ログ 6 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■6984 / inTopicNo.1)  共通変数の設定方法について
  
□投稿者/ みぃみ 二等兵(11回)-(2006/09/29(Fri) 16:33:32)

分類:[VB.NET] 


分類:[VB.NET] 

いつもお世話になっております。
VB2005・XP Professionalを使用しております。
どう説明するのが一番いいのか手探りの状態で、
説明が長くなること、ご容赦ください。

ODP.NETを使用して、データベースに接続し、
btn1を押下すると、ListBox1にテーブル一覧が表示されます。
ListBox1からテーブルを1つ選択した状態で、
btn2を押下すると、DataGridView1に選択したテーブルの内容が
表示されます。

ところが、下記コードでは、btn2押下時に、
共通変数のところでエラーが発生します。

****以下コード******
/////共通変数.vb/////
Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types

'---- Oracle 接続 ----
Public pConnectionStr As String = "***"
Public pUserId As String = "***"
Public pPassWord As String = "***"

Public mCON As New OracleConnection 'データベースコネクション
Public Sub DBConnect()

'DB接続
mCON.ConnectionString = "User Id=" & pUserId & _     ’ここにエラーがでます
"; PassWord=" & pPassWord & _  ’ここにエラーがでます
"; Data Source=" & pConnectionStr ’ここにエラーがでます

mCON.Open()
End Sub

Public Sub DBNonConnect()

'DB切断
mCON.Close()
mCON = Nothing

End Sub
End Module


/////btn2クリック時///////
Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDate.Click

Dim mCON As New Oracle.DataAccess.Client.OracleConnection
Dim da As New Oracle.DataAccess.Client.OracleDataAdapter("SELECT * FROM " & txtTableName.Text, mCON)
Dim ds As New DataSet

Call DBConnect()
da.Fill(ds, txtTableName.Text)

Me.DataGridView1.DataSource = ds
Me.DataGridView1.DataSource = ds.Tables(txtTableName.Text)

mCON.Close()
End If
End Sub

******コード終わり******

エラー内容は、NullReferenceExceptioはハンドルされませんでした。
       オブジェクト参照がオブジェクトインスタンスに設定されていません。
です。


btn1押下時は、共通変数を問題なくもってくることが出来ます。

****btn1のコード******
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim LSQL As String
Dim mCMD As New Oracle.DataAccess.Client.OracleCommand
Dim LRst As Oracle.DataAccess.Client.OracleDataReader

Call DBConnect()
LSQL = "select * from **** order by TABLE_NAME"

mCMD.Connection = mCON
mCMD.CommandText = LSQL
LRst = mCMD.ExecuteReader

Do While LRst.Read
'テーブル名を出力()
ListBox1.Items.Add(LRst("TABLE_NAME"))
Loop
' 終了処理
LRst.Close()
Call DBNonConnect()

End Sub
******************

btn2で、共通変数が上手く持ってこれていないと思うのですが、
どこに問題があるのでしょうか。
ためしに、共通変数を使わずに、btn2のところに直接コードを
記入すると、上手く表示はできました。(砂時計が動いたままですが・・)


0
引用返信 編集キー/
■6993 / inTopicNo.2)  Re[1]: 共通変数の設定方法について
□投稿者/ 黒い羊 二等兵(6回)-(2006/09/29(Fri) 18:02:21)

分類:[VB.NET] 

こんにちは 黒い羊です

btn2_Clickで
Dim mCON As New Oracle.DataAccess.Client.OracleConnection

と宣言していますが、Moduleでも

Public mCON As New OracleConnection

と同じ変数名で宣言しているからではないでしょうか?
参考になりますでしょうか?

0
引用返信 編集キー/
■6994 / inTopicNo.3)  Re[1]: 共通変数の設定方法について
□投稿者/ まどか 少将(249回)-(2006/09/29(Fri) 18:07:54)

分類:[VB.NET] 

原因はmCONがNothingだからです。
なぜエラー発生時にNothingの状態なのかを操作にあわせて順にコードを追ってみましょう。

またmCONという変数が2つありますよね?
変数にはスコープ(見える範囲)というものがあり、それが異なれば同じ名前の変数を作ることができます。
言い換えればそれらは名前が一緒でもまったくの別のものということです。

接続切断などは適切なタイミングでおこなわないとコードの保守性などが損なわれますので
原因がわかったら、今回のプログラムではどこでどうすることが一番かを一度考えてみてはと思います。

余談:
DBNonConnectという名前がありますが、一般的にはDisconnectですね。>切断する
こういう否定のための接頭語は意味によっていろいろあるので難しいですね。
#NonだとConnectionが無い(存在しない)という意味になります。

0
引用返信 編集キー/
■6998 / inTopicNo.4)  Re[2]: 共通変数の設定方法について
□投稿者/ みぃみ 二等兵(12回)-(2006/09/29(Fri) 18:28:06)

分類:[VB.NET] 

黒い羊さん まどかさん ご返信ありがとうございます。

mCONの宣言と、mCON=Nothingが原因ではないかという
ご指摘ありがとうございます。
これから検証して、ご指摘いただいた言葉をよく理解した上で
返信させていただきますので、結果報告はしばしお待ちください。
(おっしゃっていただいた言葉を理解するのにも
ネットで検索して調べないといけないくらいのLVですいません;;)

自分で質問の下手さ加減と知識の無さの恥ずかしさで
申し訳ない気持ちでいっぱいですが、つまづいた分だけ
上達できるようにがんばりたいと思います。
ご指導いただいて、本当に感謝です。^^



0
引用返信 編集キー/
■7056 / inTopicNo.5)  Re[3]: 共通変数の設定方法について
□投稿者/ みぃみ 二等兵(13回)-(2006/10/02(Mon) 13:07:04)

分類:[VB.NET] 

お世話になります。

共通変数の mCON=Nothingを削除して、
btn2のmCONを別の名前に変更して、少々手直しで
無事、表示ができました。
(DBNonConnectをDisconnectにも変更しておきました。)
ご指摘どうもありがとうございました^^


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -