またもや行き詰りましたので再度質問させてください。勉強不足ですいません。
以下のような2つのテーブルがあり、フィールドAに日付を入力すると、テーブルYのレコードを以下のように1年分追加して、さらにフィールドCの規定値を設定することは可能でしょうか?
テーブルX
ID フィールドA
001 2015/05/01
テーブルY
ID フィールドB フィールドC
001 1 フィールドAの1ヵ月後
001 2 フィールドAの2ヶ月後
001 3 フィールドAの3ヵ月後
・・・
001 10 フィールドAの10ヵ月後
001 11 フィールドAの11ヵ月後
001 12 フィールドAの12ヵ月後
No.3ベストアンサー
- 回答日時:
特許年金について詳しくないので、わかりきったことを難しく考えているのかもしれませんが、
一度にこの先何回分発生させるかというのは、もう少し考える必要があるかもしれませんが、、、
100年先まで考えるのか、10年先で十分なのか、1ヶ月先のだけわかれば良いのか、、、
これは、一年分の支払い合計額を知りたいのか、レコードの追加はあるとして、
継続中止はあるのかなどなどを考えながら、テーブルの構造をかんがえてつくらないと、
あとから、難しいことをやらなくちゃいけなくなる可能性が出てきますね。
まずは、特許案件を個別に管理するテーブルと、支払い履歴を管理するテーブルが必要と
いう結論に達したのは間違っていないと思います。 これで、将来の支払いスケジュールを
管理するのであれば、どのタイミングでこの先何回分のレコードを作製させるのかを
決めなくてはいけません。 どのタイミングでが、御提示の案によると新規レコードの発生と
ともに、ということであれば、3年分作ることもできますが、じゃあ、3年後はどうするの
かなど、あらかじめ考えておく必要があります。 それは、10年にすれば問題が解決するのか、
というはなしでもあります。 長期間になると、10年後も支払い金額が同じなのかなど、
不確定な要素も出てくるかもしれません。
まあ、いろいろ心配していても何も進みませんね。
具体的アドバイスには、まだ至れないですが、
質問者様の質問は、大きく分けてふたつあると考えます。
①手入力によらない方法で新規レコードはどのようにして作るのか?
②複数の値より、一つの結果を求めたい場合はどのようにするのか?
これを双方理解できないと、解決しにくい問題だと思います。
①はアクセスのクエリ機能を使うか、VBAを使ってレコードを作製する、VBAでSQLを実行させるなどいくつか方法があります。
②に関しては、VBAでファンクションを作るというのが現実的です。
ので、順番的には①が先なのですが②から説明したほうがよいかと思います。
とはいえ、こんなところで私が書くよりネット上により詳しく丁寧な説明があると思うので、まずはそのあたりを一読してみて、全体の雰囲気を掴んでみてください。
http://vba.officehp.com/article/97483290.html
で、②についてですが
・fieldAの値
・fieldZの値
・xカ月先の支払い
の三つの値から、
・xヶ月先の支払い日
を特定したいということでよいでしょうか?
基本的には、以下のような形で求めることができます。 現在ではただxヵ月後の日付を求めているだけです。 これだけであれば、別にファンクションを利用する理由はありませんが、その他の条件が詳しくわかれば、それに対応したコーディングすることもできると思います。
function DateofP(fieldA,fieldZ,x) as date
DateofP = dateadd("m",x,filedA)
end function
で、このファンクションは、クエリからも引用できますし、多分フォーム上からも使うことができるんじゃないかと思います。 で、必要であれば、この先はこのファンクションを訂正し、fieldZの値にも対応できるようにすることと、実際にレコードを作製する方法を提示していきたいと思います。 世の中にはいろいろな方法がありますので、私の提示しているのが最善の方法というわけではありませんし、もっとわかりやすい方法もあるかもしれません。 とりあえず、こんな方法でよければコメントをください。 時間はかかるかもしれませんが、可能な限り私の考えを提示します。
確認しきれていないのですが、今後ファンクションを作るというやり方を確認していこうと思っています。私の勉強不足で今回は時間がなくなってしまいましたので、また、相談させてください。
色々と教えて頂きありがとうございました!
No.2
- 回答日時:
「可能ですか」と聞かれれば、「可能です」が答えになりますが、、、
このようなデータは、いつでも同じものがつくれるので、作る意味が少ないと思います。
(帳票用に、値がない場合でも、行を作りたい場合などあらかじめ作っておくようなことも
たまにはしますが、その場合でも1~12までの値を入れておくだけで十分です)
どうしても作らなくてはいけないというのであれば、どのように作るのかのはなしをする前に、
やはり、どのタイミングで作るのかの話しをしないといけません。
テーブルXのID001のレコードが作られたタイミングで作りたいなら(アクセスには
トリガーがないので)VBAで連続してSQLを発行するなどしたほうが、不整合が
起こりにくいのかなと思います。 ただ、そのような方法をとろうとすると連結フォームを
使わないほうが簡単にできるということになり、さらに、IDに関しては自動採番にしておいて、
テーブルX書き込み後、テーブルYを書く前に値をとってくるなどのめんどくさいことを
しなくてはいけなくなる可能性もあり、複数端末からのデータ作成の可能性などを考えると、
一筋縄では行かなくなる可能性があります。
なので、本当にこのテーブルは作る必要があるのか?
というか、何のためにこのレコードを使いたいのかがわかれば、
他のやり方をアドバイスできるかもしれません。
ちなみに、一ヵ月後は
dateadd("m",1,日付)
で、できます。
No.1
- 回答日時:
VBA抜きでしたら、
連番用のテーブルを作成します。
T連番
フィールド名を番号にします。
番号(長整数型)
1
2
3
・
11
12
と12まで入力しておきます。
クエリを作成することにします。
いま作ったT連番とテーブルXをウィンドウにドラッグし、
結合線は引きません。
デザイングリッドに
フィールド| ID |フィールドA|番号 |フィールドC:dateadd("m",番号,フィールドA)
テーブル |テーブルX| テーブルX|T連番
とします。
テーブルXに複数レコードが入っていて対象となるものだけを抜き出したい場合は
IDの抽出条件欄に記入します。
データシートビューに切り替えて正しくできていたら
もう一度デザインビューに切り替え、リボンの『テーブルの作成』をクリック、
テーブル名を聞いてくるので、テーブルY にします。
このクエリを適当な名前で保存。
ダブルクリックでクエリが実行され、テーブルY が作成されます。
テーブルYに追加したい場合は、クエリの種類を『追加』にして保存し、実行します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) Accessテキストボックス内に2つのフィールドの値を比較して大きい方の値を表示させる方法 1 2022/09/09 10:50
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- Access(アクセス) Accessフォームで複数条件でフィールドの値を表示する方法 4 2022/07/21 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Access】フォームで自動計算...
-
Accessのフィールド数が255しか...
-
INSERT INTO ステートメントに...
-
ACCESSで400以上のフィールドが...
-
view作成時にデータ型を変更し...
-
accessで重複を防ぎたい
-
IT用語について質問です。 以前...
-
Accessでテーブルの値をテキス...
-
ACCESSでテーブルのフィールド...
-
アクセスのテーブルデータをCSV...
-
SQLServer2005のSQL文での別名...
-
ACCESS検索★ある文字を複数のフ...
-
FileMakerで登録ボタンを作りたい
-
通貨型で\\0の時、何も表示しな...
-
accessのレポートで元になるテ...
-
電話番号のデータの書式を変換...
-
Access 昇順・降順で並び替え...
-
ACCESS VBAにてCSV...
-
ACCESS2000「定義されているフ...
-
Sqlserver2005でテーブルを作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
Accessのフィールド数が255しか...
-
ACCESSで400以上のフィールドが...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
accessのレポートで元になるテ...
-
アクセス エラーを数値「0」に...
-
ExcelのデータをコピーでACCESS...
-
Accessで、固定アルファベット+...
-
Access 昇順・降順で並び替え...
-
accessで重複を防ぎたい
-
アクセス VBAで列の入れ替...
-
SQLServer2005のSQL文での別名...
-
ACCESSで和暦を西暦に・・・
-
ACCESS2000「定義されているフ...
-
主キーはオートナンバー型のID...
-
ACCESSでオートナンバーを任意...
-
ACCESSでテーブルのフィールド...
-
アクセス A列コピー B列貼り...
-
IT用語について質問です。 以前...
おすすめ情報
ShowMeHowさん、ご回答ありがとうございます。
説明を補足させて頂くと、
テーブルYを作成するタイミングは、できれば、フィールドAに日付を入力したときを希望です。その時点では必ずテーブルXのIDは付与されています。
テーブルを作る必要性に関しては、詳細には以下のようなことをやろうとしております。
実は特許年金の履歴データを作成したく、
特許が登録された日付を入力した時点で、次の年金期限を発生させたいのです。
そして、テーブルYには年金を支払った日付も入力できるようにして、毎年の期限と支払日を残し、さらには次の年金期限を発生させるというような感じです。
さらに悩ましいのは、1~3年目のフィールドCはフィールドAではない日付(テーブルXのフィールドZとしましょうか)を元に決定されます