• ベストアンサー

ACCESS 2003の条件分岐について教えて頂けないでしょうか?

access2003を勉強中です。 先週1週間かけても解決できないことがありまして、どなたか教えて頂けないでしょうか。 内容は 会社で使用する勤務表に関してです。 ユーザー名(コンボボックス)、日付(カレンダーコントロール)、 出社時間(テキストボックス)、退社時間(テキストボックス 、作業内容(テキストボックス)をユーザーが入力し「登録」 コマンドボタンのイベントで入力した内容を、勤務表テーブルに 反映させたいのです。 その時に同じユーザーの同じ日付を2件入力させないようにしたいので フォームに入力された内容からユーザー名と日付によって、 同じ内容が勤務表テーブルに無ければinsert、有ればupdateと 条件分岐をしたいのです。 しかし、 Public Sub kinmu() Dim mmrs As ADODB.Recordset Dim mmcn As ADODB.Connection Set mmrs = New ADODB.Recordset Set mmcn = Application.CurrentProject.Connection mmrs.Open "勤務表", mmcn, adOpenKeyset, adLockOptimistic mmrs.MoveFirst If DCount("[ユーザー名] & [日]", "[勤務表]", "[ユーザー名]=[Forms]![フォーム1]![コンボ56]" & _ "and[日]=[Forms]![フォーム1]![テキスト88]") = 0 Then mmcn.Execute "INSERT INTO 勤務表 ([ユーザー名],[日],[出社],[退社],[作業内容]) VALUES ([Forms]![フォーム1]![コンボ56],[Forms]![フォーム1]![テキスト88],[Forms]![フォーム1]![テキスト8],[Forms]![フォーム1]![テキスト17],[Forms]![フォーム1]![テキスト28]);" Else mmcn.Execute "UPDATE 勤務表 SET (ユーザー名=[Forms]![フォーム1]![コンボ56],日=[Forms]![フォーム1]![テキスト88],出社=[Forms]![フォーム1]![テキスト8],退社=[Forms]![フォーム1]![テキスト17],作業内容=[Forms]![フォーム1]![テキスト28] where [ユーザー名]=[Forms]![フォーム1]![コンボ56] and [日]=[Forms]![フォーム1]![テキスト88]);" End If として、「登録」コマンドボタンのイベントとしてCallキーワードによって呼び出そうとしているのですが、うまくいきません。 最初はDCount関数で件数を求め、それを変数に入れる。 IIF関数による分岐。などいろいろ試してはいたのですが、、、。 どなたか教えて下さい。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.2

1)レコードセットは何のために開いているのですか? 2)分岐うんぬんの前に、 mmcn.Execute "INSERT INTO 勤務表 ([ユーザー名],[日],[出社],[退社],[作業内容]) VALUES ([Forms]![フォーム1]![コンボ56],[Forms]![フォーム1]![テキスト88],[Forms]![フォーム1]![テキスト8],[Forms]![フォーム1]![テキスト17],[Forms]![フォーム1]![テキスト28]);" これは正しく動作していますか?

leadman
質問者

補足

早速のお返事ありがとうございます。 レコードセットは何のために開いているというか、開かないとできないものかと思っていました。 他、動作に関してなんですが、正直動作していません。 いろいろ試したのですが、クエリにてSQLを実行すると動いているのがわかるのですが、条件分岐にに組み込もうとすると動きません。動かせません、、、。

その他の回答 (9)

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.10

#1です まずは、UPDATE文の見直しだけしてみると・・・ Dim mySQL as String mySQL = "UPDATE 勤務表 SET ( " & _ "ユーザー名 = '" & [Forms]![フォーム1]![コンボ56] & "', " & _ "日 = #" & Format([Forms]![フォーム1]![テキスト88], "yyyy/mm/dd") & "#, " & _ "出社 = #" & Format([Forms]! [フォーム1]![テキスト8],"hh:nn") & "#, " & _ "退社 = #" & Format([Forms]![フォーム1]![テキスト17],"hh:nn") & "#, " & _ "作業内容 = '" & [Forms]![フォーム1]![テキスト 28] "' " & _ "Where [ユーザー名] = '" & [Forms]![フォーム1]![コンボ56] & "' " &_ "And [日] = #" & Format([Forms]![フォーム1]![テキスト88], "yyyy/mm/dd") & "# ;" Debug.Print mySQL mmcn.Execute mySQL と、いう感じかな? > 作業時間 日付/時刻型 の辺りは、基本的にクエリー上に生成するフィールドであって、テーブル上ではないと思うんだけど・・・「休憩時間」がないのが、引っかかってるのかな? 後、日付も・・・基本的に、出社時刻、退社時刻に、含められるから、クエリー上に作成、テーブル上に設定するフィールドじゃ、無いような・・・ > シングルクオートやダブルクオート等使い方が複雑で理解できていません。 これは、VBA上では、ダブルクオートのみが文字列として区分 SQL上では、シングルクオート、ダブルクオート同義、VBA上では、VBAの文字列と混同しないように、SQL用にシングルクオートを使用してると・・・特に好み次第で、使い方が違うという話^^;;;

leadman
質問者

補足

返信いただきありがとうございました。 実は、いろいろと調べていくうちにやりたい事は下記のコードで できることがわかりました。せっかく高度なやり方を教えて頂いた のに。。。早く教えて頂いた内容で使いこなせるよう勉強したいと 思います。今回は本当にありがとうございました。 'DCount関数で勤務表の中からユーザー名がコンボ56と同じ且つ日がテキスト88と同じものをカウントする If DCount("*", "勤務表", "勤務表.ユーザー名 = " & _ "[Forms]![フォーム1].[コンボ56] AND 勤務表.日 = [Forms]![フォーム1].[テキスト88]") = 0 Then 'DCount関数の結果が0だったら挿入処理 DoCmd.RunSQL "INSERT INTO 勤務表 " & _ "(ユーザー名,月,日,出社,出社属性,退社,退社属性,作業時間,作業内容) " & _ "VALUES ([Forms]![フォーム1]![コンボ56], " & _ "[Forms]![フォーム1]![テキスト77], " & _ "[Forms]![フォーム1]![テキスト88], " & _ "[Forms]![フォーム1]![テキスト8], " & _ "[Forms]![フォーム1]![コンボ58], " & _ "[Forms]![フォーム1]![テキスト17], " & _ "[Forms]![フォーム1]![コンボ60], " & _ "[Forms]![フォーム1]![テキスト66], " & _ "[Forms]![フォーム1]![テキスト28]);" Else 'DCount関数の結果が0ではなかったら更新処理 DoCmd.RunSQL "UPDATE 勤務表 SET " & _ "ユーザー名 = [Forms]![フォーム1].[コンボ56] , " & _ "月 = [Forms]![フォーム1]![テキスト77] , " & _ "日 = [Forms]![フォーム1]![テキスト88] , " & _ "出社 = [Forms]![フォーム1]![テキスト8] , " & _ "出社属性 = [Forms]![フォーム1]![コンボ58] , " & _ "退社 = [Forms]![フォーム1]![テキスト17] , " & _ "退社属性 = [Forms]![フォーム1]![コンボ60] , " & _ "作業時間 = [Forms]![フォーム1]![テキスト66] , " & _ "作業内容 = [Forms]![フォーム1]![テキスト28] " & _ "where ユーザー名 = [Forms]![フォーム1].[コンボ56] And 日 = [Forms]![フォーム1]![テキスト88];" End If

  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.9

本題とそれてきましたのでこのあたりで最後にします。 http://office.microsoft.com/ja-jp/access/HA011170771041.aspx ここが参考になると思うので読んでみてください。 また、検索サイトで「access SQL フォームの値」などのキーワードで検索してみるといいかもしれません。 いくつものことを一度にやろうとすると、うまくいかなかったときにどこが悪いのかわかりません。 MsgBoxなどを利用して自分の思い通りの値が取得できているかどうかを確認しながらプログラミングしたらいいと思います。

leadman
質問者

補足

今回は何度も教えて頂きまして本当にありがとうございました。 なんとかやろうとしている事はできました。 ただご指摘の通り一度に多くを求めるのはよくないと感じました。 また、なにかありましたらよろしくお願いします。

  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.8

No7です。 × MsgBox DLookup("*","勤務表","ユーザー名='xxxxx'") ○ MsgBox DCount("*","勤務表","ユーザー名='xxxxx'") でした。

  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.7

順番に・・・ということで、まずは If DCount("*", "勤務表", "勤務表.ユーザー名 = [Forms]![フォーム1].[コンボ56] AND 勤務表.日 = [Forms]![フォーム1].[テキスト88]") = 0 Then この部分をどうにかしてみたらいかがでしょうか? フォームにボタンを設置して 'xxxxxはテーブルに存在する名前 MsgBox DLookup("*","勤務表","ユーザー名='xxxxx'") のようなコードを書いてみてください。 テーブルにxxxxxさんが登録されている数がメッセージボックスで示されると思います。 次に、xxxxxを固定ではなくフォーム上のテキストボックスの入力した文字列が指定出来るようにするにはどうしたらいいか考えます。 というような感じで順番にプログラムを作っていくと良いかと思います。 ちなみに、これ以上詳しい説明を求めるのであればプログラムを組む以前にまず本を読んだ方がいいと思います。 初心者用の本でいいので1冊買ってみるのをおすすめします。

leadman
質問者

補足

度々のご返信感謝いたします。 ご指摘頂いた内容にてやってみたいと思います。 それとなんですが、、、 実は昨日のコードで勤務表テーブルに"ユーザー名"と"日"の組み合わせが1件も無い場合は入力フォームの値が勤務表にinsertされることは確認できたのですが、1件ある場合は 実行時エラー'3464' 抽出条件でデータ型が一致しません。 というエラーになってしまいます。どうやらupdateの構文が違うみたいです。 実は初心者用の本ほ3冊購入しており、会社にある2冊の計5冊をみながらやっているのですが、、、、情けないです。 ただ、どの本にもinsert,updateで (1)フォームの値を指定する時の方法 (2)updateのWHERE句で2つの条件を指定する方法 が無く、悩んでおります。 (いづれの本もSQLに関してはクエリで条件を指定しテーブルにinsert,updateする等のやり方で、今回は参考にならなそうです。) 他、Meキーワードの使い方も何がおかしいのかわからない状態です。 お忙しいとは思いますが、アドバイス頂ければと思います。よろしくお願いします。

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.6

#1です > Format関数を使用してyyyy/mm/ddか、mm/dd/yyyyを指定してあげてください ぁぁ、すみません 英語版Windowsだと、dd/mm/yyyyへ自動的に変換する場合があるので・・・yyyy/mm/ddの方が良いです

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.5

#1です > UPDATE文の更新条件の内容を > (1)勤務表テーブルの"ユーザー名"がコンボ56と同じ > (2)勤務表テーブルの"日"の値がテキスト88と同じ のエラーがどう言うSQL文を出しているか判りませんが・・・ テーブルのデータの型によって文自体も変わります ユーザ名はテキスト?数値? テキストは「'」で前後を囲む、数値は不要 日は、テキスト?日付時刻型? テキストは「'」で前後を囲む、日付型は「#」で囲む で、日付時刻型のデフォルトは、PCの設定よって変換が変わりますので、Format関数を使用してyyyy/mm/ddか、mm/dd/yyyyを指定してあげてください たまに自動だと、yyの2桁になる場合が、稀にあります まずは、テーブルの型を提示しないと、明確な回答は出ないよ^^;

leadman
質問者

補足

ご返信ありがとうございます。 そして、当方の返信が遅くなり大変申し訳ありません。 さっそくなんですが、 UPDATE文を実行時のエラーは 実行時エラー '3464' 抽出条件でデータ形が一致しません。 というものです。 ユーザー名 は テキスト型、 日     は 日付/時刻型 他にも 月 数値型 出社 日付/時刻型 出社属性 テキスト型 退社 日付/時刻型 退社属性 テキスト型 作業時間 日付/時刻型 作業内容 テキスト型 というフィールドがあります。 素人の質問で大変申し訳ないのですが、 ユーザー名=[Forms]![フォーム1]![コンボ56] の場合どこに ' を使用すればいいのでしょうか? いろいろ自分なりにも調べてはいるのですが、シングルクオートやダブルクオート等使い方が複雑で理解できていません。 アドバイス頂けますでしょうか?よろしくお願いします。

  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.4

まずは動作するInsert文とupdate文を書くところから始めましょう。 ADOでもいいですが、ローカルテーブルが対象であれば Docmd.RUNSQL "Insert into ~" Docmd.RUNSQL "update ~ Set ~" で事足ります。 また、 "ユーザー名=[Forms]![フォーム1]![コンボ56],・・・" ではなく、 "ユーザー名='" & [Forms]![フォーム1]![コンボ56] & "',・・・" のように書きます。 自分自身のフォームが対象であればMeキーワードを使った方がすっきりかけます。 いきなり長いコードを書くのではなく、一つずつ確認しながら書いていくことをおすすめします。

leadman
質問者

補足

度々のご返信ありがとうございます。 ご指摘頂いた内容でできるようにいろいろ試してはいるのですが、 どうやら DCount , Insert , updateともシングルクオートもしくはダブルクオートの使い方がおかしいのかうまくいきません。 If DCount("*", "勤務表", "勤務表.ユーザー名 = [Forms]![フォーム1].[コンボ56] AND 勤務表.日 = [Forms]![フォーム1].[テキスト88]") = 0 Then DoCmd.RunSQL "INSERT INTO 勤務表 (ユーザー名,月,日,出社, 出社属性,退社,退社属性,作業時間,作業内容) VALUES ( [Forms]![フォーム1]![ユーザー名], [Forms]![フォーム1]![月], [Forms]![フォーム1]![日], [Forms]![フォーム1]![出社], [Forms]![フォーム1]![出社属性], [Forms]![フォーム1]![退社], [Forms]![フォーム1]![退社属性], [Forms]![フォーム1]![作業時間], [Forms]![フォーム1]![作業内容]);" Else DoCmd.RunSQL "UPDATE 勤務表 SET 勤務表.ユーザー名 = '" & [Forms]![フォーム1]![コンボ56] & "' , 勤務表.月 = '" & [Forms]![フォーム1]![テキスト77] & "' , 勤務表.日 = '" & [Forms]![フォーム1]![テキスト88] & "' , 勤務表.出社 = '" & [Forms]![フォーム1]![テキスト8] & "' , 勤務表.出社属性 = '" & [Forms]![フォーム1]![コンボ58] & "' , 勤務表.退社 = '" & [Forms]![フォーム1]![テキスト17] & "' , 勤務表.退社属性 = '" & [Forms]![フォーム1]![コンボ60] & "' , 勤務表.作業時間 = '" & [Forms]![フォーム1]![テキスト66] & "' , 勤務表.作業内容 = '" & [Forms]![フォーム1]![テキスト28] & "' where 勤務表.ユーザー名 = '" & [Forms]![フォーム1]![コンボ56] & "' and 勤務表.日 = '" & [Forms]![フォーム1]![テキスト77] & "';" End If 他、Meキーワードは使用時エラーになってしまいます。 何度も申し訳ありませんが、よろしくお願いします。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.3

どうせDCOUNTで件数を求めるのにADOレコードセットを開くのなら mmrs.Open "SELECT * FROM 勤務表 WHERE [ユーザー名] = '" & Me.コンボ56 & "' AND [日] = #" & Me.テキスト88 & "#" でレコードセットを開き mmrs.RecordCountが1ならフィールドに各コントロールの値を代入してmmrs.Update mmrs.RecordCountが0ならmmrs.AddNewしてコントロール値を代入後Update とかの方がソース的にはすっきりすると思うのですが

leadman
質問者

補足

ご返信ありがとうございます。 そして当方からの返信が遅くなり大変申し訳ありません。 ご指摘頂いた内容是非参考にさせて頂きます。 いろいろ試しておりまして、まだ、実際にできておりませんが、結果は 返信させて頂きたいと思います。 よろしくお願いします。

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

ADOは、よく判りませんが・・・とりあえず気が付いた点で > If DCount("[ユーザー名] & [日]", "[勤務表]", _ > "[ユーザー名]=[Forms]![フォーム1]![コンボ56]" & _ > "and[日]=[Forms]![フォーム1]![テキスト88]") = 0 Then 「"[ユーザー名] & [日]"」の、フィールド名が適切ではない ("*"で十分だと思うよ) また、「and」の前後にブランクが無いため、演算子として、機能していない 環境によっては、誤動作の元になるので、「[Forms]![フォーム1]![~]」は、「"」の中ではなく、VBAにて値に変更して置く うまく行けば動くが、うまく行かないと、動作しない可能性が残る

leadman
質問者

補足

ご返信頂きありがとうございました。 また、当方からの返信遅くなり大変申し訳ありません。 Formの値を変更する件は、一度やりたい内容ができてから修正 したいと考えています。その他はご指摘通り変更させて頂きました。 ただ、いろいろ試しておりますが、なかなかうまくいきません。 (今はUPDATE文の構文エラーという内容で進めなくなっています。) UPDATE文の更新条件の内容を (1)勤務表テーブルの"ユーザー名"がコンボ56と同じ (2)勤務表テーブルの"日"の値がテキスト88と同じ 場合に更新するというふうに2つ設定する場合どのようにすればよいのでしょうか?アドバイス頂けると大変助かります。よろしくお願いします。

関連するQ&A

  • Access2003 DateSerial関数について教えて頂けないでしょうか?

    いつも助けていただき感謝しています。 また、わからないことがでてしまいまして、どなたかアドバイス 頂けないでしょうか? 現在access2003にて勤務表を作成中です。 作成中に様々なアドバイス頂き大分進んだのですが今回は、、、 勤務表テーブルとフォーム1フォームがあります。 フォームにはユーザーを選択するコンボボックスと年月を検索する コマンドボックス(例えば2008年04月分の勤務を検索したい場合に押します。) があります。(他のコントロールもあるのですが今回は影響ないと思いますので省略します。) 検索コマンドボックスを押した際、ユーザーコマンドボックスにて選択されている ユーザーを使用。空白ならインプットボックスを表示させ検索したいユーザーを入力してもらい、 そのユーザーを使用します。 その後、さらにインプットボックスを表示し検索したい月を入力してもらい ユーザーの検索したい月の勤務をフォーム内のリストボックスに表示させたいのですが、、、 インプットボックスに入力された月をどのように勤務表テーブルの日付フィールドと比較 すればよいのかわかりません。 SQL文でユーザー名から勤務表テーブルのデータを検索selectできるところまでいったのですが 条件にインプットボックスの値を使用するようにためしてもうまくいきません。 DateSerial関数を使用するなどやってはみたのですが、、、どなたかアドバイスよろしく お願いします。 Private Sub コマンド90_Click() Dim user Dim userkensaku3 Dim username Dim userkensaku2 Dim kensaku Dim tukisuu Dim saisyouti Dim gennzai If IsNull(コンボ56) = True Then user = InputBox("検索したいユーザー名を入力して下さい。 " ) userkensaku3 = DCount("*", "ユーザー", "ユーザー名='" & user & "'") Else username = コンボ56 userkensaku2 = DCount("*", "ユーザー", "ユーザー名='" & username & "'") End If kensaku = userkensaku2 Or userkensaku3 If kensaku = 0 Then MsgBox ("検索したいユーザーは登録されていません。登録をするか、入力をやり直して下さい。") Else tukisuu = InputBox("検索したい年、月を入力して下さい。" & vbCrLf & vbCrLf & "例 2008/06", "検索年月入力画面") saisyouti = Format(DMin("[日付]", "勤務表"), "yyyy/mm") gennzai = Format(Date, "yyyy/mm") End If If tukisuu = "" Then MsgBox ("値が入力されていません。") ElseIf tukisuu < saisyouti Then MsgBox ("検索対象外です。入力をやりなおして下さい。") ElseIf tukisuu > gennzai Then MsgBox ("検索対象外です。入力をやりなおして下さい。") ElseIf user = "" Then リスト42.RowSourceType = "Table/Query" リスト42.RowSource = "select ユーザー名,日付,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 " & _ "where ユーザー名 ='" & username & "' ;" End If End Sub

  • access 2003 コマンドボタンのEnabledイベントについて

    いつもお世話になっています。 どなたかわかる方アドバイスいただけないでしょうか? 現在、会社の勤務表をaccess2003にて作成しています。 勤務状況を保存する勤務表テーブルと入力用コントロールが 複数あるフォーム1フォームがあります。 出社時間や退社時間、作業内容を入力し登録コマンドボタンの イベントで入力内容を勤務表テーブルに入力し、同時に その月1ヶ月分の勤務状況をフォーム1フォーム上のリストボックス に表示させています。 今回は 表示している1カ月分の勤務に対して前月、翌月の勤務を表示する コマンドボタンを作成しました。 前月は問題なくできたのですが、翌月に関してはシステム時間に 対して未来の月に関しては表示させない(コマンドボタンを使用不可 にする制限をつけ)ようとしているのですが、できません。 翌月コマンドボタンのイベントで未来の月を表示させようとした時に 使用不可にしようとしても翌月コマンドボタンのイベントで 翌月コマンドボタンを使用不可にはできないみたいですし、 どうにもこまっています。 なにかいい案ありませんでしょうか?どなたかお願いします。 ちなみに翌月ボタンに関するコードです。 '翌月ボタンに関するイベント Private Sub コマンド89_Click() DoCmd.SetWarnings False Dim yokugetucount Dim yokugetu yokugetucount = DCount("*", "勤務表", "[ユーザー名] = [Forms]![フォーム1]![コンボ56] AND [日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)") If yokugetucount > 0 Then Me!リスト76.RowSourceType = "Table/Query" Me!リスト76.RowSource = "select id,format([日付],'mm/dd'),曜日,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 where [ユーザー名] = [forms]![フォーム1]![コンボ56] and ([日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)) ORDER BY 日付;" Else yokugetu = Format(DateSerial(Year(Calendar6), Month(Calendar6) + 1, 1), "yyyy/mm") Select Case Right(yokugetu, 2) Case 1, 3, 5, 7, 8, 10, 12 X = 31 Case 4, 6, 9, 11 X = 30 Case 2 If IsDate(yokugetu & "/29") = True Then X = 29 Else X = 28 End If End Select For C = 1 To X Work1 = yokugetu & "/" & Right("00" & C, 2) Work2 = Format(yokugetu & "/" & Right("00" & C, 2), "aaa") kakunin = DCount("*", "勤務表", "[ユーザー名] = [Forms]![フォーム1]![コンボ56] AND 日付 = #" & Work1 & "#") If (kakunin = 0) And (Me!コンボ56 <> "") Then DoCmd.RunSQL "Insert into 勤務表(ユーザー名,日付,曜日) values ([forms]![フォーム1]![コンボ56],#" & Work1 & "#,'" & Work2 & "')" End If Next End If Me!リスト76.RowSourceType = "Table/Query" Me!リスト76.RowSource = "select id,format([日付],'mm/dd'),曜日,出社,出社属性,退社,退社属性,作業時間,作業内容 from 勤務表 where [ユーザー名] = [forms]![フォーム1]![コンボ56] and ([日付] >= DateSerial(Year(calendar6),Month(calendar6)+1,1) and [日付] < Dateserial(Year(calendar6),Month(calendar6)+2,1)) ORDER BY 日付;" Calendar6 = DateSerial(Year(Calendar6), Month(Calendar6) + 1, 1) テキスト88 = Calendar6 DoCmd.SetWarnings True End Sub 前月ボタンはEnd Subの前に If DateSerial(Year(Calendar6), Month(Calendar6) + 1, Day(Calendar6)) > DateSerial(Year(Date), Month(Date), Day(Date)) Then コマンド89.Enabled = False Else コマンド89.Enabled = True End If を入れる事でやりたい事ができました。

  • 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 以上よろしくお願いします。

  • Accessのテキストボックスとコンボボックスの違い

    フォームにテキストボックスを3ケ用意し、テキストボックス名をtxt1,txt2,txt3としました。これにコマンドスイッチを作成し、機能を再クエリと設定しました。 フォームのサブフォームに再クエリの結果を表示するようにしました。 クエリのテキストボックス1の抽出条件は 条件  [Forms]![フォーム名]![txt1] または [Forms]![フォーム名]![txt1] Is Null    [Forms]![フォーム名]![txt1] Is Null テキストボックス2の抽出条件は 条件  [Forms]![フォーム名]![txt2] Is Null または [Forms]![フォーム名]![txt2]  [Forms]![フォーム名]![txt2] Is Null テキストボックス3の抽出条件は 条件  [Forms]![フォーム名]![txt3] Is Null または [Forms]![フォーム名]![txt3] Is Null [Forms]![フォーム名]![txt3] と設定し、テキストボックスにデータを入力し実行すると 正しい結果が得られるのですが、テキストボックスをコンボボックスに変更し、コンボボックス名をtxt1,txt2,txt3 とすると、抽出されません。 コンボボックスをテキストボックスのように扱うのには どうするのでしょうか。教えてください。

  • ACCESS2003 リストボックスについて教えて頂けませんか?

    こんにちは、何度も助けていただいているのですが、 また、わからないことがありまして進めなくなってしまいました。 どなたかアドバイス頂ければと思います。 現在Access2003にて会社の勤務表を作成するという課題に 取り組んでおります。 今回の疑問点は 入力用のフォーム フォーム1にはユーザー名コンボボックス、 日付Calendarコントロール、出社時間、退社時間、作業時間、 作業内容テキストボックス、登録、クリアコマンドボタン、 勤務状況表示リストボックスの各コントロールがあります。 登録をする際には各コントロールを選択ないし入力をし、 登録ボタンで各コントロールの値を勤務状況表示リストボックス に表示するようになっています。(1日分の登録を1行で表示。 登録状況に関わらず1ヶ月毎に表示しているので、まだ何もしていなく ても1ヶ月分の31行が表示されており、毎日登録をしていくことで 時間などがうまっていくようになっています。) ここまでは何も問題ないのですが、 勤務状況表示リストボックスに表示されている任意の日付、 例えば8日の行を選択した時に8日の行に表示されている ユーザー名、日付、出社時間、退社時間、作業時間、作業内容を 入力をした各コントロールと連動し表示させるようにしたいのです。 いろいろ調べてはいるのですがなかなかいい方法が見つかりません。 今の段階では1日の行しか選択できない状態です。 どなたかよい方法をご存知ありませんでしょうか? よろしくお願いします。

  • 選択クエリでの複数抽出条件の記述について

    フォーム上に「テキストボックス」、「コンボボックス」、「チェックボックス」の項目があって、それぞれの条件に合致した、データを抽出する選択クエリを書いてるのですが、うまく抽出してくれません。 「テキストボックス」、「コンボボックス」には、[Forms]![テーブル名]![入力するボックスの名前] or 、[Forms]![テーブル名]![入力するボックスの名前] is nullと記述しています。 「チェックボックス」には、、[Forms]![テーブル名]![チェックボックスの名前] = True or [Forms]![テーブル名]![チェックボックスの名前] = Falseと記述しています。 しかしながら、任意のコンボボックスからテキストを選択し、チェックボックスにレのついたデータを抽出したくても正しいデータを表示してくれません。 どなたか、クエリに詳しい方よろしくお願いいたします。

  • access2003 変数の値を別ファイルから読み込む方法について

    いつもお世話になっております。 どなたかアドバイス頂ければありがたいです。 現在会社の勤務表をaccess2003にて作成しております。 勤務表テーブル、フォーム1フォームがあり フォームの各入力コントロール(テキストボックス等)に入力 した値をコマンドボタンのイベントで勤務表テーブルに入れるように なっています。 各コントロールの状況によってMsgBox関数を使用しメッセージを 表示するようになっているのですが、(例えば出社時間が退社時間が 早い時間で入力されている場合やユーザー名を選択しないで登録 しようとした場合など) この表示するメッセージを別のファイルに登録しMsgBox関数が 使用される時にそのファイルからメッセージを読み込み表示する ようにしたいのです。 何か方法がありましたらよろしくお願いします。

  • クエリの抽出条件

    クエリの抽出条件に [担当者を選んでください] クエリを開いた際に、担当者をドロップダウン一覧から選べるようにしたいのですが [Forms]![フォーム名]![コンボ名]は分かるのですが・・・ フォーム名とは、何を入力すれば良いのでしょうか? コンボ名はコンボボックスを作成した担当者名だと思いますが・・・? 基本的に1つのテーブルに全部の項目を入力し、クエリーを作成しています フォームは作成していました。 しかし、フォーム名を入力しても、コンボボックス名を入力しても[担当者を選んでください] の場所の名前が変わるだけなんです?? ご回答の程、よろしくお願い致します。

  • クエリの抽出条件

    クエリの抽出条件を手入力では無く、コンボボックス方式で プルダウンでリストを選びたいと思い下記の抽出条件を入力 [Forms]![フォーム名]![コンボ名] しかし、パラメータ入力時の名前が、Forms!フォーム名!コンボ名と変わるのみで プルダウンになりません クエリを過去のデータ検索のみで使用したいと思ってます。 ネットをくぐると、メインフォームを開いてとありますが、それでも駄目です。 また、クエリー検索だけで、メインフォームを開かないでプルダウン方式には 出来ないものでしょうか よろしくお願い致します

  • access クエリでIIF文で抽出条件なし

    フォームにコンボボックスを用意し、(コンボボックスは、「両方」、「条件A」、「条件B」の3項目です) クエリで抽出条件にIIF文を使い、 IIf([Forms]![フォーム]![コンボボックス]="両方",'',[Forms]![フォーム]![コンボボックス]) ”両方”を選択した場合は、「抽出条件なし」としたいのですが、できませんでした。 別案として、 IIf([Forms]![フォーム]![コンボボックス]="両方","条件A" or "条件B",[Forms]![フォーム]![コンボボックス]) なども試しましたができませんでした。 どうか解決方法をご教授願います。

専門家に質問してみよう