C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 37 を表示中)
■19242 / )  VB2005でのSQLとACCESS2000のクエリ
□投稿者/ エイジ (1回)-(2008/05/21(Wed) 13:43:44)

分類:[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行帰って来ます




何故このように結果がずれてくるのか、お分かりになりましたらご教授お願いいたします。
返信 編集キー/


管理者用

- Child Tree -