VB.NET


メインのメソッド(以降、メイン)から、他のメソッド(以降、サブ)をコールして、
DBから項目の情報を取得したいです。

そこで質問なのですが、
情報の受け渡しはどのようにするのが適当でしょうか?

取得したい情報は次のような感じです。
・情報が取得できたかどうか(仮にTrue/Falseで取得するとします。)
・項目の数はやや多い。(仮にString型5個ということにします)
・サブ呼び出し時にセットする引数は、とりあえず無しということにします。

※サブからの取得の方法を知りたいです。
※引数(ByRef)での受け渡しだと、多すぎてやですよね?戻り値での受け渡しでしょうか?
※「私はこのようにしている」「こうするのが定石だ」というのが知りたいです。

回答の条件
  • 1人2回まで
  • 登録:2006/12/31 07:10:10
  • 終了:2007/01/05 09:12:43

ベストアンサー

id:bankband No.1

bankband回答回数23ベストアンサー獲得回数42006/12/31 17:51:42

ポイント60pt

私のこの質問に興味があるので,回答したいと思います。

一つの方法として構造体を利用してはどうでしょうか?

・サブで取得した情報を戻り値で構造体として返す

・構造体が存在する場合は情報取得成功

・構造体が存在しない(Nothing)場合は情報取得失敗


以下はサンプルソースです。

'=====================================

' 構造体定義

'=====================================

    Private Structure Struct

        Public A As String

        Public B As String

        Public C As String

        Public D As String

        Public E As String

    End Structure

'=====================================

' メイン

'=====================================

    Public Sub main()

        '構造体にデータを取得

        Dim st As Struct

        st = getDBData()

        'データ存在チェック

        If IsNothing(st) Then

            'データが取得できなかった場合

        End If

    End Sub

'=====================================

' DB取得用

'=====================================

    Private Function getDBData() As Struct

        '戻り値用の構造体をインスタンス

        Dim data As New Struct

        'データが取得できた場合の戻り値

        data.A = "000"

        data.B = "001"

        data.C = "002"

        data.D = "003"

        data.E = "004"

        Return data

        'データが取得できなかった場合の戻り値

        Return Nothing

    End Function

id:wwworz

丁寧な回答ありがとうございます。

クラスを採用しても同様に実現できるかと思いますが、あえて構造体を採用した理由はなんでしょうか?(回答枠を増やしました)

できまたら教えて頂けますでしょうか?

2007/01/01 10:34:08

その他の回答(1件)

id:bankband No.1

bankband回答回数23ベストアンサー獲得回数42006/12/31 17:51:42ここでベストアンサー

ポイント60pt

私のこの質問に興味があるので,回答したいと思います。

一つの方法として構造体を利用してはどうでしょうか?

・サブで取得した情報を戻り値で構造体として返す

・構造体が存在する場合は情報取得成功

・構造体が存在しない(Nothing)場合は情報取得失敗


以下はサンプルソースです。

'=====================================

' 構造体定義

'=====================================

    Private Structure Struct

        Public A As String

        Public B As String

        Public C As String

        Public D As String

        Public E As String

    End Structure

'=====================================

' メイン

'=====================================

    Public Sub main()

        '構造体にデータを取得

        Dim st As Struct

        st = getDBData()

        'データ存在チェック

        If IsNothing(st) Then

            'データが取得できなかった場合

        End If

    End Sub

'=====================================

' DB取得用

'=====================================

    Private Function getDBData() As Struct

        '戻り値用の構造体をインスタンス

        Dim data As New Struct

        'データが取得できた場合の戻り値

        data.A = "000"

        data.B = "001"

        data.C = "002"

        data.D = "003"

        data.E = "004"

        Return data

        'データが取得できなかった場合の戻り値

        Return Nothing

    End Function

id:wwworz

丁寧な回答ありがとうございます。

クラスを採用しても同様に実現できるかと思いますが、あえて構造体を採用した理由はなんでしょうか?(回答枠を増やしました)

できまたら教えて頂けますでしょうか?

2007/01/01 10:34:08
id:bankband No.2

bankband回答回数23ベストアンサー獲得回数42007/01/01 19:38:30

ポイント40pt

あえて構造体を利用した理由ですが,

この質問の内容だったら

構造体の方がメモリを消費せずに動作がはやいと思いました。

取得したいデータ量が多かったり、汎用的にコーディングする場合は

Classにするかもしれません。

構造体ではなく単純に配列を戻り値にしてもよいと思いますが,

配列だと他人がメンテナンスする場合を考えてのコメントが増えたり,

現在は仮にString型5つのデータですが,複数の型のデータを扱う場合に

めんどくさいんで一つの方法として構造体をお勧めしました。

http://www12.plala.or.jp/dokugaku/lecture/6/4.html

id:wwworz

根拠といい、とても満足のいく回答です。

とても有難いです。

ありがとうございました。


もう少し回答を募集してみます。

2007/01/01 22:06:33

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません