プロが教えるわが家の防犯対策術!

お世話になります。初めて投稿させていただきます。
VB6.0で下記のようなコードでコンボボックスcboMakerへフィールド値を格納しているのですがこのコードをVB2005のado.netで記述したいのですが可能でしょうか?可能であればどのようなコードを書けばよいのでしょうか。フィールドの値を1レコードづつ取得することは可能なのでしょうか?
初心者ですみません。宜しくお願いします。

Dim con As ADODB.Connection
Dim rec As ADODB.Recordset
Dim sql As String
Dim recCnt As Long

con = New ADODB.Connection
con.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & パス
con.Open()
rec = New ADODB.Recordset
sql = "SELECT * FROM " & テーブル名
rec.Open(sql, con, adOpenStatic, adLockReadOnly)

If rec.RecordCount < 1 Then
'レコードが存在しない
MsgBox("未登録です。", G_MB_CAUTION, G_SYSTEM_NAME)
Exit Function
Else
ReDim CboMakerId(rec.RecordCount)
End If

'コンボボックスに値を挿入 ※「.List(recCnt)」から値を挿入する

With Me.cboMaker
.Clear()
recCnt = 0
.List(recCnt) = ""
.ItemData(recCnt) = 0
Do Until rec.EOF
recCnt = recCnt + 1
.List(recCnt) = rec("Name")
.ItemData(recCnt) = rec("ID")
rec.MoveNext()
Loop
End With

Me.cboMaker.ListIndex = 0

rec.Close() : rec = Nothing
con.Close() : rec = Nothing

End Function

A 回答 (1件)

ADO.NETでは


DataSet,DatTable,DataColumn
DataConnection,DataAdapter, BaindingSource
などを使って行います

まず DataTableに列情報を DatatColumnを使って作成します
このテーブルを DataSetと結び付けます
BaindingSourceにDataSetとテーブルの関係を設定
ComboBoxのDataSource,DisplayMember,ValueMemberを設定DatatConnectionにデータベースとの接続を設定します
DataAdapterを使ってデータベースからDataSetへ読み込みます
といった手順です

dim col(1) as new DataColumn
Dim tbl as new DataTable("テーブル名")
dim ds as new DataSet

col(0) = new DataColumn("ID")
col(1) = new DataColumn("Name")
tbl.Columns.AddRange( col )

ds.tables.Add( tbl )

dim bind as new BindingSource
bind.DataSource = ds
bind.DataMember = "テーブル名"

dim cnn as new oleDb.OleDbDataConnection
cnn.connectionString = "接続用文字列"

dim adp as new OleDB.OleDBDataAdapter("SQL文",cnn )
adp.Fill( ds, "テーブル名")

cboMaker.DatSource = bind
cboMaker.DisplayMember = "Name"
cboMaker.ValueMember = "ID"

といった具合です

選択された項目の『ID』の取得は cboMaker.SelectedValue で取得できます

データセットにデータを読み込めれば コンボボックスに個別にデータを設定も可能です
dim n as integer
for each row as DataRow in ds.Tables("テーブル名")
  n = cboMaker.items.Add( Row("Name") )
next
といった具合です
しかし ItemDataプロパティが廃止されています
これと互換のある機能は VB互換性ライブラリの SetItemData/GetItemDataを使うことになります

SetItemData( cboMaker, n, row("ID") )

n = cboMaker.SelectedIndex
nID = GetItemData( cboMaker, n )
といった使い方です
# 参照設定や Imports互換性ライブラリを設定して使います

別の方法としては
IDEのメニューの『データ』から『新しいデータソースの作成』のウィザードに従ってデータソースを作ります
一度アプリをビルドします
ツールボックスの上部に 作成したデータセットのアイコンがあるのでこれを フォームにドラッグします
ツールボックスから BindingSourceアイコンをドラッグします
作成されたBindingSoueceのDataSourceに 先のデータセットオブジェクト名 DataMemberにテーブル名
cboMakerの DataSoure、DisplayMember、valueMemberを設定
といった具合です
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!