• ベストアンサー

【Access2002】サブフォームのレコードを自動的に1行表示させたい

お世話になります。 契約社員の契約更新を管理するDBを作っています。 社員マスター(社員NO,氏名、部署...主キーは社員NO)と をメインフォームに 契約マスター(社員NO、回数、更新済・・・主キーは社員NOと回数) をサブフォームにして フォームを作成中です。 例として 社員NO 010 氏名 田中太郎 営業部←メイン 回数 1回目、更新済YES/NO(チェックボックス)←サブ というレコードを持つとします。 契約社員は半年後に2回目の更新をするのですが、 その際、「回数は入っているが(2回目)更新済がNOのもの」という 選択クエリで次に更新する契約社員を抽出したいとおもいます、 今は、この2回目というのを手入力していますが(コンボボックス) 1回目の更新済がYESになれば、自動的に 回数の2回目を入力できた状態であれば非常に楽になります。 関数か簡易なVBAで何かいい方法があれば教えてください。 ちなみに回数は6回目が上限で、常に次の1回分だけ回数が自動的に入ってほしいです。(1,2回目が更新されているのなら3回目が入っている状態) よろしくお願いします

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

レコードを追加するのですから追加クエリを作ることになります INSERT INTO 契約マスター ( 社員NO, 回数, 更新済 ) SELECT 社員マスター.社員NO, nz(DCount("*","契約マスター","社員NO=" & [社員NO]),0)+1 AS 回数, Null AS 更新済 FROM 社員マスター; このクエリはデザインビューで作れますが デザインビューでの作り方を書くのは面倒なので 上のSQLをSQLビューに貼り付け、デザインビューで表示してください 別件 マスターというのは半固定的な基礎データを集めたテーブルに対してつける名前です 契約の状況を記録するテーブルにつけるのはまずいですね

paopao1234
質問者

お礼

あrがとうございました。 この通りにやりましたら、できました。 今回nzという関数をはじめてみたので、調べました。 別件の回答もありがとうございます。まだまだ 知らないことばかりですね。

その他の回答 (1)

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

質問に対しての答えではないのですが・・・ > 更新済YES/NO これは、YES/NOでは無く、日付時刻型の方が宜しいのではないでしょうか? いつ契約し、いつ更新したのか、上記データからでは読み取る事が不可能で 次回更新時って、引っ張るにも容易では無いような気がします その辺は、お考え済みであれば問題ないのですが・・・ テーブルのイメージをしっかりしてから、クエリー、フォームと作りこんでいかないと、テーブルを変更した途端、クエリー、フォームの作り直しと言う2度手間を食らいますけど・・・

paopao1234
質問者

お礼

ありがとうございました。 確かに、そうだと、回答をいただいて 気付きましたので テーブルを変更しました。まだ データが少ない段階だったのでよかったです。

関連するQ&A

  • Access2003 サブフォームについて

    サブフォームを持つ画面で 親子テーブルを共に更新しようとしていて挫折しかかっています。 そこで皆様の知恵を借りれれば幸いです。 <<画面表示>> メインフォーム…受注  ┗サブフォーム…受注明細 <<更新条件>> ・メインフォームは変更可能 ・サブフォームは追加、変更、削除可能 ・サブフォームのデータ変更時  →受注明細テーブルを更新しない ・メインフォームのデータ更新時  →受注テーブルを更新しない ・メインフォームの更新ボタン押下時  →受注テーブル、受注明細テーブルを更新 <<質問>> 1.サブフォームの値をテーブルへ  自動更新(項目変更時に付随更新)せずに  任意更新(ボタン押下時など)出来ますか?  [サブフォームに主キー項目を設置せず行追加すると Not Null制約で怒られます。] 2.VBで言うところのFlexGridの様にサブフォームを  制御出来ますか?  RecordSourceを使うのではなく、  VBA内で持っている値を各セルに設定する 3.そもそも同一画面内で親子テーブル共に更新することは  有り得ないことなんでしょうか?

  • Accessのメインフォームとサブフォーム

    メインフォームのコマンドボタンからサブフォームのテーブルを操作することは可能でしょうか? 【メインフォーム】    日付[_2006/2/3]   『回数A(コマンドボタン)』    品物[_りんご]    『回数B(コマンドボタン)』    製作所[_青森]  【サブフォーム】     社員コード 所属   氏名   回数A 回数B     [_1234]  [_福島] [_山田] [_1]  [_0]     [_2345]  [_山形] [_佐藤] [_1]  [_0] とあるときに、『回数B(コマンドボタン)』をクリックすると、サブフォームの社員コード 「1234」と「2345」の回数Bに「1」(回数B+1)を入力し、回数Aを「0」(回数A-1) としたいのです。 どのようにすればいいのでしょうか? よろしくお願いします。

  • アクセスのサブフォームでのトラブル

    サブフォームにコンボボックスがあります。値集合ソースにクエリを指定しており、クエリの抽出条件でメインフォームのリストボックスの値を参照しています。 ところがなぜか、メインフォームのリストボックスを変更しても、それがサブフォームのコンボボックスに反映されません。どういうわけか、変更する前の値が反映されてしまいます。 ところがデータベースウィンドウからそのサブフォームを開くと、同じコンボボックスにメインフォームの変更がちゃんと反映されています。 メインフォームのリストボックスの更新後処理イベントでサブフォームのコンボボックスのリクエリを実行しています。 原因が分からず困っています。よろしくお願いします。

  • Access2000メインサブフォームでのレコード移動

    Access2000でデータベースを作っている中で、メイン/サブフォームを使用しています。 メインフォームで次レコードへ移動しようとすると、レコードNOは移動しているのですが、データ内容が変わりません。 私の予想なのですがサブフォームにあるレコードの数だけ、(メインフォームの)同一レコードの内容が表示されているようです。 ・次レコードへの移動はフォーム一番下の、デフォルトでついてるレコード移動のボタンを押しました。 ・(メインフォ-ムの)テーブルにはKeyを設定してあり、同じデータは存在していません。 以上ですが、不明な点がありましたらお知らせください。 もしお分かりになる方がおられたらお教えください。よろしくお願いいたします。

  • レコード更新時にデータ値を自動入力したい

    たびたびすみません。また詰まってしまったので教えていただけませんでしょうか。 Accessでレコード更新時にある項目に自動的に値を代入したいです。 前提としてテーブルは消費者マスターと単価マスターがあります。 単価マスターはフィールドとして単価ランク(主キー)と単価(通貨型)があります。 消費者マスターのレコードをフォームを使って編集する際に単価ランクをキーに 単価マスターから単価を引っ張ってきて 料金 というフィールドに代入して画面に表示し、 必要に応じて 料金 を画面から変更する形にしたいと考えてます。 どのように指定すればよいでしょうか? それからこれは別の質問にした方がいいかもしれませんが、差し支えなければ 教えて下さい。 レコードの更新の際に 更新日 というフィールドに当日日付を自動的に代入したいのですが どうすればいいでしょうか?

  • サブフォームで自動採番

    お世話になります。ACCESS2000で制作しています 主テーブル(マスタ)に顧客コード(主キー)、 サブテーブル(トラン)に顧客コードと枝番 というフィールドがあります。 顧客コードでリレーションシップを結んでいます。 それぞれのテーブルからクエリを経てフォームをつくり (Q_マスタ→F_マスタ、Q_トラン→F_トラン) また、検索フォームも別に作っています。 F_トランはF_マスタに埋め込んでいます。 検索フォームで検索して該当するデータが無い場合 DoCmd.OpenForm "F_マスタ", , , , acFormAdd で新規フォームを呼び出します。 このときサブフォームの枝番に自動的に「1」を入れたいのですが (開く時でも読み込み時でもいつでもいいのですが) どうしたら良いのでしょうか? ちなみに今は サブフォームのプロシージャで Private Sub Form_Open(Cancel As Integer)  If Me.NewRecord Then   Me![枝番] = 1  Else   Me![枝番] = DMax("枝番", "Q_トラン") + 1  End If End Sub としています。 こうするとQ_マスタの一番上のデータが 例えばQ_トランレコードを2つ持っていると 「3」と出てしまいます。 どのようにすればいいのでしょうか。 よろしくお願いします。

  • Access2002 フォームからのレコード入力の成功/不成功

    いつもお世話になっております。 早速ですが、従業員マスタテーブルがあり、それを元に従業員の情報を入力するフォームを作成しました。 従業員マスタテーブルは、「社員番号」だけをキーにしています。 例えば、新入社員のデータを、完全に新規に入力する場合、うまく行きます。 また、すでにいる社員の、「社員番号以外」のフィールドを更新することもできます。 しかし、社員番号が既存のものとかぶるような新規登録、あるいは情報変更に関しては、入力用フォーム上では正常終了したように見えますが、実際の従業員マスタテーブルをチェックしてみると、変更はされていません。 ですので、フォームしか触れないユーザは、自分の変更、新規追加がうまく行ったのかどうか、テーブルが見られないのでわからない、という状況になっています。 仕様要求としては、新規であれ、情報変更であれ、既存の社員番号に重なる場合はメッセージボックスで「更新失敗」を表示したいのです。 If Exist・・・のような分岐を情報を入力するフォームの「閉じる」ボタンの裏に設けたいのですが、やり方がイマイチわかっておりません。 ご存知の方がいらっしゃれば、ご教授、よろしくお願いします。 --------------------------------------------------------------- <従業員マスタ> ・社員番号・・・テキスト ・氏名・・・テキスト <仕様要求> 社員番号「0001」と「0002」の社員が存在する場合・・・ ・情報入力画面で、「0001」の社員の社員番号を「0002」に変更しようとすると、エラーメッセージ表示 ・新規情報入力(新入社員など)の際、社員番号が「0001」や「0002」の社員として登録しようとすると、エラーメッセージ表示 以上、お時間のあるときによろしくお願いします。

  • 【Access】サブフォームのコンボボックス連携

    ACCESSで社員の資格情報を入力するシステムを作成したのですが 以下の問題を解決できず困っています。 どうすればいいか お力を貸して頂けないでしょうか? ■問題:メインフォームで別レコードに移動した際 サブフォーム内の連携コンボボックスを更新されない □コンボボックス2の表示項目 1.分類別No 2.資格名ID 3.資格名 3のみを表示していますが、 1つ目のコンボボックス1の数値で 全コンボボックス2の資格名が出てしまいます。 ■フォーム構成 メインフォーム内に以下を設置 1.移動ボタン 2.帳簿サブフォーム □サブフォーム構成 レコード1 コンボボックス1 コンボボックス2 レコード2 コンボボックス1 コンボボックス2 ~~ 最終レコード コンボボックス1 コンボボックス2 ■コントロールソース コンボボックス1:大分類ID コンボボックス2:資格名ID ■テーブル構成 資格名  資格名ID(主キー)  大分類ID  分類別ナンバー(大分類ごとの登録順ナンバー)  資格名   資格大分類  大分類ID(主キー  大分類名 (IT系・運転系など) ■コンボボックス2の値集合ソース(表示項目:資格名) SELECT 資格名.資格名, 資格名.分類別No, 資格名.資格名ID FROM 資格大分類 INNER JOIN 資格名 ON 資格大分類.資格大分類ID = 資格名.資格大分類ID WHERE (((資格名.資格大分類ID)=[Forms]![メインフォーム]![サブフォーム]![コンボボックス1])) ORDER BY 資格名.分類別No; ------------------------------------ サブフォームに記載し効果のなかったVBAコード ’再クエリ Private Sub Form_Current() Dim cntrl As Control If Not IsNull(Me![コンボボックス1]) Then For Each cntrl In Form.Controls If cntrl.ControlType = acComboBox Then cntrl.Requery End If Next cntrl End If End Sub ’ソース更新 Private Sub Form_Current() With Forms!メインフォーム名!サブフォーム名!コンボボックス2 .RowSource = .RowSource End With End Sub ■参考サイト 'サブフォーム内での2つのコンボボックスの連動について 'http://goo.gl/nfvxW '~ '>   コンボボックスAの更新後処理イベントに '> Me!コンボボックスB.Requery '> 'Me.コンボボックスB.RowSource = Me.コンボボックスB.RowSource '数値でコンボボックス選択 'http://goo.gl/ovZ3C 'リストボックスの行を選択するときは、「Selected(n)」を使います 'http://goo.gl/RbsWX 'サブフォームの指定 ' =Forms!フォーム名!サブフォームコントロール名.Form.テキストボックス名 'http://goo.gl/vKxtj

  • Access サブフォームのリレーションに関して

    標記の件よろしくお願いします。 メイフォームとサブフォームを メインフォーム ID オートナンバー型 主キー設定設定あり。 サブフォーム  ID 数値型(長整数) 主キー設定なし。 の条件でリレーションしてあります。 現状ではメイフォームのIDとサブフォームのIDを を別々に手入力しています。 メインフォームのIDを入力したらサブフォームのIDが自動的に 同じ数値で表示されるような設定をするにはどのようにすれば よいのでしょうか。 また、新規データを入力する際に レコードセレクタにて空の入力欄を表示させて 前回のデータの入力を確定させているのですが これ以外の方法はありますでしょうか? この方法だと他の担当が操作した場合に いつデータ入力が完了したのか 次のデータを入力するにはどうすればよいのか 分かりづらいのではないかと思います。 上記2点どちらかでも構いませんので アドバイスお願いいたします。

  • Accessでメイン、サブフォームへの入力について

    accessほぼ初心者です。 取引先の会社情報を管理するために、access2007で顧客管理を作成しています。現在、取引先本社情報とその支店情報を登録するフォーム「会社登録フォーム」を作成していますが、次のようなことで困っています。 <問題としていること>: 「サブフォーム」をクリックした瞬間に、テーブルにレコードが追加されてしまう。 <改善したいこと>: 本社テーブルの会社名が未入力ならば、上記の操作でレコードを追加しない。(会社名に主キーは設定していません。) <会社登録フォームの環境>: 会社の本社情報をメインフォーム、その会社の支店情報をサブフォームに、単票形式のタブコントロールで複数画面にして支社ごとに分けて入力できる登録フォームを作成しました。本社テーブルの会社IDを主キーに、支店テーブルの支店IDを主キーにしてリレーションシップを設定しています。 <会社情報の入力に関して行っていること>: ・メインフォームに「新規」「更新」「削除」ボタンを設置。 ・新規ボタンでメインフォームの「会社ID」に自動採番。 ・会社(本社)名がないと困るので、未入力の状態で「新規」「更新」及び「サブフォーム」をクリックされた際に「会社名が未入力です。」のメッセージを表示され「OK」で元の状態にもどります。 ・会社(本社)名が入力済みならば、「更新」ボタンで、メッセージ「OK」「キャンセル」が表示され、「OK」ならば本社テーブルにレコードが追加され「キャンセル」ならばそのままの状態になります。 上記の<問題としていること>の補足ですが、新規ボタンで新規登録フォームに会社IDが自動採番(末番)されるのですが、「会社名」を入力せず、先にサブフォームの支店情報から(タブ名「支店(1)」)入力しようとした場合、「会社名が未入力です。」のメッセージを表示されますが、この時点で本社テーブルに、この採番でレコードが追加されてしまいます。入力者がそのまま会社名(本社)から入力するも、途中でキャンセルした場合、再度新規登録をする際、登録フォームの自動採番がキャンセルされた採番の次の番号になります。 キャンセルされた会社情報空白のレコードができるということになります。これを回避したいのです。 出来るだけ詳細をとおもい説明が長くなりましたが、よろしくお願いいたします。

専門家に質問してみよう