- ベストアンサー
access2003 あいまい検索について
どなたかアドバイスを頂ければ幸いです。 内容なんですが Access2003にて勤務表を作成中です。 勤務表テーブルにはユーザー名、日付、出社(出社時間を 記録する)、出社属性(直行などの状態を記録する)、退社、 退社属性、作業時間、作業内容のフィールドがあります。 フォームには複数のテキストボックスやコマンドボタンなどの コントロールがあり、その中でシステム時間を表示する テキストボックスがあります。 コマンドボタンのイベントでテキストボックスの値を Format関数でyyyy/mmの形式に変換し、その値を用いて 勤務表テーブルの日付フィールドの値を月毎に取得し結果を フォーム内のリストボックスに表示させたいのです。 例えば、システム時間が2008/6/23 18:20:56の場合2008/06を取得し 勤務表の日付フィールドで2008/06月分のデータをすべて検索 したいです。 (日付フィールドには2008/06/19の形式でデータが入っており、 もちろん2008/06以降のデータもあります。) 下記のコードにて試しているのですが、コンパイルエラーが でるわけではないのですが、何も起こりません。 Private Sub コマンド58_Click() Dim rs As New ADODB.Recordset Set rs = New ADODB.Recordset Dim ct As New ADODB.Connection Set ct = CurrentProject.Connection Dim hiduke hiduke = "[日付] Like '*" & Format(テキス50, "yyyy/mm")& "*'" rs.Open "勤務表", ct, adOpenDynamic, adLockOptimistic rs.Find hiduke, 0, adSearchForward Do Until rs.EOF If rs.EOF = True Then MsgBox "該当レコードが見つかりません。" Else リスト42.RowSourceType = "Table/Query" リスト42.RowSource = "SELECT ユーザー名,日付,出社,出社 属性,退社,退社属性,作業時間,作業内容 " & _ "FROM 勤務表 Where ユーザー名 = コンボ56 and hiduke" rs.Find hiduke, adSearchForward End If Loop rs.Close Set rs = Nothing ct.Close Set ct = Nothing End Sub 以上よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
システム時間で良いのならば、回りくどいことをせずに下記みたいなSQLで日付を絞ればよいのでは? Select * From 勤務表 WHERE (((日付)>=DateSerial(Year(Date()),Month(Date()),1) And (日付)<DateSerial(Year(Date()),Month(Date())+1,1)));
その他の回答 (3)
- CHRONOS_0
- ベストアンサー率54% (457/838)
hiduke = "[日付] like format(Date(),'yyyy/mm/') & '*'"
補足
返信遅くなり大変申し訳ありませんでした。 アドバイス頂いた内容で前に進むことができました。 非常に感謝しております。また、何かありましたらアドバイス よろしくお願いします。
- CHRONOS_0
- ベストアンサー率54% (457/838)
日付フィールドの年月がシステム日付の年月と合致しているかどうかを調べたいのなら 日付 like format(Date(),"yyyy/mm/") & "*" または Format(日付,"yyyy/mm")=Format(Date(),"yyyy/mm") >日付は数値なのでLikeをつかっての先頭一致、部分一致などの検索はできません。 暗黙の型変換が行われるので可能です
補足
アドバイスいただき大変ありがとうございました。 早速ためさせて頂いたのですが 日付 like format(Date(),"yyyy/mm/") & "*" で勤務表の日付フィールドから取得した値を変数に入れようと しているのでが、ダブルクオートの使い方がおかしいのか コンパイルエラーになってしまいます。 大変申し訳ないのですが再度アドバイスいただけませんでしょうか。 hiduke = "[日付] like format(Date(),"yyyy/mm/") & '*'" 上記の他いろいろ試してはいるのですが、、、よろしくお願いします。
- Masa2072
- ベストアンサー率51% (94/182)
日付は数値なのでLikeをつかっての先頭一致、部分一致などの検索はできません。 日付フィールドを文字列化するとLikeを使った検索ができるようになります。 Select * From 勤務表 Where CStr([日付]) Like '2008/06*" こんな感じで この辺は直接プログラム化する前に、クエリーのデザインビューなどで実際に実験してみることをお勧めします。
補足
アドバイスありがとうございました。 そしてお礼遅くなりまして大変もうしわけありません。 アドバイス頂いた内容でできました。感謝します。 もしよろしければ再度アドバイス願いたいのですが 現在はyyyy/mm/ddの形式で取り出されるのですが 取り出した値を表示する際、表示形式をyyyy/mmの 形にするにはどうすればよいのでしょうか? 何度も申し訳ありませんが、是非よろしくお願いします。