いつも参考にさせていただいています。
SQLで取得したレコードセットをCSVに出力しているのですが、
表示されない列が発生し弱っております。
レコードセットの構造は下記です。
担当者ID 出社時間 退社時間 休憩時間 休憩終了時間
1 10:10 17:30
1 12:00 12:30
2 09:00 18:00
2 11:00 11:30
2 11:30 12:00
3 18:00 19:00
担当者ID、出社時間、退社時間までは過不足なくCSVに出力されるのですが、
休憩時間、休憩終了時間の2列は表示されません。
左辺の列が空白だからと思うのですが、改善策がわかりません。
どうかご教授ください。
'パラメータクエリを実行
Set RS = New ADODB.Recordset
Set RS = cmdMaster.Execute
'CSV吐き出し部分のソース
'** ファイルオープン
fno = FreeFile
Open fnm For Output As fno Len = 32000
If mds Then
For i = 0 To RS.Fields.Count - 1
rec = rec & Chr(&H22) & RS(i).Name & Chr(&H22) & ","
Next
Print #fno, Left(rec, Len(rec) - 1)
End If
Do Until RS.EOF
rec = ""
For i = 0 To RS.Fields.Count - 1
dummy = RS(i)
If IsNull(dummy) Then
s = ""
Else
s = dummy
End If
rec = rec & Chr(&H22) & RTrim(s) & Chr(&H22) & ","
Next
Print #fno, Left(rec, Len(rec) - 1)
RS.movenext
Loop
Close fno
RS.Close
下記のとろこにブレークポイントを入れてデータを抽出するときに
どうなっているかを調べてみればいいんじゃないですか?
データ抽出したところで空白になっているんだったら元のデータが
おかしいということで。
For i = 0 To RS.Fields.Count - 1 ← ここにブレークポイント
dummy = RS(i)
If IsNull(dummy) Then
s = ""
Else
s = dummy
End If
rec = rec & Chr(&H22) & RTrim(s) & Chr(&H22) & ","
Next
MAX様
ご指摘ありがとうございます。
どうもCSVうんぬんでなく、SQLに間違いがあるようです。
ただどう修正さればいいかがわかりません。
ぜひお教えください。SQLを記述します。
'パラメータクエリを作成
sql = "SELECT 担当者ID,出社時間,退社時間,休憩開始時間,休憩終了時間, " _
& "DateDiff('n', 出社時間, 退社時間) AS 業務時間, " _
& "DateDiff('n', 休憩開始時間, 休憩終了時間) AS 休憩時間 " _
& "From KINTAI " _
& "WHERE format(出社時間, 'YYYY/MM/DD') >= ? " _
& "AND format(出社時間, 'YYYY/MM/DD') <= ? " _
・テーブルの全項目と差し引きした項目(DataDiff)を抽出しようとしています。
・またFROM TOにパラメータで日付SETし、その間のデータだけを抽出します。
・この時に、時間の各データはDATE型なのでformat関数でパラメータの形式と合わせています。
上記を実行すると「休憩開始時間」「休憩終了時間」と計算結果の「休憩時間」が抽出されません。
where句を取り払うと抽出できます。
where句をどのように修正すれば実現できますでしょうか。
※質問事項が変わってしまいました。。。どうかお願いいたします。
SQLを誤っておりました。
WHERE句で絞りこみその条件に該当しなかったから
出力されなかったのに、騒いでおりました。
(お恥ずかしい。。。)
ありがとうございました。