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

わんくま同盟

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

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


■87770 / )  Re[5]: 別フォームにデータを渡したい
□投稿者/ いまそかり (5回)-(2018/06/29(Fri) 10:29:53)
No87766 (WebSurfer さん) に返信

おはようございます。
WebSurferさん、回答ありがとうございます。

 
> 上記('Form1_Loadの呼び出し)は何でしょう? 意味がなさそうに見えるのですが。と言うよりこれがエラーの原因???
> 
> frm = New Form2(df) で Form2 を初期化する際に Form1 で生成した DataSet への参照を引数 df 
> 経由で渡して、その後 Form2 の Load イベントのハンドラで、渡された DataSet の情報を元に 
> Form2 に配置されている ComboBox を設定するのではないのですか?
> 
> であれば、そのコードは意味不明&多分不要なのですが・・・




早速指摘されたところを削除してみましたが、エラーは治りませんでした…。
なので、エラーを補足するためにtry catchで囲ってみました。


'ボタンクリックイベント(Form2が開く)
	Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       		
		Try

			Dim frm As Form2
        		frm = New Form2(df) 
        		frm.Show()  '(※1)

		Catch ave As AccessViolationException

		End Try

	End Sub


これで、(※1)に関するエラーは出なくなったのですが、


	'ここでDBから取得した値をコンボボックスに入れる
	Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
		
		'コンボボックスにDB内のテーブルを連結
		ComboBox1.DataSource = df.Tables("テーブル名") '(※2)

            	'コンボボックスに表示したいデータ名
   	        '実際に扱うデータをSelectValueで取得する
      	    	
	End Sub


次は(※2)のところでエラーが発生しました。
エラー内容:NullReferenceException(オブジェクト参照がオブジェクトインスタンスに設定されていません)

どうやらdfの中身がNothingになっていてエラーが出るみたいです。
そのため、Form1のForm1_Load内にあった

Dim ds As DataSet = New DataSet()

を消して、

'Form2のコンストラクタにデータを渡すための引数を入れる変数
	Dim df As DataSet
        ↓
	Dim df As DataSet = New DataSet()

に変えて、変数dsを全部dfにしたら、dfの中身はSystem.Data.DataSetとなり、
df.Tables("テーブル名")の中身は"テーブル名"となりました。

これで実行してみましたが、今度は実行中に応答なしになって、ちゃんと動作してくれませんでした。
何かあと一歩のところまでは来ているような気はするんですが…。
もしかして、dsをdfに変える必要はなかったんですかね…?
ちなみに、変数dsはForm1_Loadでテーブルからレコードを取得する際に

ds.Clear() と da.Fill(ds,"テーブル名") 

といった感じで使用していました。
(変数daは Dim da As New OleDbDataAdapter() です。)


もう少し考えてみますので、よければお力添えをお願いします。

返信 編集キー/


管理者用

- Child Tree -