JRA公式競馬データ配信サービス JRA-VAN Data Lab.

JRA-VAN DataLab.

競馬ソフト開発コーナー

プログラミング質問広場

本掲示板は、プログラミングに関する情報を作者様同士で共有・議論していただく場として用意いたしました。
JV-Link、JV-Dataに直接関連しない(一般論としてのプログラミング方法やAPI・メソッドの利用法などの)スレッドはこちらに立ててください。

一括表示 リストに戻る
タイトル教えて下さい
記事No31
投稿日: 2007/12/21(Fri) 07:28
投稿者素人以前
以前提供されていた出馬表サンプルの中の

Dim dbRS As ADODB.Recordset
Dim dbFld As ADODB.Fields

Dim strSQL As String
'strSQL = "SELECT distinct Year, MonthDay FROM RACE O
RDER BY Year desc, MonthDay desc"
' 地方・海外レース(データ区分"A","B"
)を除外
strSQL = "SELECT distinct Year, MonthDay FROM RACE WHERE n
ot DataKubun in ('A','B') ORDER BY Year desc, MonthD
ay desc"

' コンボボックスのクリア
cmbYMD.Text = ""
cmbYMD.Items.Clear()

' レコードセットのオープン
dbRS = New ADODB.Recordset()
dbRS.Open(strSQL, gCon, ADODB.CursorTypeEnum.adOpenForwardOnly,
ADODB.LockTypeEnum.adLockPessimistic)

While Not dbRS.EOF
' フィールドの取得
dbFld = dbRS.Fields

cmbYMD.Items.Add(dbFld("Year").Value() + dbFld(&q
uot;MonthDay").Value())

dbRS.MoveNext()

End While

この部分で ComboBoxに年月日が表示されると思うのですが
ソースをRecordsetではなくDataTableとした場合
一つのComboBoxに年月日プラスJyoCDを表示させるには
どうコーディングすれば良いのでしょうか。

VB2005を使用しています。

タイトルRe: 教えて下さい
記事No33
投稿日: 2008/01/07(Mon) 21:38
投稿者通りすがり
まず、RecordSetのままJyoCDを表示するのであれば、SQLを
strSQL = "SELECT distinct Year, MonthDay FROM RACE WHERE not DataKubun in ('A','B') ORDER BY Year desc, MonthDay desc"

strSQL = "SELECT distinct Year, MonthDay, JyoCD FROM RACE WHERE not DataKubun in ('A','B') ORDER BY Year desc, MonthDay desc"
のように変更して、さらにcmbYMD.Items.Addを
cmbYMD.Items.Add(dbFld("Year").Value() + dbFld("MonthDay").Value() + " " + dbFld("JyoCD").Value())
とかにすればできると思いますが、これをDataTableで行うっていうのは、ADODBをADO.NETに書き換えるということですよね?(違っていたらすみません。)
だとすれば2つは別物なので、ソースをほとんど書き直すっていうことになると思います。

開発体験教室の6と7を理解していれば簡単なのでしょうが…。


で、私もちゃんと理解できていない為、勉強がてら書いてみました。
前提として
・OleDbDataAdapter1をData.mdbを接続対象として構成しておく
・同、上記でSQLステートメントに適切なSQLを設定しておく
・OleDbDataAdapter1のデータセットをDataSet1として生成しておく
という作業が行われている必要がありますが、当方の環境であれば以下で動作しました。

ADODBのコーディングをADO.NETで書き換えているつもりですが誤りがありましたら識者の方ご指摘いただけると助かります。
---------------------------------------
'Dim dbRS As ADODB.Recordset
'Dim dbFld As ADODB.Fields
Dim dbds As New DataSet1()
Dim dr As DataRow

'Dim strSQL As String
'strSQL = "SELECT distinct Year, MonthDay FROM RACE O
RDER BY Year desc, MonthDay desc"
' 地方・海外レース(データ区分"A","B")を除外
'strSQL = "SELECT distinct Year, MonthDay, JyoCD FROM
RACE WHERE not DataKubun in ('A','B') ORDER BY Year desc, MonthDay desc"

' コンボボックスのクリア
cmbYMD.Text = ""
cmbYMD.Items.Clear()

' レコードセットのオープン
'dbRS = New ADODB.Recordset()
'dbRS.Open(strSQL, gCon, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockPessimistic)
OleDbDataAdapter1.Fill(dbds)

'While Not dbRS.EOF
For Each dr In dbds.RACE.Rows
' フィールドの取得
'dbFld = dbRS.Fields

'cmbYMD.Items.Add(dbFld("Year").Value() + dbFld("MonthDay").Value() + " " + dbFld("JyoCD").Value())
cmbYMD.Items.Add(dr("Year") + dr("MonthDay") + " " + dr("JyoCD"))

'dbRS.MoveNext()

'End While
Next
---------------------------------------
(ちなみに当方VB2002ですが、大きな違いはないと思います、多分)

タイトルRe^2: 教えて下さい
記事No34
投稿日: 2008/01/10(Thu) 08:58
投稿者素人以前
通りすがりさん、有り難う御座います。
そうです、ADOをADO.NETに書き換えるという事です。(説明が変で申し訳ない
です)
本当に、有り難う御座いました。

ウィンドウを閉じる