(VB.NET、WinXP、Access)
先日はお世話になりました。度々申し訳ありませんがまた一つお聞きしたい
事があるのですがよろしくお願いします。
現在VB.NETを習得する上でSQLについてはほぼ無知状態なので基本的には
ウィザードを使用してデータアダプタ等を設定しているのですが、1つの
フォームデザイン上での個数制限みたいなものはありますか?
来月から実際に担当するであろう仕様書を見るとえらい盛り沢山な画面で
今の私が考えると10個も20個もアダプタが必要なのでは?とゆう状態でして…
実際のデータベースにはFillやUpdate等の時だけ接続とゆう認識なんですが
その分だけメモリ上にはデータセットは展開される訳ですよね?なんとなく
不安なんで参考までにと思い質問させていただきました。
そもそもそんな事を考えなきゃいけないんなら、
必要に応じてオブジェクトのインスタンスを生成
するやり方を勉強すればいいじゃない。
設定する項目数は変わらないよ?
特攻隊長まるるうさん、度々お世話様です。
>必要に応じてオブジェクトのインスタンスを生成
>するやり方を勉強すればいいじゃない。
は、はい確かに・・・今はまだどこから手をつければといった感じではありますが。
やっと少しVB6に慣れてきた矢先に.NET習得命令が出てはや一月半
ややテンパってる状態なんで思わず書込みしちゃいましたが焦らず
勉強せんとまずいですね・・・(反省)
>今はまだどこから手をつければといった感じではありますが。
そんな大層なモノなの?書き方は決まってるからウィザードで
設定できてれば何の苦もないはずですが???
[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日といった
ところです。
度々のレス恐れ入ります。
>それなりにプログラムの基礎が出来てる人なら勉強期間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を開いて実際のテーブルを参照したりしてたので
そのせいでしょうか・・・
今回はあまり意味のない(質問になってない)ようなスレッドをたててしまい申し訳ありませんでした。
今までは.NET習得開始の際に渡された開発用ライブラリ内のテーブル操作
クラスのようなものを使用してました。それはウィザードで作成した
アダプタをインスタンスパラメータとして渡しいくつかの設定をすること
で追加・修正・削除他の処理を実行してくれるものでした。
今回使用するテーブルは上記のように本体以外に裏で登録するテーブルや
ロード時の表示用、ComboBox用などたくさんあるが全てをデザイン上で
ウィザード作成していいのかな?(そうゆう作り方でいいのか?)と
思ってしまった次第です。
半年程度とはいえVB6も経験した訳でコネクションやレコードセットの記述
も多少は見てきたはずなんで冷静に考えればソース上で接続、読込、更新
といったコードを記述する場合の勉強で手を付ける順が分からない
とゆうのはおかしいですね。そういった意味ではいい勉強になりました。
次に質問する事があった場合はもう少しマシな質問にしたいと思います。