• 締切済み

プログラム(SQL他)質問です

 予約時間表をつくってのですが、 思うようにデータベースからデータを取ってくることが出来ません。 お願いします、教えてください。 今の状態では10時から11時の予約を表示しようとすると、10時だけではなく、11時のマスも埋めてしまいます。表は1~15日までの日の行(i)と、9~19時までの、時間列(j)からなっています。 DBの方は、年(yyyy)、月(MON)、日(DAY)、開始時間(A_TIME)、終了時間(B_TIME)会社名(CP)です。 必要な情報があれば、教えて下さい。 よろしくお願いします。 . i = 1 . For i = 1 To 15 Step 1 <TR><TD>@{i}日</TD> . For j = 9 To 20 Step 1 .pSQL = "SELECT * FROM kaigi1_tbl " .pSQL = pSQL & "WHERE YYYY = '" & today_nend & "' AND " .pSQL = pSQL & "MON = '" & mm & "' AND " .pSQL = pSQL & "DAY = '" & i & "' AND " .pSQL = pSQL & "((A_TIME <= '" & j & "') AND (B_TIME >= '" & j & "'))" .SQL pSQL .if ( WB_DETAIL_CODE = "100" )Then <TD><FONT>(空白)</FONT></TD> .elseif (j = 12)Then <TD><FONT>(空白)</FONT></TD> .else . STAT = 0 . LoopFetch . COMP = DBGetCol(6) . End Fetch . if (COMP = "n") THEN <TD><FONT COLOR="#FF0000">■</FONT></TD> . elseif (COMP = "h") THEN <TD><FONT COLOR="#0099FF">■</FONT></TD> . end if .end if . Next j </TR> . Next i

みんなの回答

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

この部分↓ .pSQL = pSQL & "((A_TIME <= '" & j & "') AND (B_TIME >= '" & j & "'))" A_TIME <= '" & j & "'は A_TIME <= '" & i & "'の下記間違いですよね? この場合、A_TIMEがi「以下」かつB_TIMEがj「以上」になりますよね。 つまりこの例だと、11以下10以上となり、10も11も含まれてしまいます。 だから、 .pSQL = pSQL & "((A_TIME < '" & i & "') AND (B_TIME >= '" & j & "'))" として、A_TIMEがi「よりも小さく」てB_TIMEがj「以上」のものとすれば 正しく取得できると思いますよ。

関連するQ&A

  • エクセルマクロの質問です

    こんばんわ! 同様のデータの列を検索したいのですが、良い方法が思いつきません。 色々考えてできたのが下記の方法ですが、項目が増えると大変なので、簡易化したいです。 今回簡易化したいのは↓ Sub test() Dim test(1 To 10) As Integer Dim stok_date As String For i = 1 To 5 Step 1 stok_date = Cells(1, i) For j = 1 To 10 Step 1 If stok_date = Cells(3, j) Then If test(1) = Empty Then test(1) = j ElseIf test(2) = Empty Then test(2) = j ElseIf test(3) = Empty Then test(3) = j ElseIf test(4) = Empty Then test(4) = j ElseIf test(5) = Empty Then test(5) = j End If Exit For End If Next j Next i End Sub 一行目○列目のデータが三行目の何列目にあるのかをそれぞれtest(○)に入れたい。 といった具合です。 アドバイスの程よろしくお願いいたします。

  • SQL文の連結が、うまくいきません

    いつもお世話になっております。  現在、SQL文生成プログラムを作成しているのですが  エラーメッセージ 「Microsoft OLE DB Provider for SQL Server (0x80040E14)  '.' 付近に不適切な構文があります。」  表示されて、どうしても解決出来ません  ソースを記載しますのでアドバイス頂けないでしょうか?  デバッガーみたいな事をさせてしまい、本当に申し訳ありません  開発者自分一人(ほぼ初めて)で、どうにも進みませんでしたので  お願いいたします。  ※--ASPのデバッグに関して  もう一つお聞きしたいのですが (出来ればこちらの質問も答えてくださると幸いです)  皆さんは、ASPのデバッグをどの様に行っていますか?  VB6.0やVBAの場合は、ソースが不完全やエラーでも  「F8」を押して、ソースの途中まで稼働させて  「現在格納されている変数の中身」等を確認して 割とエラー解決もスムーズに出来ましたが、ASPではそれが出来ないため  難航しています(Line*** と エラーメッセージだけを頼りに)  皆さんはASPの場合、どの様にエラー解消されていますか?  (どうにかして、自分一人でも安定して成果をあげていきたいので)  我流でも結構ですので、是非アドバイスお願いします SQL生成ソース '--SQL生成  strSQL = "select * from STA040, STA500M7"  '--SQL作成(抽出場合分け)  if check = "Day" then   strSQL = strSQL + "where STA500M7.CODE040 = STA040.CODE"  '--期日空白処理   Blank_out J_days_st,N_days_st,M_days_st,J_days_ed,N_days_ed,M_days_ed  '--受注日BetWeen   if J_days_st <> "" and J_days_ed <> "" then    strSQL = strSQL + " and STA500M7.YYMMDD_1 BETWEEN " & J_days_st_sql & " and " & J_days_ed_sql & " "  '--受注日start○,End×   Elseif J_days_st <> "" and J_days_ed = "" then    strSQL = strSQL + " and STA500M7.YYMMDD_1 >= " & J_days_st_sql & " "  '--受注日start×,End○   Elseif J_days_st = "" and J_days_ed <> "" then    strSQL = strSQL + " and STA500M7.YYMMDD_1 <= " & J_days_st_sql & " "  '--受注日start×,End×   Elseif J_days_st = "" and J_days_ed = "" then   End if  '--納期BetWeen   If N_days_st <> "" and N_days_ed <> "" then    strSQL = strSQL + " and STA500M7.YYMMDD_3 BETWEEN " & N_days_st_sql & " and " & N_days_ed_sql & " "  '--受注日start○,End×   Elseif N_days_st <> "" and N_days_ed = "" then    strSQL = strSQL + " and STA500M7.YYMMDD_3 >= " & N_days_st_sql & " "  '--受注日start×,End○   Elseif N_days_st = "" and N_days_ed <> "" then    strSQL = strSQL + " and STA500M7.YYMMDD_3 <= " & N_days_st_sql & " "  '--受注日start×,End×   Elseif N_days_st = "" and N_days_ed = "" then   End if  '--見積日BetWeen   If M_days_st <> "" and M_days_ed <> "" then    strSQL = strSQL + " and STA500M7.YYMMDD_10 BETWEEN " & M_days_st_sql & " and " & M_days_ed_sql & " "  '--見積日start○,End×   Elseif M_days_st <> "" and M_days_ed = "" then    strSQL = strSQL + " and STA500M7.YYMMDD_10 >= " & M_days_st_sql & " "  '--納期start×,End○   Elseif M_days_st = "" and M_days_ed <> "" then    strSQL = strSQL + " and STA500M7.YYMMDD_10 <= " & M_days_st_sql & " "  '--納期start×,End×   Elseif M_days_st = "" and M_days_ed = "" then   End if 'strSQL = strSQL + "order by sta500m7.code ASC" 'strSQL = "select * from STA040,STA500M7 where STA500M7.CODE040 = STA040.CODE and STA500M7.YYMMDD_3 >= " & hiduke & " " 'strSQL = strSQL + " order by sta500m7.code DESC;"    End if    '↓ここがエラーだと表示されます(おそらくSQLが問題かと)    Set objRS = objCon.Execute(strSQL)'レコードセットのオープン  アドバイスお願いいたします

  • Fortranについての質問です。下のプログラムは、ある地点(今回は1

    Fortranについての質問です。下のプログラムは、ある地点(今回は14161~14163)の33年間(1976~2008)の気温の平均を欠損値を考慮してだしているはずです。うるう年の判定はおまけで書いています。 この平均値に標準偏差もつけるプログラムにしたいのですが、どう書いていいのか手詰まり中です。どうかアドバイスください。 ---------データの一部(14162_temp1997.csv)------------------------------------- 14162 1997 1 1 141.332 43.0583 -10 14162 1997 1 2 141.332 43.0583 18 14162 1997 1 3 141.332 43.0583 -2 ---------プログラム------------------------------------------------------------ program sapporo_kikouchi INTEGER :: sum, no, point INTEGER :: year, mon, day, data INTEGER :: doy REAL,dimension(365) :: temp, ndata REAL :: lon, lat CHARACTER*4 yyyy CHARACTER*5 sssss ndata(:)=0.0 temp(:)=0.0 do ispot=14161,14163 write(sssss,"(i5)") ispot do iwork=1976, 2008 write(yyyy,"(i4.4)") iwork open(50, file=''//sssss//'_temp'//yyyy//'.csv', status='old',iostat=io) if (io < 0) cycle ! write(6,*) ispot iwork   do i = 1,366 read(50,*,iostat=io) id,year,mon,day,lon,lat,data if(io < 0) exit if(mon==2 .AND. day==29) then cycle endif call date2doy(year,mon,day,doy) temp(doy) = temp(doy) + data/10.0 ndata(doy) = ndata(doy) + 1 ! doyは一年のうち何日目かを表している enddo close(50) enddo !!! end of year loop enddo do i=1,365 if( ndata(i) == 0 ) then temp(i) = -99999.9 else temp(i)=temp(i)/ndata(i) endif write(6,*) i, temp(i), ndata(i) ! write(11,*) i,',',temp(i),',',ndata(i) end do stop end program subroutine date2doy(iy,im,id,idoy) INTEGER,dimension(12) :: nday INTEGER :: uruu !!uruu=1: うるう年、uruu=0: 通常の年 uruu=0 DATA nday /31,28,31,30,31,30,31,31,30,31,30,31/ if(mod(iy,4)==0 .AND. mod(iy,100)/=0) then uruu=1 endif if(mod(iy,1000)==0) then uruu=1 endif !! うるう年も無視する itotal = 0 if( im /= 1 )then do m=1, im-1 itotal = itotal + nday(m) enddo endif idoy = id + itotal ! write(6,*) iy,im,id, idoy return end

  • 全体を表示 マクロ 色が思うように、表示できない

     「マクロ 色が思うように、表示できない」で質問したことへの追加になります。「S1299792さん」から、全体を表示しないと回答がしずらいことの指摘がありました。すみませんでした。その通りだと思いましたので、再度質問させて頂きました。 また、「watabe007さん」からの回答からコピー貼り付けの部分を教えて頂いたものも使って、改めてコードを書き換えて示します。  現在コピー貼り付け・ソート・J;列以外はコード通りに出来上がっています。それにJ列の欠・合も指示通りにできています。不だけがピンク色になりません。 なお、なぜか一カ所だけピンクになっているところがあります。条件の「条件 合計」・「条件 不合格」最初のEの不のところの条件だけは、ピンクになっています。  下記のが全体のコードです。 Sub 条件つきソート色つけ() Dim LastRow As Long, i As Long   Application.ScreenUpdating = False   Application.Calculation = xlCalculationManual   With Sheets("sheet1")     LastRow = .Cells(Rows.Count, "A").End(xlUp).Row     .Range("A1:J" & LastRow).Copy Sheets("sheet2").Range("A1")   End With   Application.CutCopyMode = False   Sheets("Sheet2").Select   Range("A1:J" & LastRow).Sort Key1:=Range("H1"), _     Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, _     MatchCase:=False, Orientation:=xlTopToBottom, _     SortMethod:=xlPinYin, DataOption1:=xlSortNormal   Range("E2:J" & LastRow).Interior.ColorIndex = 0 '文言の詳細について '部品名と詳細---------------------------------------略称            'ghyu--------------------------------------←E列   'klub---------------------------------------←F列  'llpo----------------------------------------←G列  '合計個数(合計)-------------------------←H列  合計   '数量順位---------------------------------←I列   順位 '合格・不合格(合・不)欠品(欠)-----←J列  合・不・欠 For i = 2 To LastRow If Cells(i, "E").Value = "" Then Cells(i, "E").Resize(, 6).Value = "欠" 'E列 ElseIf Application.CountIf(Cells(i, "E").Resize(, 6), "欠") > 0 Then Cells(i, "J").Value = "欠" ElseIf Cells(i, "H") >= 1 And Cells(i, "H") <= 49 Then '条件 合計 Cells(i, "J") = "不" ElseIf (Cells(i, "E") >= 20 And Cells(i, "F") >= 6) And Cells(i, "G") >= 10 Then '条件 これ以上は合格 Cells(i, "J") = "合" ElseIf (Cells(i, "E") = 0 Or Cells(i, "F") = 0) Or Cells(i, "G") = 0 Then '条件 全て0で不合格 Cells(i, "J") = "不" ElseIf (Cells(i, "E") <= 19) Then '条件  不合格 Cells(i, "J") = "不" ElseIf (Cells(i, "F") <= 5) Then '条件  不合格 Cells(i, "J") = "不" ElseIf (Cells(i, "F") <= 10) Then '条件  不合格 Cells(i, "J") = "不" ElseIf (Cells(i, "E") >= 20 And Cells(i, "F") >= 6) And Cells(i, "G") <= 9 Then '条件 E=○ F=○ G=×  不合格 Cells(i, "J") = "不" ElseIf (Cells(i, "E") >= 20 And Cells(i, "F") <= 5) And Cells(i, "G") <= 9 Then '条件 E=○ F=× G=×  不合格 Cells(i, "J") = "不" ElseIf (Cells(i, "E") <= 19 And Cells(i, "F") >= 6) And Cells(i, "G") <= 9 Then '条件 E=× F=○ G=×  不合格 Cells(i, "J") = "不" ElseIf (Cells(i, "E") <= 19 And Cells(i, "F") <= 5) And Cells(i, "G") >= 10 Then '条件 E=× F=× G=○  不合格 Cells(i, "J") = "不" End If If Cells(i, "E") >= 1 And Cells(i, "E") < 20 Then Cells(i, "E").Interior.ColorIndex = 6 ' 6は  黄色 End If If Cells(i, "F") >= 1 And Cells(i, "F") < 6 Then Cells(i, "F").Interior.ColorIndex = 6 ' 6は  黄色  End If If Cells(i, "F") >= 6 And Cells(i, "F") < 10 Then Cells(i, "F").Interior.ColorIndex = 34 '34は  淡い青色 End If If Cells(i, "G") >= 1 And Cells(i, "G") < 10 Then Cells(i, "G").Interior.ColorIndex = 6 ' 6は  黄色  End If If Cells(i, "H") >= 1 And Cells(i, "H") <= 49 Then Cells(i, "H").Interior.ColorIndex = 4 ' 4は  うぐいす色  End If If Cells(i, "J") >= "不" Then Cells(i, "J").Interior.ColorIndex = 38 '38は ローズ    If Cells(i, "J") >= "合" Then Cells(i, "J").Interior.ColorIndex = 2 ' 2は  白色  ElseIf Cells(i, "J") = "欠" Then Cells(i, "J").Interior.ColorIndex = 45 '45は  薄いオレンジ色 End If For j = 5 To 9 'D-F If Cells(i, j).Value = 0 Then Cells(i, j).Interior.ColorIndex = 3 '3は    赤色        ElseIf Cells(i, j).Value = "欠" Then Cells(i, j).Interior.ColorIndex = 45 '45は  薄いオレンジ色     End If Next j For k = 5 To 9 'G-I If Cells(i, j).Value = "欠" Then Cells(i, j).Interior.ColorIndex = 45 '45は  薄いオレンジ色   End If Next k Next i Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub

  • プログラムのバグについて

    下記のプログラムを書いたのですがi=32000の時x(i,r)の値がEmptyになってしまいます。 その理由はなぜでしょうか? どうしてもわからずに困っています。 For i = 0 To 32767 If i < 2 Then xr(i, r) = 0 xi(i, r) = 0 ElseIf i > 1 <> i <= 30001 Then xr(i, r) = Cells(i - 1, r) xi(i, r) = 0 '実数部しか存在しないので全て0とする。 ElseIf i > 30001 Then xr(i, r) = 0 xi(i, r) = 0 '実数部しか存在しないので全て0とする。 End If Next

  • VBA IF文をCASE文にしたいのですが

    お尋ねします。VBAで以下のようなIF文をCASE文に書き換えたいのですが、うまくいきません。 どなたかアドバイスをいただけないでしょうか。 よろしくお願いします。 部分だけ抜き出していますが、文字列が日本語かどうかを判定しています。 CD = Asc(strNm) If CD >= -30561 And CD <= -26510 Then    '漢字(第一水準)"   i = i + 1 '文字数記録 ElseIf CD >= -26415 And CD <= -5468 Then   '"漢字(第二水準)"   i = i + 1 ElseIf CD >= -31936 And CD <= -31850 Then  '"カタカナ"   i = i + 1 ElseIf CD >= -32097 And CD <= -32015 Then  '"ひらがな"   i = i + 1 ElseIf CD >= -1444 And CD <= -949 Then    '"漢字(その他)"   i = i + 1 End If

  • マクロ IF分岐 結果がうまく表示されない

    I列J列、M列N列、Q列R列の、それぞれ2列ともに水色と紫色のフォントが両方あったら、U、V、W列に、う、キ、ち、とそれぞれ入力する、というマクロを作ってみたのですが、入力結果が指定した列に表示されません。添付のように「キ」がU列にきたり、「ち」がU列にきたりしています。何をどうすればいいでしょうか? Sub test() ' For nRow = 7 To 233 If Cells(nRow, 9).DisplayFormat.Font.ColorIndex = 33 And Cells(nRow, 10).DisplayFormat.Font.ColorIndex = 47 Then Cells(nRow, 21) = "う" ElseIf Cells(nRow, 10).DisplayFormat.Font.ColorIndex = 33 And Cells(nRow, 9).DisplayFormat.Font.ColorIndex = 47 Then Cells(nRow, 21) = "う" Else Cells(nRow, 21) = "" End If Next nRow For nRow = 7 To 233 If Cells(nRow, 13).DisplayFormat.Font.ColorIndex = 33 And Cells(nRow, 14).DisplayFormat.Font.ColorIndex = 47 Then Cells(nRow, 21) = "キ" ElseIf Cells(nRow, 14).DisplayFormat.Font.ColorIndex = 33 And Cells(nRow, 13).DisplayFormat.Font.ColorIndex = 47 Then Cells(nRow, 22) = "キ" Else Cells(nRow, 22) = "" End If Next nRow For nRow = 7 To 233 If Cells(nRow, 17).DisplayFormat.Font.ColorIndex = 33 And Cells(nRow, 18).DisplayFormat.Font.ColorIndex = 47 Then Cells(nRow, 21) = "ち" ElseIf Cells(nRow, 18).DisplayFormat.Font.ColorIndex = 33 And Cells(nRow, 17).DisplayFormat.Font.ColorIndex = 47 Then Cells(nRow, 23) = "ち" Else Cells(nRow, 23) = "" End If Next nRow End Sub

  • Exsel プログラムなんですが・・・。

    簡単なゲームを作ってみようと思い、ExcelでAからZまでの文字を入れて正解の文字を当てるものを作っています。 しかし、本を参考に作ってみたのですが、Ifの所で型が一致しませんと出るのですが、どこが間違っているのか分かりません。 できれば、Ifとwhile~Loop,を使って作りたいのですが・・・。 どなたか、詳しい方、ご教授の程よろしくお願いします。 以下、作成したものです。 Sub Ex667() Dim a As String Dim b As String Dim i As Integer a = "J" i = "A" a = InputBox("AからZまでの文字を入力", "文字当て", "A") Do While a <> "" i = i + 1 If a = b Then MsgBox i & "回目で正解!" Exit Do ElseIf "A" < a And a < "Z" Then If a = b Then a = InputBox("もっと後の数です。", "ハズレ") Else a = InputBox("もっと前の数です。", "ハズレ") End If Else a = InputBox("入力ミス") End If Loop End Sub 回答よろしくお願いします。

  • fortranについての質問です。

    fortranについての質問です。 このFortranは、頭にそれぞれ14161~14163とつく33個のファイル(1/1~12/31,欠損地あり1年分)を読んでいき、例えば1/1、1/2…と365日分の33年の平均値を導くはずなのですが、下のようなエラーがでます。おそらく、14161が2008までないからではないかと思うのですが、現在勉強中なので、なにかアドバイス、おかしいところ修正できるところがありましたらお願いします。 program sapporo_kikouchi    INTEGER :: sum, no, point INTEGER :: year, mon, day, data INTEGER :: doy REAL,dimension(365) :: temp, ndata REAL :: lon, lat CHARACTER*4 yyyy CHARACTER*5 sssss ndata(:)=0.0 temp(:)=0.0 do ispot=14161,14163 write(sssss,"(i5)") ispot do iwork=1976, 2008 write(yyyy,"(i4.4)") iwork open(50, file=''//sssss//'_temp'//yyyy//'.csv', status='old') ! write(6,*) ispot iwork    do i = 1,366 read(50,*,iostat=io) id,year,mon,day,lon,lat,data if(io < 0) exit if(mon==2 .AND. day==29) then cycle endif call date2doy(year,mon,day,doy) temp(doy) = temp(doy) + data/10.0 ndata(doy) = ndata(doy) + 1 end do close(50) enddo !!! end of year loop enddo do i=1,365 if( ndata(i) == 0 ) then temp(i) = -99999.9 else temp(i)=temp(i)/ndata(i) endif write(6,*) i, temp(i), ndata(i) enddo stop end program subroutine date2doy(iy,im,id,idoy) INTEGER,dimension(12) :: nday INTEGER :: uruu !!uruu=1: うるう年、uruu=0: 通常の年 uruu=0 DATA nday /31,28,31,30,31,30,31,31,30,31,30,31/ if(mod(iy,4)==0 .AND. mod(iy,100)/=0) then uruu=1 endif if(mod(iy,1000)==0) then uruu=1 endif !! うるう年も無視する itotal = 0 if( im /= 1 )then do m=1, im-1 itotal = itotal + nday(m) enddo endif idoy = id + itotal ! write(6,*) iy,im,id, idoy return end ------------------------------------------------------------------------------ At line 18 of file kikouchi.f90 file: "14161_temp1993.csv" Traceback: not available, compile with -ftrace=frame or -ftrace=full Fortran runtime error: 指定されたファイルが見つかりません。 -------------------------------------------------------------------------------

  • EXCEL インデックスが有効範囲にありません

    エクセルでマクロを使ったソフト(他人が作ったもの)を使っているのですが、 計算の途中で「インデックスが有効範囲にありません」という エラーが出てしまい困っています。 同じ量の他の数値(サンプル数91、属性9)でやるとエラーがでないのですが、今やっている文字列のときだけエラーが出るといった場合 何が考えられるでしょうか?以下はデバッグ結果です。 'For j = 2 To M - 1 '列に関する繰り返し MaxMax = MaxI iflag = 0 For j = 2 To iR - 1 '上限? kkk = 1 For i2 = 1 To MaxI For i = 1 To MaxMax If C(i) = "" Or B(i2, j) = "" Then 'Exit For Else If Trim(C(i)) = Trim(B(i2, j)) Then D(kkk) = B(i2, j) B(i2, j) = "" kkk = kkk + 1 Else If InStr(1, C(i), B(i2, j), 1) <> 0 Then D(kkk) = C(i) C(i) = "" kkk = kkk + 1 iflag = 1 End If End If End If Next i 'If iflag = 1 Then ' B(i2, j) = "" ' iflag = 0 'End If Next i2 For i = 1 To MaxMax For i2 = 1 To MaxI If C(i) = "" Or B(i2, j) = "" Then 'Exit For Else D(kkk) = C(i) & B(i2, j) kkk = kkk + 1 End If Next i2 Next i For i = 1 To kkk - 1 '簡略,exp.P and TP,, For i2 = 1 To kkk - 1 If i <> i2 And D(i) <> "" And D(i2) <> "" Then If Len(D(i)) > Len(D(i2)) Then L1 = Len(D(i)) L2 = Len(D(i2)) If Comp(D(i), D(i2), L1, L2) = 1 Then D(i) = "" 'Exit For End If Else L2 = Len(D(i)) L1 = Len(D(i2)) If Comp(D(i2), D(i), L1, L2) = 1 Then D(i2) = "" 'Exit For End If End If End If Next i2 Next i i2 = 1 For i = 1 To kkk - 1 If D(i) <> "" Then Cells(i2, iR + j) = D(i) C(i2) = D(i) ←ここがエラー i2 = i2 + 1 End If Next i MaxMax = i2 - 1 Next j 上記文章だけでは何も分からないとは思うのですが、 何か分かる方がいらっしゃればお願いいたします。

専門家に質問してみよう