|
分類:[VB.NET/VB2005]
始めまして、他の掲示板でお世話になった方もおられますが、こちらでは初めてお世話になります。
言語 VB2005 OS WindowsXP DB ACCESS2000
上記を用いて開発を行っているんですが、ソース上で組んだSQL文で実行すると
Table.Row.Count=0 になり、実際のDBにデータ有るにもかかわらず、データを取得する事ができません
この作られたSQL文をクイックウォッチでコピーして、ACCESS2000のクエリで実行すると結果は正しく帰って来ます
以下にソースを示します それ程大きいソースではないので、原文そのままです
Public Function mblnSetDData() As Boolean Dim SQLCm As OleDbCommand = clsDbCon.pdbcn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable Dim strSQL As String Dim intRow, intCol As Integer
mblnSetDData = True
Try '日付データ strSQL = "SELECT SUM(D_PRICE) AS PRICE, MID(D_DATE, 6, 2) AS [MONTH], B_CD " strSQL = strSQL & "FROM D_DATE " strSQL = strSQL & "WHERE DEL_FLG = 0 " strSQL = strSQL & "AND D_DATE LIKE '" & mstrYear & "*' " strSQL = strSQL & "GROUP BY MID(D_DATE, 6, 2), B_CD " strSQL = strSQL & "ORDER BY MID(D_DATE, 6, 2) " 'SQL文のセット SQLCm.CommandText = strSQL 'クエリの実行 Adapter.Fill(Table)
For Each Row As DataRow In Table.Rows For intRow = 0 To Me.DataGridView1.RowCount - 1 If Me.DataGridView1.Item(0, intRow).Value = Row("B_CD") Then Select Case Row("MONTH") Case "01" : intCol = 2 Case "02" : intCol = 3 Case "03" : intCol = 4 Case "04" : intCol = 5 Case "05" : intCol = 6 Case "06" : intCol = 7 Case "07" : intCol = 8 Case "08" : intCol = 9 Case "09" : intCol = 10 Case "10" : intCol = 11 Case "11" : intCol = 12 Case "12" : intCol = 13 End Select Me.DataGridView1.Item(intCol, intRow).Value = Row("PRICE") Exit For End If Next Next Catch mblnSetDData = False End Try
'解放 Table.Dispose() Adapter.Dispose() SQLCm.Dispose() End Function
上記ソースの For Each Row As DataRow In Table.Rows の部分でデータが取れていないので、End Tryまで進んでしまいます
mstrYearには"2008"と言う文字列が入っています
ACCESS2000のクエリデザインでクイックウォッチで取得した
SELECT SUM(D_PRICE) AS PRICE, MID(D_DATE, 6, 2) AS [MONTH], B_CD FROM D_DATE WHERE DEL_FLG = 0 AND D_DATE LIKE '2008*' GROUP BY MID(D_DATE, 6, 2), B_CD ORDER BY MID(D_DATE, 6, 2);
上記SQL文を実行すると結果は2行帰って来ます
何故このように結果がずれてくるのか、お分かりになりましたらご教授お願いいたします。
|