- ベストアンサー
アクセスのフォームについて
- クエリーからあるフォームを作っていますが、元になるクエリーに項目がないため、フォーム上で直接データを入力したいです。ページごとに異なるデータを入力する方法を教えてください。
- フォームで1ヶ月を3等分した図を作り、特定の日付を図の中に表示したいです。可能でしょうか?むずかしい依頼ですが、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2からです。 >その1はイベントもいろいろあるし「初期化や代入を行えばよい」と言われても・・・もう少し具体的だとありがたいのですが。 "レコード移動時"のイベントと書いたハズですが?フォームのイベントに有ります。 あと具体的と言いますが何をどうしたいのでしょうか?入力した値はどうやって保存するのですか?また、どうやってレコードに関連付けて持ってくるのでしょうか?その辺りが全く質問に記載されていなかったので取得方法、格納方法はクリアされていると思いました。 ただ、空にするのでしたらフォームのレコード移動時のイベントで Me.テキストボックスのコントロール名 = null で空になります。でも入力した値はどうやって保存されつおつもりでしょうか? ご質問にうち以下の部分が分かりません >元になるクエリー(テーブルにも)には項目がなく、ただそのフォームに表示されればいいというデータをそのフォーム上で入力したいのです。 >それぞれのページに違うデータをフォームから直接入力するにはどのようにしたらいいでしょうか? どう考えても矛盾しています。クエリー、テーブルに項目が無い情報をどこでどうやって表示させるのですか?レコード毎違うデータなのでその情報はレコード毎に持っていなければならないはずです。その大元のテーブルになくても、その付随したテーブルとして同一キーで、その項目の情報を作成しておかなければレコード単位に違うデータをフォームから入力することは不可能です。 2に関してですがその処理はその期間だけ表示されれば終了ですか?他の期間にはある日付は入ってこないのでしょうか? 仕様の場合は開始日の日付を clng(format([開始日],"dd")) などで取り出して select case文で区切ってあげれば済む話です。 まずフォームにはtext1~text6のテキストボックスを作り編集ロックにしておきます。 単純に書けば dim yyyymm as string dim dd as lng dd = clng(format([開始日],"dd")) select case yyyymm = format([開始日],"yyyymm") case "200203" select case dd case 1 to 10 me.text1 = "●" case 11 to 20 me.text2 = "●" case is > 20 me.text3 = "●" end select case "200204" select case dd case 1 to 10 me.text4 = "●" case 11 to 20 me.text5 = "●" case is > 20 me.text6 = "●" end select end select とやればいいです。 (あくまでザッと書いた物です。テストもしてないし工夫すればもっと短くできます。あと変数の属性もパッと作っただけです。) この期間は今はオンコーディングですが文字列ですのでご自分で取得した文字列でも良いです。この辺りは臨機応変に変更してください。 それとももっと細かな微妙な位置での表示でしょうか? それはこの方法では不可能ですね。 その場合は#3さんの方法だと思います。しかし10で割ってしまうと一ヶ月3ポイントしか打てないのでこれと同じですね。全く割らないと日数文スペースを表示するのでその位置になりますが、その場合フォントをMS P明朝やMS PゴシックではなくMS明朝やMSゴシックにすると等倍フォントになるので配置しやすくなります。 サンプルの式は開始日の年度の、一年前の12/31から開始日の日数を元にスペースを算出しているのでその辺りはご自分で調べて修正してくださいね。
その他の回答 (3)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 1. その非連結のテキストボックスを、[テキスト1]とすると、Form_Currentイベントに、 Me!テキスト1.Text = "" と書く。 2. ラベルや図形で書いた図に重ねるように、横の帯状のラベルを用意します。 そのラベルを[日付表示]とすると、Form_Currentイベントに、 Me!日付表示.Caption = =IIf(IsNull([開始日]),"",IIf(IsNull([終了日]),"",Space$(Int(([開始日]-DateSerial(Year([開始日])-1,12,31))/5)) & "●")) ちなみにこの場合、5で割っているので、5日ごとにスペース1つ分ずつ、"●"の位置が右に移動します。 これを10日ごとに位置を動かせばよいなら、割る数を10に替えればいいです。逆も同じです。 いろいろな日付で試して、図の方の位置を調整して下さい。 あとは、ラベルのフォントサイズを変えるとか。
補足
ありがとうございました。 何度もすみませんがひとつだけ教えてください。 「Form_Currentイベント」というのがどこかわかりません。ラベルやテキストボックスのプロパティではないのですか? それがわかればなんとかできそうな気がしますのでよろしくお願いします。
- Te-Sho
- ベストアンサー率52% (247/472)
1.フォームのレコードソースに連結していないコントロールだからレコードが移動しても、そのコントロールに対する初期化はされません。ですからレコードが移動しても前に入力した内容がそのまま残っています。 レコード移動時のイベントで、そのテキストボックスに対する初期化や代入を行えば良いだけです。 2.同じ幅のテキストボックスを作成して文字の位置は中央にし、日付の条件でその各々のテキストボックスの内容を判定して表示すれば良いのでは?テキストボックスは非連結にし、レコード移動時に判定して入れてあげれば良いかと。まぁラベルコントロールを使ってキャプションを変えても同じ事は出来ますが。 それが一番簡単な方法ですね。
補足
ありがとうございました。 せっかくですが私のレベルではちょっとわかりかねるご説明です。 その1はイベントもいろいろあるし「初期化や代入を行えばよい」と言われても・・・もう少し具体的だとありがたいのですが。 その2も同じくこれだけはどうしていいのかわかりません。 下に書きましたとおりです。この式の応用ができればと思ったのですが。
- O_cyan
- ベストアンサー率59% (745/1260)
>その1 非連結でテキストボックスのプロパティのコントロールソースを空白にすれば良いのでは。 コントロールソースにフィールド名が入っているのではないですか? >その2 いまいち内容がわかりません。 2002/3 2002/4 の部分の取得方法は? 3等分の印は日付からddの部分を抜き出しその値で表示させれば良いとおもいます。
補足
さっそくありがとうございました。 >その1 コントロールソースにフィールド名が入っているのではないですか? いえ空白です。 >その2 2002/3 2002/4 の部分の取得方法は? この表示そのものはラベルで作ります。 フォームにあるたとえば「開始日」という日付をこの図の該当する大体の位置に表示したいのです。 以前以下のような表を作りたいと質問したものです。 | 1 月 | 2 月 | 3 月 | 4 月 | 5 月 | 6 月 | A工事 ********* B工事 ******************** C工事 ********** その際、 =IIf(IsNull([開始日]),"",IIf(IsNull([終了日]),"",Space$(Int(([開始日]-DateSerial(Year([開始日])-1,12,31))/5)) & String$(Int(([終了日]-[開始日])/5),"*"))) という式をフォームのコントロールボックスに書けばできると答えていただき、うまく行きましたのでこれの応用ができないかと思ったのですが、どうしたらよいかわからいのです。
お礼
丁寧にありがとうございました。 1.の件は納得しました。 >2に関してですがその処理はその期間だけ表示されれば終了ですか?他の期間にはある日付は入ってこないのでしょうか? 同じフォーム上に日付データはいくつもあり、処理を行いたい日付データもいくつもあります。 むずかしそうですが書いていただいた方法を試してみます。ありがとうございました。