• ベストアンサー

ACCESS テーブルのフィールド値の書込方法

T1というテーブルにフィールド名”日付”(データ型は日付/時刻型)があります。 この日付は通常Q1という更新クエリのレコードの更新欄に date() を記入してその日の日付を記入するようにしています。 そこでこの日付をF1というフォームの非連結テキストボックス”テキスト1”に、例えば2014/04/03などと書くことにより、任意の日付を記入する方法を教えていただけないでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.2

現状のままでなるべく手直しをしない方向で考えると。 フォームF1のテキスト1(非連結コントロール)のプロパティの書式を、yyyy/mm/dd とします。 (ありえない日付もチェックしてくれるため) テキスト1 の入力後に他のコントロールに移動できる状態が必要です。 たとえば別のテキストボックスやコマンドボタンなど。 更新クエリでは、date() の替りに [Forms]![F1]![テキスト1] を レコードの更新欄にします。 これで更新クエリを開いてみてください。 ただ、これだと使いにくいのでフォーム上にコマンドボタンを追加。 そのクリック時イベントに Private コマンドボタン名_click() if msgbox("データを更新しますか",vbyesno)=vbno then exit sub end if docmd.setwarnings false '確認メッセージの抑制 docmd.openquery "更新クエリ名" docmd.setwarnings true end sub の様なのが基本です。 docmd.setwarnings false docmd.openquery "更新クエリ名" docmd.setwarnings true の3行を下記に変更し currentdb.execute("update テーブル名 set 日付 =#" & me!テキスト1 & "#") とVBA中で行えば更新クエリは不要です。

yokagura
質問者

お礼

ありがとうございます。解決しました。更新クエリ本来の?私の使い方が間違っていたと思います。 これは在庫帳なのですが、残数と入出庫数と日付を更新クエリで今までやってきました。 日付は今日以外必要なかったのでレコードの更新欄に date() でうまくいっていました。 今回、入力フォームを表示させたとき前回の日付が表示されるのを、(1)今日の日付にしたい(2)任意の日付での入力も可能したいとのニーズが起こりました。そこで date() では具合が悪いとなりました。 1レコードであれば選択クエリでも目的は達成されることを忘れていました。 更新クエリを使うのをやめ、入力フォームの読み込み時イベントに Me.テキスト1.Value = Format(Date, "yyyy/mm/dd") としました。 入力フォームのオープン時イベントでは「このオブジェクトに値を入れることはできません」エラーがでるようでした。 『currentdb.execute("update テーブル名 set 日付 =#" & me!テキスト1 & "#") とVBA中で行えば更新クエリは不要です。』の回答が解決のきっかけになりました。 その他のスクリプトも大変参考になりました。感謝申し上げます。

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

もしも、連結フォームを使っているなら、日付に連結していテキストボックス値を手動、もしくはVBAで書き換えればよいわけです。 そうでないなら、 1.SQLを書いてボタンを押下させたタイミングなどで実行させる 2.別途更新クエリをつくりボタンを押下させたタイミングなどで実行させる のどちらかの方法があります。(やっていることは同じですけどね) どちらにしても、更新させたいレコードを特定するIDのようなものが必要になります。 (まあ、日付を選ぶのに、適切なコントロールがテキストボックスなのかという疑問は頭をよぎりますが、なんやら、新しいバージョンのアクセスはカレンダーコントロールがどうだとか言ううわさも聞きますし、、、)

yokagura
質問者

お礼

ありがとうございます。 2の更新クエリで試しているのですが、レコードの更新に date() では今日の日付が記入出来ますが 、date() の代わりに [Forms]![F1]![テキスト1] では何も記入出来ないため苦戦しております。 もう少し頑張ってみます。

関連するQ&A