VB2005 TableAdapter
VB2005 TableAdapterの使い方をあれこれやってみる。
本や、サイトにはこれはADO.NETではないような事が書かれている。
また、ものによってはTableAdapterを使ってやったほうが効率が良いなどと書かれている。
で、どちらを使うべきか?
管理人が??の点。
データアダプタで定義されたデータセットで、100フィールドあるテーブルの2フィールドだけ取得
で検索する場合、残りの98フィールドのからのスキーマ?まで取得していることになるらしい。?
パフォーマンスを追及する時に結局全部書き直しになりかねない?
Access2000形式にJETで接続したところトランザクションの実装が面倒らしい。
サンプルがないだけか?
Access2000はいつまで使えるかは不明だが、Access2007では読み込めるしAccess2003では2000形式が
デフォルトだったことを考えると確信はないがまだまだ使えるようだ。
因みにVista上では2000形式は使用できる。Access2007でも2000形式が作成可能である。
また、2007形式はWIN2000ではサポートされないらしい。(というのはOffice2007のOSにWIN2000が入っていないから。)
XPSP2以降とい言うことだ。
そのような事を考えるとJET4.0はまだ健在らしい。
TableAdapterの接続文字を任意の外部ファイルに持たせることができそうにない。
app名.exe.configというファイルに書かれているが、システムフォルダに放り込んではたぶんダメだろうと思う。
ユーザに勝手に書き換えられる可能性が出てくるだろう。
VB6で言うところのDataEnvironmentみたいなものだと思う。結局DataEnvironmentは使わなかった。
TableAdapterでは複雑なクエリ等は大丈夫か?に疑問点がる。
テーブル名に日本語が入っていると、自動的に日本語のソースになる。変えられるようだが変えるなら最初から書いたほうがいい?
良い点としては、ドラッグドロップで簡単なDBアプリができる。
初心者にはとっつきやすい。フィールド名(データ型付き)がプロパティー参照できるなど。
Public Class Form1
'コントロールボックスをFALSEに
'プロパティーで設定
'Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
Private Ds As New SampleDataSet
Private Ta As New SampleDataSetTableAdapters.t_顧客TableAdapter
Private tb As New SampleDataSet.t_顧客DataTable
''Private TableBind As New BindingSource
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'検索
Form2.code = Me.TextBox1.Text
Trace.WriteLine(Form2.F_GetMyDataset())
Form2.ShowDialog()
If Form2.SelectBol = True Then
Me.TextBox1.Text = Form2.code
'DBを検索して値を表示する
Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(Me.TextBox1.Text)) '抽出
Me.TextBox1.Text = Ds.t_顧客(0).ID.ToString()
Me.TextBox2.Text = Ds.t_顧客(0).NAME.ToString()
Ds.Dispose()
Ta.Dispose()
End If
Form2.Dispose()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'終了する必要があるすべてのメッセージ ポンプを通知し、メッセージが処理されると、すべてのアプリケーション ウィンドウを閉じます
Application.Exit()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
'保存
Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(Me.TextBox1.Text)) '抽出
'Ds.t_顧客(0).ID = Me.TextBox1.Text
'Ds.t_顧客(0).BeginEdit()
Ds.t_顧客(0).NAME = Me.TextBox2.Text
Debug.Print(Ds.t_顧客(0).NAME)
'Ds.t_顧客(0).EndEdit()
'Ds.t_顧客.AcceptChanges()
'編集された行を取得する
tb = CType(Ds.t_顧客.GetChanges(DataRowState.Modified), SampleDataSet.t_顧客DataTable)
''Using tx As New Transactions.TransactionScope()
' セッション参加登録
''この名前空間を使ったアプリケーション作成は、Windows 2000、Windows XP、Windows 2003 の各プラットフォームでのみサポートされます。Windows 98 や Windows ME のプラットフォームでトランザクションを作成すると、PlatformNotSupportedException がスローされます。
'Jet4.0でも利用できない?
Ta.Update(tb)
''tx.Complete()
''End Using
Catch ex As Exception
MessageBox.Show(ex.ToString, "保存", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Ds.Dispose()
Ta.Dispose()
End Sub
End Class
|
Public Class Form2
'コントロールボックスはFalseにする
Friend code As String
Friend SelectBol As Boolean
Private Ds As New SampleDataSet
Private Ta As New SampleDataSetTableAdapters.t_顧客TableAdapter
''Private tableKokyaku As New SampleDataSet.t_顧客DataTable
''Private TableBind As New BindingSource
Friend Function F_GetMyDataset() As Boolean
'DBに接続してでーたセットを取得
'データがなければFalseを返す
If code = "" Then
Ta.Fill(Ds.t_顧客)
Else
Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(code))
End If
' ''TableBind.DataSource = Ds
' ''TableBind.DataMember = "t_顧客"
DataGridView1.DataSource = Ds
DataGridView1.DataMember = "t_顧客"
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SelectBol = False '選択していない
Me.Close() 'フォームを閉じる
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If Me.TextBox1.Text = "" Then
Ta.Fill(Ds.t_顧客) 'すべて持ってくる
Else
Ta.SelectIDFillBy(Ds.t_顧客, Convert.ToInt32(Me.TextBox1.Text)) '抽出
''Ta.FillBy(Ds.t_顧客)
End If
' ''TableBind.DataSource = Ds
' ''TableBind.DataMember = "t_顧客"
'データグリッドビューに表示
DataGridView1.DataSource = Ds
DataGridView1.DataMember = "t_顧客"
Ds.Dispose()
Ta.Dispose()
''DataGridView1.Columns(1).Visible = False
End Sub
Private Sub DataGridView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick
'選択したら
Call DgSelect()
End Sub
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Call DgSelect()
End Sub
Private Sub DgSelect()
If DataGridView1.SelectedRows.Count > 0 Then
Debug.Print(DataGridView1.SelectedRows(0).Cells(0).Value.ToString())
code = DataGridView1.SelectedRows(0).Cells(0).Value.ToString()
SelectBol = True '選択した
Me.Close() 'フォームを閉じる
End If
End Sub
End Class
|
|