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

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

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

Re[4]: VB2005でのSQLとACCESS2000のクエリ


(過去ログ 37 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■19242 / inTopicNo.1)  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行帰って来ます




何故このように結果がずれてくるのか、お分かりになりましたらご教授お願いいたします。
引用返信 編集キー/
■19245 / inTopicNo.2)  Re[1]: VB2005でのSQLとACCESS2000のクエリ
□投稿者/ はつね (723回)-(2008/05/21(Wed) 14:00:51)
はつね さんの Web サイト
No19242 (エイジ さん) に返信
> Table.Row.Count=0
> になり、実際のDBにデータ有るにもかかわらず、データを取得する事ができません

LIKE文のワイルドカード指定は正しいですか?
Access自体から操作するときの指定と、ADO.NETでの指定は異なりますよ。



引用返信 編集キー/
■19248 / inTopicNo.3)  Re[1]: VB2005でのSQLとACCESS2000のクエリ
□投稿者/ やじゅ (387回)-(2008/05/21(Wed) 14:05:23)
No19242 (エイジ さん) に返信
> 始めまして、他の掲示板でお世話になった方もおられますが、こちらでは初めてお世話になります。
>
> 言語 VB2005
> OS  WindowsXP
> DB  ACCESS2000
>

始めまして、→ 初めまして
Like '2008*' → Like '2008%' でどうでしょうか?
http://www.nurs.or.jp/~ppoy/access/access/acM012.html
引用返信 編集キー/
■19249 / inTopicNo.4)  Re[2]: VB2005でのSQLとACCESS2000のクエリ
□投稿者/ エイジ (2回)-(2008/05/21(Wed) 14:07:23)
No19245 (はつね さん) に返信
> LIKE文のワイルドカード指定は正しいですか?
> Access自体から操作するときの指定と、ADO.NETでの指定は異なりますよ。

LIKE文のワイルドカードを%に直すと上手く動きました

Accessが*だからADOでも*というわけじゃないんですね・・・

ご指摘いただきありがとうございました♪
解決済み
引用返信 編集キー/
■19250 / inTopicNo.5)  Re[3]: VB2005でのSQLとACCESS2000のクエリ
□投稿者/ エイジ (4回)-(2008/05/21(Wed) 14:11:19)
> ■No19248 (やじゅ さん) に返信
>始めまして、→ 初めまして
>Like '2008*' → Like '2008%' でどうでしょうか?
>http://www.nurs.or.jp/~ppoy/access/access/acM012.html

ご指摘すみません^^;
はじめましては、それですね・・
単純なところまで見直す癖をつけないとダメですね

Like文の修正で上手く解決いたしました
参考のURLありがとうございます♪

解決しましたが1通り目を通してみようとおもいます♪
引用返信 編集キー/
■19251 / inTopicNo.6)  Re[4]: VB2005でのSQLとACCESS2000のクエリ
□投稿者/ エイジ (5回)-(2008/05/21(Wed) 14:12:16)
すみません、解決済みの後にレス付けたら解決済みじゃなくなるんですね^^;

解決いたしました

はつねさんやじゅさんありがとうございました♪
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -