Accessのフォームビューで年齢を計算させたいのですがどうすればよいのでしょうか?

A 回答 (2件)

現在の日付からというのでいいですか?


テーブルに「生年月日」というフィールド名をつけた場合です。
クエリーで下記のように記述します。

IIf(Right(Format([生年月日],"yyyy/mm/dd"),5)>Right(Format(Now(),"yyyy/mm/dd"),5),DateDiff("yyyy",[生年月日],Now())-1,DateDiff("yyyy",[生年月日],Now()))

このクエリーをもとにフォームをつくれば反映されますよ。
    • good
    • 0
この回答へのお礼

どうも有難うございました。
悩みがすべて解決できました。これからも明解な回答をお願いします。

お礼日時:2001/01/24 15:50

 昔にこんな質問があります。

これを参考にして下さい。

 また質問する時には、
 OSと、アプリケーションのバージョンは書いて下さいね。
 特に、Accessですと、97と2000では使える関数も大幅に違いますので...ね。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=15235
    • good
    • 0
この回答へのお礼

どうも有り難うございました。
確かにバージョンも書かないで質問するなんて非常識ですよね。これからは気をつけます。
参考URLは役に立ちました。これからもよろしくお願いします。

お礼日時:2001/01/24 15:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qひとつつのテーブルから二つのフォームを作成しました。そのフォームを連結させるにはどうしたらよいか教えてください。

既存のフォームは項目が多く一目でどれがどこにあるかわかりにくいので、使用していない項目は隠して欲しい、隠した項目もいざ必要となった時には見れるようにして欲しいと言われました。
そこで私は、使用してない項目は別のフォーム(以降:隠れフォームと記述)にして、既存のフォームにコマンドボタンを設けて、クリックすればたどり着けるようにしました。
ところが、隠れフォームへのコマンドボタンを押すと表示されるデータは既存フォームに表示されているデータであって欲しいのですが、隠れフォームのデータは一番最初のデータのままです。
既存フォームと隠れフォームを一緒に移動させる方法はないのでしょうか?
隠れフォームのテーブルは既存フォームと同じです。
隠したい項目だけを選んでクエリを作成してそこから隠れフォームを作成しました。
ツールボックスのサブフォームは使っていません。
どのような方法をとるとよいでしょうか?
どなたかお知恵を貸してくださるようお願いいたします。

Aベストアンサー

そのテーブルに、主キー(もしくは重複なしのインデックスつきの)フィールドはありますか?
もしあるのでしたら、

> 隠したい項目だけを選んでクエリを作成してそこから隠れフォームを作成しました。

とのことなので、そのクエリに、「既存フォームで現在表示中のレコード」に絞り込む条件を
追加してやるのが一番簡単だと思います。


1)隠れフォームのレコードソースにしているクエリをデザインビューで開く
2)主キー(または重複なしのインデックスつきの)フィールドがまだ追加されていない場合は
 それをドラッグ&ドロップなどで追加
3)上記フィールドの『抽出条件:』欄に、以下のような式を入力
 ・既存フォームの名前が「フォーム1」、上記フィールドが「ID」の場合:
  [Forms]![フォーム1]![ID]
 ・既存フォームがサブフォームを持ち、データ表示をそのサブフォームで行っている場合:
  (メインフォームが「フォーム1」、サブフォームコントロール(→「ソースオブジェクト」として
  指定しているフォーム名ではないので注意)が「サブ1」、上記フィールドが「ID」として)
  [Forms]![フォーム1]![サブ1]![ID]
4)クエリを保存して閉じる

・・・以上です。

なお、フォーム1が開いていない状態でこの隠れフォームを開くと、「[Forms]![フォーム1]![ID]」
(または「[Forms]![フォーム1]![サブ1]![ID]」)の入力を求めるパラメータダイアログが表示される
ようになります。

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

※蛇足※
Husky2007さんの後者案を、375kさんのフォームに現状のまま適用した場合、「現在レコード
ソースに設定済のクエリ」がいったん読み込まれた後に、再度SQL文がレコードソースとして
設定されることになるように思います。

もしそちらを採用されるのでしたら、隠れフォームのレコードソースは削除した上で、

Private Sub Form_Open(Cancel As Integer)
  If Len(Me.OpenArgs & "") = 0 Then
    Me.RecordSource = "クエリ1"
  Else
    Me.RecordSource = Me.OpenArgs
  End If
End Sub

とされるのがよいのではないでしょうか。(現在のレコードソースが「クエリ1」だったとして)

そのテーブルに、主キー(もしくは重複なしのインデックスつきの)フィールドはありますか?
もしあるのでしたら、

> 隠したい項目だけを選んでクエリを作成してそこから隠れフォームを作成しました。

とのことなので、そのクエリに、「既存フォームで現在表示中のレコード」に絞り込む条件を
追加してやるのが一番簡単だと思います。


1)隠れフォームのレコードソースにしているクエリをデザインビューで開く
2)主キー(または重複なしのインデックスつきの)フィールドがまだ追加されていない場合は
 ...続きを読む

QACCESS97でACCESS2003のmdbはどうすれば見れますか?

ACCESS97環境です。知人より作成してもらったACCESS2003のmdbを開く事が出来ません。
どうすれば開く事が可能でしょうか??

また、ACCESSがインストールされていないPCでACCEESを起動する事は可能でしょうか??

以前はVBにてEXEを作成し配布しておりましたが、今後はACCESSで作成し配布出来ればいいなと考えております。

よろしくお願い致します。

Aベストアンサー

>どうすれば開く事が可能でしょうか??
不可能です。ACCESS97で上位のバージョンを開くことはできません。
お友達にマイナーバージョンへの変換をお願いしてください。
「ツール」「データベースユーティリティ」「データベースの変換」でできます。

2003のmdbをそのまま開きたい場合は、Office2003デベロッパーエディションに含まれる
Access2003用のランタイムパッケージが必要になります。

QACCESSのフォーム上で複数検索したい項目がある場合どうすればいいですか?

(1)部品ID
(2)日付
(3)入庫か出庫 
以上3つを検索したいのですがどうすればいいでしょうか?

(1)の部品IDはリストBOXの一覧から選択し、選択したものをテキストBOXに表示させるという形で作成しました。
(2)の日付はテキストBOXに手入力という形です。
(3)の入庫か出庫はコンボBOXで選択するという形です。

検索ボタンを作成してクエリの更新をかけて表示したいと思うのですが、3つの条件のうちその時により、全ての検索条件を入力しなくても1つでも条件を入力するとその条件が表示させるようにさせたいのです。

あと、何も条件を入力せず、検索ボタンを押すと全てのデータが表示させれるようにもしたいのです。

どのようなコードを記述すればいいでしょうか?
よろしくおねがいします

Aベストアンサー

>”このオブジェクトに値を代入することはできません”と表示され・・
失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。
多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。

Private Sub Cmd1_Click()
Dim MyCriteria As String

MyCriteria = "日付 ="
If IsNull(Text2) Then
MyCriteria = MyCriteria & True
ElseIf Not IsNull(Text2) Then
MyCriteria = MyCriteria & "#" & Me!Text2 & "#"
Else
End If

strfilter = MyCriteria
strfilter = strfilter & " And 部品ID Like '*" & Me.Text1.Value & "*' And 区分 Like '*" & Me.Cmb1.Value & "*'"

Forms!フォーム名!サブフォーム名.Form.Filter = strfilter
Forms!フォーム名!サブフォーム名.Form.FilterOn = True
Forms!フォーム名!サブフォーム名.Requery

End Sub

メインフォーム上のテキストボックスやコンボの値をサブフォームのフィルターに代入するときはMe!Text1の指定で良さそうなので上記でサブフォームにフィルターをかけられます。(試したらフィルターかけられました。)
これでどうでしょう。

>”このオブジェクトに値を代入することはできません”と表示され・・
失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。
多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。

Private Sub Cmd1_Click()
Dim MyCriteria As String

MyCriteria = "日付 ="
If IsNull(T...続きを読む

QAccessで、フォームAからダイアログモードで立ち上げたフォームBを開き、フォームBを閉じた時にフォームA側でマクロを実行したい

タイトルのままなのですが、

フォームA(メインとなる画面)と
フォームB(コードの検索画面)があり、
フォームAからフォームBをダイアログモードで開いている状態から、
フォームBを閉じたときに、フォームA側でマクロを実行したいと思っています。

具体的には、フォームAにコード入力用のテキストボックスがあり、コード検索のためにフォームBを立ち上げ、コードを選択した後フォームAのテキストボックスにそのコードを入れて、そのコードの値を元にフォームAにあるコンボボックスの再クエリを行いたいのです。

コンボボックスの再クエリの方法等は理解しているのですが、
上記のような場合に、どのイベントがキックされるのかが分かりません。
どのようにすれば(どのイベントを選んでマクロを指定すれば)適切に実行できるでしょうか。

Aベストアンサー

フォームBの処理
「値の代入」
「オブジェクトの選択」
  オブジェクトの種類:フォーム
  オブジェクト名:フォームA
「再クエリ」
  コントロール名:コンボボックス名
でいかがでしょうか?

QAccess2000 フォームビューの表示関連

どなたか、ホントにお助け下さい。

A、B、Cテーブルのデータを1つのフォームで表示入力できるよう、A、B、Cを繋げたクエリ作成し、
A対B、A対Cの一対多リレーションシップ設定したんですが、フォームビューで確認すると背景だけで表示されません。

・コントロールのプロパティの「可視」の状態は「はい」
 コントロールのはフォーム上の配置位置が「ページヘッ ダー/フッター」は「詳細」となっております。

切り分け内容
・フォーム-対象フォルダ選択-開く-背景表示無し
-プロパティ-レコードソース-クエリー-レコードソースを外すと”入力フォーム自体”は表示されるようになりますが、各々#Name?となってしまいます。

お助け下さい。

Aベストアンサー

#Name?エラーについては、後半を読んで下さい。

同じテーブル構造でクエリ、フォームが空白表示される場合とそれを回避する術を紹介します。
まず、回避する術から見て下さい。

<Table1> <Table2>  <Table3>
ID<----+  ID     +--->ID
Data1 +----Table1_ID  |  Price
      Table2_ID---+
      Data1

このようなリレーションシップになっているならば、
クエリを<SQLビュー>で確認すれば、

SELECT Table2.ID, Table1.Data1, Table2.Data1, Table3.Price
FROM Table1 RIGHT JOIN (Table2 LEFT JOIN Table3 ON Table2.Table3_ID = Table3.ID) ON Table1.ID = Table2.Table1_ID;

となります。
この場合、Table2にデータを次のように登録できるようにするには、参照整合性のレ点を消す必要があります。

ID  Table1_ID Table3_ID Data1
1   1     1     XX
2   1     1     YY
3   0     0     ZZ

この場合、クエリにもフォームにもTable2のレコードが全て表示されます。
(条件抽出している場合は、それに合致する全てのレコード)

<Table1> <Table2>  <Table3>
ID<----+  ID     +----ID
Data1 +----Table1_ID  |  Price
      Table2_ID---+
      Data1

今、Table2とTable3の結合を<両方が同じのみ>に変更します。
すると、3行目が消えます。
また、Table3から対応するレコードを削除します。
そうすると、クエリもフォームも空白となります。
これは、リレーションシップの設定のなせるワザです。

***********************************
#Name?となってしまいます
***********************************

テキストボックスのコントロールソースが存在しないので当然のことです。

#Name?エラーについては、後半を読んで下さい。

同じテーブル構造でクエリ、フォームが空白表示される場合とそれを回避する術を紹介します。
まず、回避する術から見て下さい。

<Table1> <Table2>  <Table3>
ID<----+  ID     +--->ID
Data1 +----Table1_ID  |  Price
      Table2_ID---+
      Data1

このようなリレーションシップになっているならば、
クエリを<SQLビュー>で確認すれば、

SELECT Table2.ID, Table1.Data1, Table2.Data1, Table3.Price
FROM Tabl...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報