• ベストアンサー

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

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

  • wansm
  • お礼率57% (119/206)

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

  • ベストアンサー
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% (254/607)
回答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% (254/607)
回答No.9

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

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.8

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

wansm
質問者

補足

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

  • chayamati
  • ベストアンサー率41% (254/607)
回答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% (254/607)
回答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

  • Access フォーム コンボボックス

    フォーム上のコンボボックスの選択したデータをテーブルに保存するにはどのようにすれば宜しいのでしょうか? 実際のものは、社員が複数人表示されていまして、その社員一人一人が1日ごとの出勤が可能か不可能かをコンボボックスから選択しテーブルに書き込みたいのですが、その社員一覧のテキストボックスと出勤可・不のコンボ(コントロールソースにてテーブルの各日付ごとに設定)をフォームに作ったところ、社員一覧と社員に対するコンボがずらっと表示さるのですが、コンボを選択しようとしますと下部に「このコントロールは式○○に連結しているため編集できません。」と表示されます。 長文になり、尚且つかなり分かりづらい説明で申し訳ございませんが宜しくお願い致します。

  • access 分かれた日付の連結について

    accessで、連結を使って、フォーム内に、日付を表示させています。 元のデータは西暦日付date型です。 それを、 コンボ[平成22]年  テキスト[1]月 テキスト[2]日 と、三つに分けて表示させています。 連結の仕方は、format(day,"ggge") format(day,"m")というかんじで それぞれ表示させています。 日付の項目はたくさんあります。 これをそのままフォーム上で、月など、それぞれを変更して、データ更新させたいのですが、なにか方法はあるものなのでしょうか。 難しければ、updateをしようとおもっているのですが、なにか効率的な更新方法があればお教えいただきたく思います。 連結の仕方をかえるなどしてできれば、一番よいですが。

  • クエリの条件式に複数のコンボBoxの値を参照させるには?

    コンボボックスで選択された値を元に選択を行わせるクエリを作成しています。 ですがある特定のコンボボックスからの値でなく、複数のコンボボックスの値を組み合わせて選択を行うのはどの様にしたら良いのでしょうか? テーブル名:テーブル1 クエリ名:選択クエリ1 選択の元になるフィールドはテーブル1内の[時刻]フィールドです。 ここは日付/時刻型になっており、表示形式は[YYYY/MM/DD HH:MM:SS]です。 この部分である範囲の選択を行いたいのですが、それの元となるコンボボックスを年/月/日/時/分/(秒)に分けたいと考えています。 (秒は無くても良い) 通常コンボボックスの値を参照する際は Like [Forms]![フォーム名]![コンボボックス名] という条件式を使いますが、複数のコンボボックスの値を組み合わせる場合はどのように記述したら良いのでしょうか? またクエリのデザインビューで出来ない場合はモジュールでの記述方法をご教授頂けるとありがたいです。 よろしくお願いいたします。

  • アクセスでコンボボックスの連結を使用しています。

    アクセスでコンボボックスの連結を使用しています。連結内容はフォーム画面で1つのテーブルで作成されたフィールドの内容が右から順に5項目程度連結によって絞り込まれていくというような感じです。  フォーム画面で連結を使い、5つの絞込み作業をおこない、再度入力を初めからしたい場合、残りの4項目を空白にするにはどのようにすれば良いのでしょうか? 例 [近畿]-[大阪]-[大阪市]-[天王寺区]        ↓ 入力やり直し   [関東]-[  ]-[   ]-[    ] 初心者なのでよろしくお願いします。

  • Access フォーム上でのテキストボックスとテーブルの連結

    フォームヴィザードからフォームを作成すると、 テキストボックスと指定したテーブルを連結させることができるのですが、デザインビューでそれをするときに、テキストボックスのプロパティのコントロールソースにテーブル名を入れれば連結できるのかと思いきや、うまく表示されません。どこを設定すればテキストボックスとテーブルを連結できるのでしょうか?

  • Accessで家計簿を作っているのですが・・・(再

    いつもおせわになっております。 現在、Accessで家計簿なるものを作っているのですが・・・ まずマスタテーブルから入力データが存在する日付をクエリで抽出し、それをフォームのテキストボックス1のコントロールソースに指定して、そのテキストボックス1に表示されている日付を元にフィルタ機能を使ってその日に入力されたデータ一覧をサブフォームで表示するという方式を取っているのですが・・・(解かり難くてすみません この方式だとクエリのレコードを移動するとサブフォームの表示内容も対応してその日のが抽出されます。 しかし、データがたくさん蓄積されてくると一日ずつ(1レコードずつ)移動すると手間がかかってイライラしそうです。 で、同じフォームにコンボボックス1を追加し、上記にもあるマスタテーブルから入力されている日付を抜き出した日付一覧を取得してあるクエリを値集合ソースに指定してみました。 クリック時のイベント等もちゃんと設定したのですが、うまく動作してくれません。 コンボボックス1をクリックして選択したら、クエリをコントロールソースとするテキストボックス1の表示内容がコンボボックス1で選択されたものに変更される、みたいなことって出来ないのでしょうか? コンボボックス1だけにしてテキストボックス1を消すとコンボボックス1で選択した日付の内容をサブフォームで表示することは出来たのですが、それだとコマンドボタンを押して次のフィールドに移動し、かつコンボボックス1の表示内容も自動変更というのが出来なかったので・・・ 長文でスミマセンが、どなたかお知恵の拝借お願いします。

  • Access VBA SQL文で教えてください

    strSQL = "SELECT 日付,ブロック_cd,時刻 FROM テーブルA" strSQL = strSQL & " WHERE 日付 = " & Me.売上日 & "" strSQL = strSQL & " AND ブロック_cd = & Me.cmb_ブロック & " strSQL = strSQL & " AND 時刻 = & Me.時刻 & " WHERE句以下を削除するとレコードを読み込んできます。 よって、WHERE句がおかしいようです。 テーブルA: 日付:日付/時刻型(yyyy/mm/dd) ブロック_cd:数値型 時刻:日付/時刻型(hh:nn) me.売上日:日付形式(yyyy/mm/dd) me.cmb_ブロック:コンボボックスの値(数値) me.時刻:時刻形式(hh:nn) おそらく、me.のくくり方がおかしいとは思うのですが どのように修正すればよろしいでしょうか? よろしくお願いします。

  • Accessコンボボックス

    Access2000でコンボボックスで日付を選択できるように したいとおもっています。 リストは、予め1999年~2010年をセットするなどして 月・日についてもコンボボックスを作成しています。 規定値ではformat(year(date()),"0000")などとして 現在日時から年・月・日を取得しています。 コンボボックス選択後、一つのデータとして入れ込んでいます。 次からは前のデータを参照し、コンボボックスは 予めその行が選択されているようにしたいのですが、 うまくいきません。 レコードから年・月・日などを取って コントロールソースに =format( year([tx_date]), "0000" ) ※tx_dateには"2002/12/18"という形で入っています。 を入力すると、コンボボックスを選択することが できません。 上記のような状況を打開する策をお教えいただけませんでしょうか? よろしくお願いいたします。 わかりにくくてすみません。

  • access2003レポートの文字列の連結について

    access2003で宛名ラベルを作成しています。 レポートで氏名と敬称を連結して印刷をしたいのですが敬称のところが数値の1と印刷されます。 敬称はプルダウンメニューになっていて予めテーブルで設定された値を印刷させたいのです。ちなみにレポートはクエリから抽出しています。 テーブルの設定は数値型でコンボボックスで別のテーブルから様、先生などの値を選択できるようになっています。 うまく説明できませんが、レポート上で氏名と敬称のフィールドを連結しなければうまくいきます。 氏名と敬称を連結して表示させる方法を教えてください

  • コンボボックス選択で編集不可に・・・

    編集可能なコンボボックスを持つダイアログがあります。 ダイアログを開いたときに、コンボボックスに項目を追加しています。 そして、このコンボボックスのポップアップを開いて、 現在選択している項目と異なる項目を選択すると、 なぜかコンボボックスが編集不可になったようになります (いったん別のウィンドウを最善面に表示して、再度表示 しなおすと普通に編集できる) なぜこのようなことが起きるのでしょうか? 項目を選択しても、普通に編集できるようにするには どうしたらよいでしょうか? 非常に困っています。そして急いでいます。 どなたかご存知の方いらっしゃらないでしょうか? #ちなみにJavaのバージョンはJ2SE1.4.0_01を使っていま す #それと、なぜか1.4.1_01では起きませんでした。

    • ベストアンサー
    • Java

専門家に質問してみよう