DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データベース接続に関して

環境/言語:[VB.NET/Framework 1.1/Windows2000 RDMS:Sybase]
分類:[.NET]

2004/10/08(Fri) 11:54:09 編集(投稿者)

いつもお世話になります。ろろと申します。

ODBC経由したデータベースの接続について混乱しています。

Form1
・ユーザー名パスワードをもったテキストボックスを配置。
・ログインボタンにてユーザ名、パスワードをつかってデータベースに接続して
データベースからの認証を受ける。(ここでデータベースより切断する)
--------------For1.Code--------------------------
Public con As OdbcConnection
con = New OdbcConnection("DSN=ODBC;UID=" & TextBox1.Text & ";PWD=" & TextBox2.Text)
Try
con.Open()
' Insert code to process data.
Catch ex As Exception
MessageBox.Show("データベースに接続できませんでした。")
Finally
con.Close()
End Try
End Sub
----------------------------------------------
ここでForm2を開いたときに接続情報を持って行きたいと考えています。

いま、Form2のロードイベントに以下のように書いています。

------------Form2.Load
Dim Myobject As Form1
Dim con As OdbcConnection
con = Myobject.con

OdbcConnection1.ConnectionString = con.ConnectionString
OdbcDataAdapter1.Fill(DataSet11, "test_vbnet")
------------------------------------------------------------
これでは3行目のcon = Myobject.conで
"オブジェクト参照がオブジェクト インスタンスに設定されていません。"
とエラーが発生します。

やりたいことをもう一度まとめます。
1.最初のフォームでデータベースに対してユーザ認証を行いたい。
(そのときODBCのダイアログは出さないようにする)
2.以降のフォームでODBCConnectionのコンポーネントに、
1のフォームで接続が成功した際のConnectionStringを設定したい。
となります。

どなたかご存じの方はいらっしゃいませんでしょうか?
よろしくお願いいたします。
■No6578に返信(ろろさんの記事)
> "オブジェクト参照がオブジェクト インスタンスに設定されていません。"

そのまんまだと思いますが?
返信ありがとうございます。

> そのまんまだと思いますが?


オブジェクト インスタンスはいったい何なのでしょうか?

オブジェクト参照というのはcon = Myobject.conの部分だと思っています。
For1というオブジェクトのconを参照するということですので。

そのためにはForm1があればよいと思っているのですが、VisualBasicでは
違うのでしょうか?
そのため、Myobjectという名前でForm1を参照するように、
Dim MyObject As Form1を定義したのですが・・・。

何となく、Form1への参照が出来ていないため、
MyObject.Conでエラーになっていると思うのですが、
エラーメッセージをそのまま検索したのですが、これといって
よく分かる説明がありませんでした。
■No6583に返信(ろろさんの記事)
> オブジェクト インスタンスはいったい何なのでしょうか?

難しい言葉に思えるかもしれませんが、大した話ではありません。
調べてみればわかります。

> オブジェクト参照というのはcon = Myobject.conの部分だと思っています。
> For1というオブジェクトのconを参照するということですので。

はい、確かに仰る通りです。
というより、オブジェクト指向言語では、ほぼオブジェクトの参照で成り立ってます。

> そのためにはForm1があればよいと思っているのですが、VisualBasicでは
> 違うのでしょうか?

ただし、conがForm1のメンバということを考えますと、
プロパティやメソッドを通してアクセスするのが普通かと思います。
明示化しておくと第三者にもわかりやすいですし、クラスとはそういうモノですから。

> そのため、Myobjectという名前でForm1を参照するように、
> Dim MyObject As Form1を定義したのですが・・・。
> 何となく、Form1への参照が出来ていないため、
> MyObject.Conでエラーになっていると思うのですが、
> エラーメッセージをそのまま検索したのですが、これといって
> よく分かる説明がありませんでした。

何となく判っているようですね。
インスタンス化されていなければ、(フツーは)操作できません。:-)

× Dim Myobject As Form1
○ Dim Myobject As New Form1

とすれば、Form1の、conにはアクセスできますね。
ただし、Myobjectが呼び出し側のForm1と同一インスタンスではないです。
Myobjectは使わず、本来はForm1の「Me」を引数に渡してやるか、
同一インスタンスを広域な変数にしておくべきでしょう。
返信ありがとうございます。

> とすれば、Form1の、conにはアクセスできますね。
> ただし、Myobjectが呼び出し側のForm1と同一インスタンスではないです。
> Myobjectは使わず、本来はForm1の「Me」を引数に渡してやるか、
> 同一インスタンスを広域な変数にしておくべきでしょう。

まだ余りよく分かってないですが、一応やりたいことは出来ました。
当初の予定ではConnectionStringを渡していましたが、
DataAdapter.Fillの部分で今度はエラーになってしまったため、
少し他の方法を考えました。

結局Form1でのログイン時に
Dim f As Form
f = New Form2(TextBox1.Text, TextBox2.Text)
f.Show()

とし、

Form2側で再度ConnectionStringを作成したところ、
データが表示されることを確認しました。

オブジェクトに関しては初めて扱う物で、もう少し勉強が必要そうです。
ありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板