トップ回答者
保存処理の完了

質問
-
AccessデータベースにOledbReaderで検索し、指定のデータが無ければ、データをダウンロードして
データベーステーブルにそのデータを追加保存してcloseし、
再度、検索するとそのデータは見つかりません。これは連続処理でします。
このとき、そのデータはデータベースにはきちんと保存されているのですが・・・。
二度、上記の処理をすると必ず、最初の検索で見つかります。保存されているので当然ですよね。
上記の処理は不安定で上手く行くときも有れば、上記の様に見つからないこともあります。
このような場合、どのような処理をすれば安定するのでしょうか?
スレッド処理とかするのでしょうか?
スレッド処理とか良く分かりません。
回答
すべての返信
-
お世話になります。
次のような感じなのですが、実際はもっとこてこてしています。
Dim clsDL as new claseDownLoad
Dim FLG as String="NO"
Private Sub GetJyoho()
DatagetJyoho
If FLG="OK" Then
DispJyoho ' 情報表示
Else
clsDL.jyohoDownload ' サーバーからダウンロードしてODBCでJyoho_TABLE にセットする
' ここに次の一行を入れると必ずデータを表示出来るように成りました。がスマートではない。5秒は長い
’ System.Threading.Thread.Sleep(5000)
FLG="NO"
DatagetJyohoIf FLG="OK" Then
DispJyoho ' 情報表示
End if
End If End SubPrivate Sub DatagetJyoho()
Dim i As Integer
Dim ii As Short
Dim strSQL As String
Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(AdoConectString & DB_Select("Jyoho_TABLE "))
Dim DRead As OleDb.OleDbDataReader
Dim com As OleDb.OleDbCommand
strSQL = "Select * From Jyoho_TABLE Where 作成年='" & stjkNEW.Substring(0, 4) & "' and 作成月日='・・・・・・・"
cn.Open()
com = New OleDb.OleDbCommand(strSQL, cn)
DRead = com.ExecuteReader
FGtn = "" : FGnow = ""
If DRead.Read = True Then・・・・・・・・・・
FLG="OK"
else・・・・・・・・
End If
End Sub
-
根本的な解決策ではないですが、単なるタイミングの問題らしいと推測し
て・・・> clsDL.jyohoDownload ' サーバーからダウンロードしてODBCでJyoho_TABLE にセットする
ということは、その時点ですでに DispJyoho で情報を表示するための情報
は clsDL.jyohoDownload の中で取得できているはずですよね?そうであれば、clsDL.jyohoDownload の中で、「Jyoho_TABLE にセット」に
成功したことを判定して(例えば OleDbCommand.ExecuteNonQuery メソッドの戻り値などで) 、成功してたらその取得済みの情報を表示するというよ
うにしてはいかがですか?わざわざ DatagetJyoho で Jyoho_TABLE から情報を取ってくる必要はなさ
そうに思えますが、もし何らかの理由でその必要があるという事でしたら失礼しました。上記レスは無視してください。