VB.NETでコーディング、デバッグ実行中です。
「区分マスタ」テーブルには、現在5レコードのデータがありますが、先頭から2レコードしかデータを取得してくれません。
oDataReader.Read()が2回目でFalseとなってWhileが終了してしまいます。
原因お分かりの方、いらっしゃいますでしょうか?
-----------------------------------------------
Public Function getKubunAll(ByRef kubunInfo() As structKubun) As String
Const strSelectSyain As String = "SELECT * FROM 区分マスタ ORDER BY 区分コード"
Dim oConn As New OleDbConnection
Dim oCommand As New OleDbCommand
Dim oDataReader As OleDbDataReader
Dim i As Integer
Try
oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\TEST.mdb"
oCommand.Connection = oConn
oCommand.CommandText = strSelectSyain
oConn.Open()
oDataReader = oCommand.ExecuteReader()
i = -1
While oDataReader.Read()
'レコードが取得できた時の処理
i = i + 1
ReDim Preserve kubunInfo(i)
kubunInfo(i).kubunCode = CStr(oDataReader("区分コード"))
kubunInfo(i).syoriNaiyou = CStr(oDataReader("処理内容"))
End While
・
・
・
・
End Function
詳細エラーコードはなんですか?
それを見れば直ぐ分かると思いますが。
とりあえず、
SELECT * FROM 区分マスタ ORDER BY 区分コード
の部分を
SELECT count(*) FROM 区分マスタ
にしてみて、実際に5件取れているのか確認してみてはどうでしょうか。
ACCESSで確認はしているとは思いますが、駄目押しで確認してみてください。
5件となるようであれば、データを疑ってみましょう。
詳細エラーコードですが、エラーは出ません。
コード自体は正常に流れていますが、
While oDataReader.Read()
'レコードが取得できた時の処理
i = i + 1
ReDim Preserve kubunInfo(i)
kubunInfo(i).kubunCode = CStr(oDataReader("区分コード"))
kubunInfo(i).syoriNaiyou = CStr(oDataReader("処理内容"))
End While
の部分で、2レコード分しか回っていないのです。
アクセスデータもチェックしてみましたが、特に問題はなさそうでした。
“oDataReader.Read()”は、最終レコードに行き着くまでは、
Trueを返すはずだと理解していますが、2レコード分でFalseを
返してしまっています。
やはり、アクセスのテーブルに、どこか問題があるのでしょうか?
ちなみに、Const strSelectSyain As String = "SELECT count(*) FROM 区分マスタ"
として、実行してみましたが、今度は「レコード取得エラー」ウインドが出てしまいました。
(以下、ソースコードの続き)
------------------------------------
Public Function getKubunAll(ByRef kubunInfo() As structKubun) As String
・
・
・
・
'取得レコード数のチェック
If kubunInfo Is Nothing Then
'レコードがなかった時の処理
Return "区分マスタテーブルにレコードがありません"
Else
Return ""
End If
Catch oExcept As Exception
'例外が発生した時の処理
Return oExcept.ToString
Finally
'データリーダクローズ
If Not oDataReader Is Nothing Then
oDataReader.Close()
End If
'DBクローズ
If Not oConn Is Nothing Then
oConn.Close()
End If
End Try
End Function
お礼
大変、すいません・・ バックアップ用のmdbを見に行っていました。 m(_"_)m バックアップ用mdbには、2レコード分のデータしか存在していなかったので。 ソースコードには問題ありませんでした。 正常データ取得も確認できました。 お騒がせいたしました。 でも、お教えいただいたチェック方法は、今後の参考になります。 ありがとうございました。
補足
詳細エラーコードですが、エラーは出ません。 コード自体は正常に流れていますが、 While oDataReader.Read() 'レコードが取得できた時の処理 i = i + 1 ReDim Preserve kubunInfo(i) kubunInfo(i).kubunCode = CStr(oDataReader("区分コード")) kubunInfo(i).syoriNaiyou = CStr(oDataReader("処理内容")) End While の部分で、2レコード分しか回っていないのです。 アクセスデータもチェックしてみましたが、特に問題はなさそうでした。 “oDataReader.Read()”は、最終レコードに行き着くまでは、 Trueを返すはずだと理解していますが、2レコード分でFalseを 返してしまっています。 やはり、アクセスのテーブルに、どこか問題があるのでしょうか? ちなみに、Const strSelectSyain As String = "SELECT count(*) FROM 区分マスタ" として、実行してみましたが、今度は「レコード取得エラー」ウインドが出てしまいました。 (以下、ソースコードの続き) ------------------------------------ Public Function getKubunAll(ByRef kubunInfo() As structKubun) As String ・ ・ ・ ・ '取得レコード数のチェック If kubunInfo Is Nothing Then 'レコードがなかった時の処理 Return "区分マスタテーブルにレコードがありません" Else Return "" End If Catch oExcept As Exception '例外が発生した時の処理 Return oExcept.ToString Finally 'データリーダクローズ If Not oDataReader Is Nothing Then oDataReader.Close() End If 'DBクローズ If Not oConn Is Nothing Then oConn.Close() End If End Try End Function