JRA-VAN 競馬ソフト作成体験教室
Lesson 4

JRA-VAN 競馬ソフト作成体験教室

Lesson-4：JV－Data のダウンロード/読み込み進捗状況を表示する
当コーナーでは、Microsoft Visual Basic 2019 Professional Edition(以下 VB 2019 と省略)で「JRA-VAN Data Lab.」サービス対応の競馬ソフトを作成していく過程をステップアップ形式で解説していきます。
前回までで、実際に JV-Data をダウンロードして内容を表示する簡単な仕組みを実装しました。今回は、プログレスバーを追加して、JV-Data のダウンロード/読み込み処理の進捗情報を表示できるようにしてみましょう。

【 今回の目標 】
・プログレスバーを追加して JV-Data のダウンロード/読み込み進捗状況を表示する。
具体的には、プログレスバーを２本用意して、JV-Data のダウンロード進捗状況と読み込み進捗状況をそれぞれ表示する。
・JV-Link に実装されている以下のメソッドの使い方を理解する。
JVStatus メソッドで JV-Data のダウンロード進捗情報を取得する。

【 やってみよう 】① Lesson-3 までを実装したフォーム(frmMain)を含むプロジェクトを開きます。
（前回のレッスンの続きから開始するのであれば、この作業は必要ありません。
）② フォームにプログレスバー(ProgressBar)を２つ追加し、各 ProgressBar のプロパティを以下のように変更します。
上段の ProgressBar のデザイン－「(Name)」：prgDownload
下段の ProgressBar のデザイン－「(Name)」：prgJVRead[ 1/8 ]

JRA-VAN 競馬ソフト作成体験教室
Lesson 4[ ワンポイントメモ ]上段のプログレスバーでは JV-Data のダウンロードの進捗状況を、下段のプログレスバーでは JV-Data の読み込みの進捗状況をそれぞれ表示します。
③ フォームにタイマー(Timer)を追加し、プロパティを以下のように変更します。
デザイン－「(Name)」 ： tmrDownload
動作－「Enabled」： False動作－「Interval」： 500[ 2/8 ]

JRA-VAN 競馬ソフト作成体験教室Lesson 4[ ワンポイントメモ ]JV-Data のダウンロードは JVOpen 後、バックグラウンドで実行されるので、タイマーを用いて定期的に進捗状況をチェックします。
④ フォーム「frmMain」のコードエディタウィンドウを表示します。
（ソリューションエクスプローラの「From1.vb」右クリックし、メニューの中から「コードの表示」をクリックします。

⑤ コードエディタウィンドウ上部にある左側リストボックスから「frmMain」を選択後、以下のソースコードを入力します。

追加するコード
Private lDownloadCount As Long
Private JVOpenFlg As Boolean''JVOpen:総ダウロードファイル数''JVOpen 状態フラグ Opne 時:Ture[ソースコード 006-01][ 3/8 ]

JRA-VAN 競馬ソフト作成体験教室
Lesson 4⑥ コードエディタウィンドウで「データ取得」ボタンクリック時の処理を修正します（灰色部分は前回コーディング済）。

[ソースコード 006-02]

Private Sub btnGetJVData_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnGetJVData.Click
Dim lReturnCode As Long
TryDim strDataSpec As String'' 引数 JVOpen:ファイル識別子
Dim strFromTime As String'' 引数 JVOpen:データ提供日付
Dim lOption As Long'' 引数 JVOpen:オプション
Dim lReadCount As Long'' JVLink 戻り値
Dim strLastFileTimestamp As String '' JVOpen: 最新ファイルのタイムスタンプ
Const lBuffSize As Long = 110000
Const lNameSize As Integer = 256
Dim strBuff As String
Dim strFileName As String
Dim RaceInfo As JV_RA_RACE''JVRead:データ格納バッファサイズ''JVRead:ファイル名サイズ''JVRead:データ格納バッファ''JVRead:ダウンロードファイル名''レース詳細情報構造体'進捗表示初期設定
tmrDownload.Enabled = False
prgDownload.Value = 0
prgJVRead.Value = 0''タイマー停止''JVData ダウンロード進捗''JVData 読み込み進捗'引数設定
strDataSpec = "RACE"
strFromTime = "20050301000000"
lOption = "2"' JVLink ダウンロード処理
lReturnCode = Me.AxJVLink1.JVOpen(strDataSpec, strFromTime, lOption, _lReadCount, lDownloadCount, strLastFileTimestamp)'エラー判定If lReturnCode <> 0 Then
MsgBox("JVOpen エラー：" & lReturnCode)ElseMsgBox("戻り値 : " & lReturnCode & vbCrLf & _"読み込みファイル数 : " & lReadCount & vbCrLf & _"ダウンロードファイル数 : " & lDownloadCount & vbCrLf & _"タイムスタンプ : " & strLastFileTimestamp)'進捗表示プログレスバー最大値設定
Point1
If lDownloadCount = 0 Then
prgDownload.Maximum = 100''ダウンロード必要無し
prgDownload.Value = 100
Else
prgDownload.Maximum = lDownloadCounttmrDownload.Enabled = True''タイマー開始
End IfprgJVRead.Maximum = lReadCountIf lReadCount > 0 Then
Do
'バックグラウンドでの処理を実行
Application.DoEvents()
Point2'バッファ作成
strBuff = New String(vbNullChar, lBuffSize)[ 4/8 ]

JRA-VAN 競馬ソフト作成体験教室
Lesson 4

strFileName = New String(vbNullChar, lNameSize)'JVRead で１行読み込み
lReturnCode = Me.AxJVLink1.JVRead(strBuff, lBuffSize, _strFileName)'リターンコードにより処理を分枝Select Case lReturnCode
Case 0' 全ファイル読み込み終了
prgJVRead.Value = prgJVRead.Maximum'進捗表示
Exit Do
Case -1 ' ファイル切り替わり
prgJVRead.Value = prgJVRead.Value + 1
Case -3' ダウンロード中
Point3
Case -201' Init されてない
MsgBox("JVInit が行われていません。")
Exit Do
Case -203' Open されてない
MsgBox("JVOpen が行われていません。")
Exit Do
Case -503' ファイルがない
MsgBox(strFileName & "が存在しません。")
Exit Do
Case Is > 0 ' 正常読み込み'レコード種別 ID の識別
If Mid(strBuff, 1, 2) = "RA" Then
'レース詳細のみ処理'レース詳細構造体への展開
RaceInfo.SetData(strBuff)'データ表示rtbData.AppendText( _"年:" & RaceInfo.id.Year & _" 月日:" & RaceInfo.id.MonthDay & _" 場:" & RaceInfo.id.JyoCD & _" 回次:" & RaceInfo.id.Kaiji & _" 日次:" & RaceInfo.id.Nichiji & _" Ｒ:" & RaceInfo.id.RaceNum & _" レース名:" & RaceInfo.RaceInfo.Ryakusyo10 _& vbCrLf)
End IfEnd SelectLoop While (1)End IfPoint4'タイマ有効時は、無効化する
If tmrDownload.Enabled = True Then
tmrDownload.Enabled = False
prgDownload.Value = prgDownload.Maximum
End IfEnd IfCatch
Debug.WriteLine(Err.Description)
Exit Sub
End Try'JVLink 終了処理
lReturnCode = Me.AxJVLink1.JVClose()
If lReturnCode <> 0 Then
MsgBox("JVClse エラー：" & lReturnCode)End IfEnd Sub[ 5/8 ]

JRA-VAN 競馬ソフト作成体験教室
Lesson 4・Point１
JV-Data をダウンロードする必要がなければ、ダウンロード進捗状況を 100%にしてしまう。この場合タイマーを動かす必要はない。
・Point２
ループ毎に DoEvents 処理を実行し、他のイベント（この場合タイマーイベント）処理が行われるための隙間を作ります。
・Point３
１ファイル読み込む毎に全読み込みファイル数の対する JV-Data 読み込み進捗状
況を表すプログレスバーを進めます。
・Point４
JV-Data のダウンロード処理の進捗状況が 100%になる前に JV-Data の読み込み処理の進捗状況が 100%になってしまった場合のための処理を記述します。これを記述しておかないと、タイマー間隔を長く設定した際にエラーが発生する可能性があります。
な お 、 Lesson-3 で プ ロ シ ー ジ ャ 「 btnGetJVData_Click () 」 の 中 で 宣 言 し た
lDownloadCount は削除しておきます。

コードエディタウィンドウの左側リストボックスから「tmrDownload」を、右側リストボックスから「Tick」を選択すると、tmrDownload のメソッドが追加されるので、以下の[ソースコード 006-03]を追加します。

ここにソースコードを追加[ ワンポイントメモ ]フォームの下の「tmrDownload」アイコンをダブルクリックしても tmrDownloadのメソッドが追加されます。

[ 6/8 ]

JRA-VAN 競馬ソフト作成体験教室
Lesson 4

Private Sub tmrDownload_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Handles tmrDownload.Tick
Dim lReturnCode As Long''JVLink返値'JVLinkダウンロード進捗率
lReturnCode = AxJVLink1.JVStatus''ダウンロード済のファイル数を返す'エラー判定If lReturnCode < 0 Then'エラー
MsgBox("JVStatusエラー:" & lReturnCode)'タイマー停止
tmrDownload.Enabled = False'JVLink終了処理
lReturnCode = Me.AxJVLink1.JVClose()
If lReturnCode <> 0 Then
MsgBox("JVClseエラー：" & lReturnCode)End IfElseIf lReturnCode < lDownloadCount Then
'ダウンロード中
Point1'プログレス表示
prgDownload.Value = lReturnCode
ElseIf lReturnCode = lDownloadCount Then
'ダウンロード完了'タイマー停止
tmrDownload.Enabled = False'プログレス表示
prgDownload.Value = lReturnCode
End IfEnd Sub[ソースコード 006-03]③でタイマーを追加したときに、「Interval」に 500 を設定したので、タイマーがスタートしてから 500 ms ごとにこのメソッドが呼び出されます。
・Point１
ダウンロード済みのファイル数を取得してダウンロード用のプログレスバーのValue プロパティに設定することにより、プログレスバーの表示を更新します。

[ 7/8 ]

JRA-VAN 競馬ソフト作成体験教室
Lesson 4【 確認しよう 】
それでは、実際に動かしてみましょう。
① メニューから「デバッグ」→「デバッグ開始」を選択し、プログラムを実行します。
エラーが発生した場合は、タスク一覧にエラーメッセージが表示されるので、正しく修正してエラーが無くなるまでビルドします。
② JV-Link を使用するための「利用キー」を設定していない場合は、メインフォーム上のメニューから「設定」→「JV-Link の設定」を選択し、「利用キー」を設定します（詳細は Lesson-1 を参照）。
③ フォームの「データ取得」ボタンをクリックすると、メッセージボックスがポップアップします。メッセージボックスには、リターンコードや読み込みファイル数、ダウンロードファイル数、最新読み込みファイルのタイムスタンプが表示されます。
これらの数値は、実行するタイミングによって異なります。詳しくは、Lesson-2 をご覧下さい。
④ メッセージボックスを「OK」で閉じると、前回同様、レース詳細情報のうち「開催年、開催月日、競馬場コード、開催回、開催日、レース番号、競走名略称 10 文字」が表示されます。
JV-Data のダウンロード進捗状況や読み込み進捗状況は上下のプログレスバーで確認することができます。

[ ワンポイントメモ ]Lesson-2 を参考にダウンロードすべきファイルが「cache」フォルダに存在する場合と存在しない場合で、プログレスバーの動きの違いを比べてみましょう。

[ 8/8 ]