DataSetを別フォームで使用するには?

解決


335  2005-07-07 19:31:34  No: 123303  IP: [192.*.*.*]

現在VB.NET+Accessでアプリケーションを作成しているのですが、分からないことがあります。どなたかお分かりの方教えていただけますでしょうか。

メインフォームにあるDataSetのデータを別フォームで使用したいのですが、どのようにすればよいのか分かりません。

よろしくお願いいたします。

編集 削除
特攻隊長まるるう  2005-07-08 08:47:14  No: 123304  IP: [192.*.*.*]

別フォームに受け渡し用の関数作って引数で受け渡しして下さい。

編集 削除
ks  2005-07-09 14:03:15  No: 123305  IP: [192.*.*.*]

ツールボックスのデータで、Datasetを新しいフォームにドラッグ。で、ダイアログで「型指定されたデータセット(T)」を選択して、コンボボックスで欲しいデータセットを選択すれば、できると思いますが。

編集 削除
335  2005-07-11 19:51:09  No: 123306  IP: [192.*.*.*]

特攻隊長まるるうさん、ksさんご回答ありがとうございます。

はじめはValueClassにDataSetを格納して別フォームでデータを取ろうとしましたが、エラーが出てしまいました。多分コードの記述に問題があったのだと思います。

その後ksさんに教えていただいた方法でDataSetを別フォームに追加してみました。この場合DataSetにはメインフォームで取得したデータは格納されているのでしょうか。

最終的に実現したいことはメインフォームのコンボボックスに入力されたテキストでSQL文を作成して(条件指定に利用)データを取得、このデータを別フォームからテキスト ファイルに出力したいのですが。

よろしくお願いいたします。

編集 削除
ks  2005-07-12 09:34:05  No: 123307  IP: [192.*.*.*]

おそらく、メインフォームとサブフォーム?で別々にデータベースを呼び出すことになると思うので、メインフォームが変更(データを書き換え)されたら、保存しない限り、サブフォームに変更点は反映されないと思います。だから、メインフォームで取得したデータを、サブフォームを開く前に、一度保存(Updata)してしまえば、サブフォームでも同じように表示されると思います。

編集 削除
特攻隊長まるるう  2005-07-12 10:32:11  No: 123308  IP: [192.*.*.*]

>はじめはValueClassにDataSetを格納して別フォームでデータを取ろうとしましたが、
>エラーが出てしまいました。多分コードの記述に問題があったのだと思います。
だから何?ってこっちが聞きたいんだけど?(^^;)
・ValueClass の説明が無い。多分ユーザ定義のクラス。
・ValueClassにDataSetを格納…する必要がどこにある???質問は何だったですか?
DataSetをそのまま渡せばいいだけです。
・エラーが出てしまいました。でもエラー内容は公開しません???。…でも多分 ValueClass
をVBが見つけられなかったのでしょう。わざわざユーザ定義のクラスを作る必要無いのでパス。
・多分コードの記述に問題があったのだと思います。…でもコードは見せません???(^^;)
>最終的に実現したいことは〜
SQL文(String)だけ別フォームに渡して別フォームが検索すれば?

ちなみにこの手の質問をする人は『別フォーム』という言葉をよく使うので
過去ログ検索『別フォーム』すればサンプルが山の様にあります。

ks さんの方法を採用するみたいなのでボクの書き込みはスルーして下さい。返答要りません。

編集 削除
335  2005-07-12 16:45:29  No: 123309  IP: [192.*.*.*]

特攻隊長まるるうさん、ksさんご回答ありがとうございます。

メインフォームで取得したデータを更新する必要がないため、別の方法を探してみました。

特攻隊長まるるうさんにご指摘されたように過去ログを検索したところ、同じようなものがありました。私の調査不足でした。どうもすみませんでした。

次のようにしたところ、正常にデータを取得できました。

Module Module1
    Public f1 As Form1     
End Module

別フォーム
f1.OleDbDataAdapter1.Fill(DataSet11, "エクスポート")


ご回答いただきありがとうございました。

編集 削除
特攻隊長まるるう  2005-07-12 18:06:50  No: 123310  IP: [192.*.*.*]

標準モジュールに行っちゃったんだ(^^;)
[VB.NET]としてはあまり良くない手法かも?

基本的に、オブジェクトは変数を用意して New でインスタンスを生成して
使わなくなったら解放って流れで基礎をお勉強した方が後々お得です。
変数のスコープ(有効範囲)・オブジェクト指向・カプセル化…とか
いった概念を勉強すると、なぜ良くないか分かってくると思います。
また、勉強しに来て下さいね?w。その時にでも勉強していただければ
と思います。

編集 削除
ねろ  2005-07-13 10:12:20  No: 123311  IP: [192.*.*.*]

少しフォローすると、
最低でもクラスとインスタンスだけは理解しないと.NETは使えない。
Form1はクラスでインスタンスはMeであることを理解すると、
Form2側でForm1のインスタンスを参照したい場合、Form2側でもForm1の
インスタンスを用意して、Form1のインスタンスをForm2のForm1のインスタンスに
代入すれば良いことに気が付く、極簡単な例を示すと。

Form1側    
    Dim f2 As New Form2
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        f2.Show()
        f2.f1 = Me
    End Sub

Form2側
  Friend f1 As Form1

ここではForm2にForm1のインスタンス全体を渡しているが、もちろんForm1の中の
必要なインスタンスだけを渡す方法も有る。

編集 削除
335  2005-07-13 11:56:07  No: 123312  IP: [192.*.*.*]

特攻隊長まるるうさん、ねろさんご回答ありがとうございます。

VB.NETで標準モジュールを使用することについて調べてみました。
特攻体調まるるうさんがおっしゃるようにあまり良くない手法なのですね。
私はプログラミング初心者なので、まず基礎知識をしっかり勉強します。
この件に関しても、教えていただいたように標準モジュールを使用しない方法を考えてみます。

いろいろとご指摘いただきまして、ありがとうございました。
今後も質問させていただくことがあると思いますが、その際は是非お力をお貸しください。

編集 削除