• ベストアンサー

ACCESS2007連結している為編集できません

こんばんは。 ACCESS2007で一つお聞きします。 フォームに時間を選択するコンボボックスを作成しました。 コントロールソースに =Format([テーブルの日付時刻項目],"hh")として 入力しようとすると、このコントロールは連結している為編集できませんの エラーになってしまいます。 テーブルの日付時刻項目は 2017/05/31 21:30という感じでデータが入っています。 この項目に時と分はコンボボックスで選択し 日付+時+分で編集し更新したいのです。 エラーの解消方法がわかる方、教えて頂けないでしょうか。 宜しくお願いします。

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

  • ベストアンサー
noname#231195
noname#231195
回答No.11

ご質問に一つ一つ答えることはできますが、後でメンテできなくなりますよ。 ご自身の知っている範囲でできる機能を実現して、少しづつ拡張していくのがいいのではないでしょうか? まずフォームとフォーム上のコントロールです。 前に書いたプロシージャではこういう状況を想定しています。 デフォルトで時刻と分に今の値を表示する、という設定も書いておきました。 テキストボックス:テーブルの日付時刻項目 ソース:[テーブルの日付時刻項目]-本当にこんな名前なんですか?変だと思ったから単に[日付]とかいたのです。 コンボボックス:時刻 ソース:(なし) 値集合タイプ:値リスト 値リスト: 00:00, 01:00, 02:00 ...... 23:00 規定値:=Format([テーブルの日付時刻項目],"hh") 更新後処理:[イベントプロシージャ]-#10に書いたもの コンボボックス:分 ソース:(なし) 値集合タイプ:値リスト 値リスト: 00:00, 00:01, 00:02 ...... 00:59 規定値:=Format([テーブルの日付時刻項目],"nn") 更新後処理:[イベントプロシージャ]-#10に書いたもの >更新は 2017/05/31 18:20:00 となるのでしょうか? 私の書いたプロシージャでは、コンボボックスで時刻や分を選んで確定(例えばエンターを押す)させれば、その時点で[テーブルの日付時刻項目]の値がアップデートされます。

wansm
質問者

お礼

何度もありがとうございました。 大変参考になりました。

wansm
質問者

補足

回答ありがとうございます。 このような回答ができるのは 長年の経験でしょうか。

すると、全ての回答が全文表示されます。

その他の回答 (11)

  • chayamati
  • ベストアンサー率41% (260/625)
回答No.12

>今、もうひとりの方に補足コメントしたのですが >実際そのようになるのでしょうか? >初心者にて申し訳ありません。 回答No.10のszo_orz様のことですね -------------------------------------------------------------------------------------- szo_orz様の回答の抜粋 Private Sub 時刻_AfterUpdate() Me![日付].Value = DateSerial(Year(Me![日付].Value), Month(Me![日付].Value), Day(Me![日付].Value)) + TimeSerial(Me![時刻].Velue, Me![分], "0") End Sub Private Sub 分_AfterUpdate() Me![日付].Value = DateSerial(Year(Me![日付].Value), Month(Me![日付].Value), Day(Me![日付].Value)) + TimeSerial(Me![時刻].Velue, Me![分], "0") End Sub szo_orz様へ 他人様の回答を評価するのは差し控えたいのですがこの際お許しください。 ------------------------------------------------------------------------------------------------------ szo_orz様の命令文検証しました。命令文の末尾部分VelueをValueとしてパスしました。

すると、全ての回答が全文表示されます。
noname#231195
noname#231195
回答No.10

もちろん具体的に書くのは構いませんが、どこまでご存じなのでしょう。 私は、"イベントプロシージャ"という物自体をあまりご存じではないのではないのかという気がしているので、突っ込んで書かなかったのです。 まずイベントプロシージャをどう作るかという事については、いくつかリンクを張っておきます。 VBAのエディタを起動する方法をおみせしたいのです。 http://vba.officehp.com/category/5437972-1.html http://www.accessclub.jp/vba/help/005.html http://tsware.jp/study/vol16/vbabegin_23.htm それで、時刻と分を入力するコンボボックスにそれぞれこう書けばいいです。 Private Sub 時刻_AfterUpdate() Me![日付].Value = DateSerial(Year(Me![日付].Value), Month(Me![日付].Value), Day(Me![日付].Value)) + TimeSerial(Me![時刻].Velue, Me![分], "0") End Sub Private Sub 分_AfterUpdate() Me![日付].Value = DateSerial(Year(Me![日付].Value), Month(Me![日付].Value), Day(Me![日付].Value)) + TimeSerial(Me![時刻].Velue, Me![分], "0") End Sub

wansm
質問者

補足

大変丁寧な回答ありがとうございます。 ACCESSは初心者ですいません。 今は検証できないのですが、 [日付]の項目が2017/05/31 17:30:00となり この項目がテーブルとの連結フィールドになりますか? (追加するテキストボックス) あとは時と分のコンボボックスですが コントロールソースはどうなるのでしょうか? できれば訂正入力の時は、元々の時、分を 表示させたいのですが。 新規登録時 項目a 時コンボボックス 空白 分コンボボックス 空白 時コンボボックス選択 17 分コンボボックス選択 30 更新 2017/05/31 17:30:00 訂正入力 項目aを選択すると 時コンボボックス 17と表示 分コンボボックス 30と表示 訂正で 時コンボボックス 18を選択 分コンボボックス 20を選択 更新は 2017/05/31 18:20:00 となるのでしょうか? 何度も何度も申し訳ありません。 どうぞよろしくお願いします。

すると、全ての回答が全文表示されます。
  • chayamati
  • ベストアンサー率41% (260/625)
回答No.9

希望時間が希望時刻(時分入力)ならば 日付時刻項目=日付時刻項目+希望時刻 -Format([テーブルの日付時刻項目],"hh")/24 -Format([テーブルの日付時刻項目],"NN")/24/60 となります。

すると、全ての回答が全文表示されます。
  • chayamati
  • ベストアンサー率41% (260/625)
回答No.8

>日付+時+分で編集し更新したいのです 1日は1、1時間は1/24ですね 別に時刻ボックス「希望時間」を配置して 何かのイベントで次の式を実行します。 日付時刻項目=日付時刻項目+希望時間-Format([テーブルの日付時刻項目],"hh")/24 エクセルだと添付図のようになります。 C2に式 =A2-HOUR(A2)/24+B2を入れます。

wansm
質問者

補足

回答ありがとうございます。 今、もうひとりの方に補足コメントしたのですが 実際そのようになるのでしょうか? 初心者にて申し訳ありません。 どうぞよろしくお願いします。

すると、全ての回答が全文表示されます。
  • chayamati
  • ベストアンサー率41% (260/625)
回答No.7

ご質問の「=Format([テーブルの日付時刻項目],"hh")」の 日付時刻項目はシリアルナンバーという種類の一つの値です。 その中の時刻だけを取り出して入力対象には出来ません 数値、文字列も同様一部を取り出すことは出来てもこれを 入力対象とすることは出来ません。

wansm
質問者

補足

回答ありがとうございます。 2017/05/31 21:30:00という日付時刻型の項目を 時のみ、分のみのコンボボックスの連結フィールドは 難しいでしょうか? データ訂正の時は、元々のデータの時と分を表示するように したかったのですが。 表示はできるが訂正入力ができないのです。

すると、全ての回答が全文表示されます。
noname#231195
noname#231195
回答No.6

それをやるには、時刻や分のコンボボックスの更新後イベントでイベントプロシージャ(VBA)かマクロを走らせたらいいです。つまり、その更新後イベントで今のフィールドの値を"2017/05/31 コンボボックス時+ コンボボックス分+00の値"に書き換えるわけです。 あるいは全然アプローチを変えて、テーブルに時刻というフィールドと分というフィールドを別に作ってしまったらいかがですか? 日付と足す都合があるから、日付型のフィールドがいいと思います。 それで、フォームには=[日付]+[時刻]+[分]というテキストボックスを作って、そこで表示させればいいんじゃないでしょうか。

wansm
質問者

補足

再度ありがとうございます。 できましたら、テーブルのレイアウトの修正は避けたいのです。 その更新後イベントで今のフィールドの値を"2017/05/31 コンボボックス時+ コンボボックス分+00の値"に書き換えるわけです。 との回答ですが、もう少し具体的に教えて頂けないでしょうか? どうぞよろしくお願いします。

すると、全ての回答が全文表示されます。
  • chayamati
  • ベストアンサー率41% (260/625)
回答No.5

横から失礼します。 何か勘違いされていますね そもそも日付、時刻のOfficeでの実体はシリアルナンバーと言う正の実数で 1900/1/1の始まりからの経過時間です。 小数点以上が日付で小数点未満が時、分、秒になります。 >>=Format([テーブルの日付時刻項目],"hh")として入力 このコントロールは連結している為編集できません。 数値の3桁目を取り出して入力出来ますか

wansm
質問者

補足

 回答ありがとうございます。 数値の3桁目を取り出して入力出来ますかとのことですが 内容がわかならいのですが、 もう少しお聞かせいただけないでしょうか? よろしくお願いします。

すると、全ての回答が全文表示されます。
noname#231195
noname#231195
回答No.4

選択肢を00:00の形式にしたらうまくいくんじゃないかと思います。 時間なら01:00、分なら00:01って感じですね。

wansm
質問者

補足

本当に何度もありがとうございます。 できたら入力済みのデータを表示させるのに連結フィールドの方が よいのかと思い、コントロールソースに値をセットしました。 2017/05/31の年月日は別フィールドにあり できたら更新ボタンをクリックしたら 2017/05/31 コンボボックス時+ コンボボックス分+00の値で 更新したいのです。 例えば2017/05/31の項目とコンボボックス時で17、コンボボックス分で30とした場合、2017/05/31 17:30:00と更新したいのですが 既存データの表示、入力、更新とありますが 見当もつかず、すいませんご教授頂けないでしょうか? どうぞ、よろしくお願いします。

すると、全ての回答が全文表示されます。
noname#231195
noname#231195
回答No.3

あ、あとから気が付きましたが、分だけを表示してあるからと言って、そこに数値を入力して、分だけが変わるってことはないですよ。 入力するときは日付と時刻全体を入力する必要があります。 例えば時刻を入力するコンボボックスのソースが[テーブルの日付時刻項目]だとして、コンボボックスから4を選べば、テーブルに書き込まれる日付は1900年1月3日00時00分とかそんな日付になります。 時刻と分をコンボボックスで選んで、[テーブルの日付時刻項目]の値を更新したいのなら、例えば、時刻と分のコンボボックスは非連結のコントロールにして、それを基に[テーブルの日付時刻項目]の値(つまり日付と時刻)を決めて、[テーブルの日付時刻項目]フィールドに書き込む仕組みを自分で作る必要があります。 私がやるとすれば、時刻・分のコンボボックスの更新後イベントでそれをやらせるようにしますが、アクションクエリをうまく使ってもできるかもしれません。

すると、全ての回答が全文表示されます。
noname#231195
noname#231195
回答No.2

>書式の選択には時刻(M)とかしかありませんが 時刻だけを表示するならhh、分だけならnnとします。 その書式はコンボボックスから選択するだけでなく、自由に書式を設定できます。 詳しくはこちら↓をどうぞ。 https://support.office.com/ja-jp/article/Access-%E3%81%A7%E6%97%A5%E4%BB%98-%E6%99%82%E5%88%BB%E5%9E%8B%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E6%9B%B8%E5%BC%8F%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B-47fbbdc1-52fa-416a-b8d5-ba24d881b698 記事のタイトルには「日付/時刻型フィールドの」とありますが、書式設定の書き方はアクセス全体の共通仕様です。

wansm
質問者

補足

何度もありがとうございます。 コントロールソースに日付/時刻型フィールド名を設定し 書式設定は時のコンボボックスにはhh、分のコンボボックスにはmmを 設定しました。 すると入力しようとすると 「このフィールドに入力した値が正しくありません。たとえば 数値型のフィールドに文字列を入力しました」 のエラーになってしまいます。 今一度、教えて頂けないでしょうか? どうぞ、よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A