- - PR -
DataSourceの効果的な使用法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-21 13:09
環境:Windows XP Home Edition
Visual Studio 2005 DB :Access2000 VB.netを使用し、マスタのテーブルから取得したデータを、DataTable型で持ちコンボボックスのDataSourceに設定し、別のテーブルへ選択されたデータを登録する処理を作ろうとしています。 フォーム上には上記コンボボックスを6つ用意し(DataSourceは同一のマスタから取得)、それに1つずつ対応するコンボボックスをさらに6つ用意し(別のマスタからDataSourceを取得)、それぞれのコンボボックスで選択されたデータを6レコード、ワンアクションで登録するつもりなのですが、現在考えている処理より効率よく行う事が出来ないか質問させてください。 コンボボックスは以前こちらで質問させていただいた、コントロールの配列を使用する方法を用い cboA=New ComboBox(){cboA1,cboA2,cboA3,cboA4,cboA5,cboA6} cboB=New ComboBox(){cboB1,cboB2,cboB3,cboB4,cboB5,cboB6} の2つの配列をモジュールレベルで宣言し作成しています。 そして、マスタAのデータをcboAのアイテム、マスタBのデータをcboBのアイテムとして、選択されたデータを別のテーブルに登録します。 そのcboA、cboBのアイテムを設定する所になるのですが、以下の現在考えているロジックで行うと、マスタへのアクセス数が合計12回になる為処理が多少遅く感じます。 以下現在のロジック Private Sub setCommboBox() Dim SQLCm As OleDbCommand = clsDbCon.pdbcn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim strSQL1, strSQL2 As String Dim intCnt As Integer Dim Table1(0 To 5), Table2(0 To 5) As DataTable 'マスタA strSQL1 = "SELECT DATA_A1, DATA_A2 FROM M_A " 'マスタB strSQL2 = "SELECT DATA_B1, DATA_B2 FROM M_B " For intCnt = 0 To 5 'テーブルの宣言 Table1(intCnt) = New DataTable Table2(intCnt) = New DataTable 'マスタAのSQL文のセット SQLCm.CommandText = strSQL1 '実行 Adapter.Fill(Table1(intCnt)) 'マスタBのSQL文のセット SQLCm.CommandText = strSQL2 '実行 Adapter.Fill(Table2(intCnt)) 'コンボにデータをセット cboA(intCnt).DataSource = Table1(intCnt) cboA(intCnt).DisplayMember = "DATA_A2" cboB(intCnt).DataSource = Table2(intCnt) cboB(intCnt).DisplayMember = "DATA_B2" Next '解放 Adapter.Dispose() SQLCm.Dispose() End Sub DataTableの取得を2回だけにして、DataSourceをなんとか設定できないか試したのですが、そういう処理を見つけることができませんでした。 試したことは Table1とTable2をそのままデータソースに入れると、それぞれが全のコンボボックスが、同一データソースと言う事で連動して動く それならと思い、Table1とTable2を配列にして、Adapter.Fill(Table1(0))でtable1(0)にデータを取得した後 Table1(1) = Table1(0)と言った形で、データソースを別にしたつもりの処理を考えたのですが 同一のデータソースと言う形で1つのコンボを選択すると他の同一アイテムのコンボも連動して変更されるという状態で諦める と言う状態です。 以前質問させていただいた時から、.netを離れ別のVB6やJava、ASPなどの業務を行っていた為、.netに関する知識はそれほど成長出来ていない現状で申し訳ない上に わかりづらいところも多々あるかと思いますが、DataSourceに限らず何か良い実現方法が有ればアドバイスいただけたら助かります。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-04-21 14:12
| ||||||||
|
投稿日時: 2008-04-21 15:41
返信ありがとうございます。
おかげさまでコピーメソッドを使用しデータベースへのアクセスを2回に抑える事ができました。 こういう事に気付け無いことが恥ずかしい限りですが、今後に生かして勉強を進めて行こうと思います。 ありがとうございました。 |
1