データセットの数


はまー  2005-08-22 17:29:32  No: 124329  IP: [192.*.*.*]

(VB.NET、WinXP、Access)
先日はお世話になりました。度々申し訳ありませんがまた一つお聞きしたい
事があるのですがよろしくお願いします。

現在VB.NETを習得する上でSQLについてはほぼ無知状態なので基本的には
ウィザードを使用してデータアダプタ等を設定しているのですが、1つの
フォームデザイン上での個数制限みたいなものはありますか?

来月から実際に担当するであろう仕様書を見るとえらい盛り沢山な画面で
今の私が考えると10個も20個もアダプタが必要なのでは?とゆう状態でして…
実際のデータベースにはFillやUpdate等の時だけ接続とゆう認識なんですが
その分だけメモリ上にはデータセットは展開される訳ですよね?なんとなく
不安なんで参考までにと思い質問させていただきました。

編集 削除
特攻隊長まるるう  2005-08-22 18:09:05  No: 124330  IP: [192.*.*.*]

そもそもそんな事を考えなきゃいけないんなら、
必要に応じてオブジェクトのインスタンスを生成
するやり方を勉強すればいいじゃない。
設定する項目数は変わらないよ?

編集 削除
はまー  2005-08-22 19:01:10  No: 124331  IP: [192.*.*.*]

特攻隊長まるるうさん、度々お世話様です。

>必要に応じてオブジェクトのインスタンスを生成
>するやり方を勉強すればいいじゃない。
は、はい確かに・・・今はまだどこから手をつければといった感じではありますが。

やっと少しVB6に慣れてきた矢先に.NET習得命令が出てはや一月半
ややテンパってる状態なんで思わず書込みしちゃいましたが焦らず
勉強せんとまずいですね・・・(反省)

編集 削除
特攻隊長まるるう  2005-08-23 10:31:54  No: 124332  IP: [192.*.*.*]

>今はまだどこから手をつければといった感じではありますが。
そんな大層なモノなの?書き方は決まってるからウィザードで
設定できてれば何の苦もないはずですが???
[VBでデータベース]
http://homepage2.nifty.com/inform/vbdb/
↑下のほうに[VB.NET]のコードが載ってます。
基礎知識なら↓
[@IT:基礎解説:ADO.NET基礎講座]
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html
キーワードが分かったらヘルプで調べればサンプルが載ってます。
更にここの掲示板で過去ログ検索したり、WEB検索したり…。
手をつける順番ももう決まってるんですが何か?

それなりにプログラムの基礎が出来てる人なら勉強期間2日といった
ところです。

編集 削除
はまー  2005-08-25 22:47:21  No: 124333  IP: [192.*.*.*]

度々のレス恐れ入ります。
>それなりにプログラムの基礎が出来てる人なら勉強期間2日といったところです。
痛いところをつかれた感じです。VB6約半年、.NET一月半ですが基礎は
全然なってないなと実感しました。偶然にもご指摘の2日間でしたが
以下を作成してみました。

'[新規登録]ボタン
Private Sub btnEntry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEntry.Click

    If MessageBox.Show("新規登録しますか?", Me.Text, MessageBoxButtons.YesNo, _
                       MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = DialogResult.Yes Then

        '中略…登録画面本体のTableA新規登録処理(開発用ライブラリのクラス等で処理)

        'TableAの関連テーブルTableB〜TableKにレコード追加
        If Entry_TableB(EntryMode.AddNew) = False Then
            MessageBox.Show("TableB登録失敗", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return
        End If

        '中略…以降Entry_TableKまで実行

        MessageBox.Show("登録終了", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If
End Sub
'----------------------------------------------------------------------------------------------------
'[削除]ボタン
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click

    If MessageBox.Show("削除しますか?", Me.Text, MessageBoxButtons.YesNo, _
                       MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = DialogResult.Yes Then

        '中略…登録画面本体のTableA削除処理(開発用ライブラリのクラス等で処理)

        'TableAの関連テーブルTableB〜TableKのレコード削除
        If Entry_TableB(EntryMode.Delete) = False Then
            MessageBox.Show("TableB削除失敗", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return
        End If

        '中略…以降Entry_TableKまで実行

        MessageBox.Show("削除終了", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If
End Sub
'----------------------------------------------------------------------------------------------------
'TableBの登録・削除
Private Function Entry_TableB(ByVal syoriMode As ModuleCommon.EntryMode) As Boolean

    Dim wPath As String = ModuleCommon.Constant.mdbPath
    Dim wTable As String = "TableB"
    Dim wAdapter As OleDb.OleDbDataAdapter
    Dim wDataSet As New DataSet
    Dim wDataView As New DataView
    Dim wConnection As New OleDb.OleDbConnection
    Dim wBuilder As OleDb.OleDbCommandBuilder

    wConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                   "Data Source=" & wPath

    wAdapter = New OleDb.OleDbDataAdapter("SELECT " & wTable & ".*" & _
                                          " FROM " & wTable, wConnection)

    wBuilder = New OleDb.OleDbCommandBuilder(wAdapter)

    wAdapter.Fill(wDataSet, wTable)
    wDataView.Table = wDataSet.Tables(wTable)

    wDataView.RowFilter = "(FIELD01 = " & txtCODE1.Text & ")" & _
                      "AND (FIELD02 = " & txtCODE2.Text & ")" & _
                      "AND (FIELD03 = " & txtCODE3.Text & ")" & _
                      "AND (FIELD04 = " & txtCODE4.Text & ")"

    If syoriMode = EntryMode.AddNew Then

        If wDataView.Count > 0 Then
            MessageBox.Show("コード重複", Me.Text, _
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Return False
        Else
            Dim wAddRec As DataRowView = wDataView.AddNew
            wAddRec("FIELD01") = txtCODE1.Text
            wAddRec("FIELD02") = txtCODE2.Text
            wAddRec("FIELD03") = txtCODE3.Text
            wAddRec("FIELD04") = txtCODE4.Text
            wAddRec.EndEdit()
            wAdapter.Update(wDataSet, wTable)
            Return True
        End If

    ElseIf syoriMode = EntryMode.Delete Then

        If wDataView.Count > 0 Then
            Dim i As Integer
            For i = 0 To wDataView.Count - 1
                wDataView.Delete(i)
            Next

            wAdapter.Update(wDataSet, wTable)
            Return True
        Else
            MessageBox.Show("該当データなし", Me.Text, _
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Return False
        End If
    End If
End Function

とりあえずそれっぽく動いてくれてるようですが、何度か
wAdapter.Updateの所でエラーが出ました。確認のため裏で
MDBを開いて実際のテーブルを参照したりしてたので
そのせいでしょうか・・・

編集 削除
はまー  2005-08-25 22:56:30  No: 124334  IP: [192.*.*.*]

今回はあまり意味のない(質問になってない)ようなスレッドをたててしまい申し訳ありませんでした。

今までは.NET習得開始の際に渡された開発用ライブラリ内のテーブル操作
クラスのようなものを使用してました。それはウィザードで作成した
アダプタをインスタンスパラメータとして渡しいくつかの設定をすること
で追加・修正・削除他の処理を実行してくれるものでした。
今回使用するテーブルは上記のように本体以外に裏で登録するテーブルや
ロード時の表示用、ComboBox用などたくさんあるが全てをデザイン上で
ウィザード作成していいのかな?(そうゆう作り方でいいのか?)と
思ってしまった次第です。

半年程度とはいえVB6も経験した訳でコネクションやレコードセットの記述
も多少は見てきたはずなんで冷静に考えればソース上で接続、読込、更新
といったコードを記述する場合の勉強で手を付ける順が分からない
とゆうのはおかしいですね。そういった意味ではいい勉強になりました。
次に質問する事があった場合はもう少しマシな質問にしたいと思います。

編集 削除