- ベストアンサー
【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回目が入っている状態) よろしくお願いします
- paopao1234
- お礼率68% (13/19)
- オフィス系ソフト
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
レコードを追加するのですから追加クエリを作ることになります INSERT INTO 契約マスター ( 社員NO, 回数, 更新済 ) SELECT 社員マスター.社員NO, nz(DCount("*","契約マスター","社員NO=" & [社員NO]),0)+1 AS 回数, Null AS 更新済 FROM 社員マスター; このクエリはデザインビューで作れますが デザインビューでの作り方を書くのは面倒なので 上のSQLをSQLビューに貼り付け、デザインビューで表示してください 別件 マスターというのは半固定的な基礎データを集めたテーブルに対してつける名前です 契約の状況を記録するテーブルにつけるのはまずいですね
その他の回答 (1)
- Dxak
- ベストアンサー率34% (510/1465)
質問に対しての答えではないのですが・・・ > 更新済YES/NO これは、YES/NOでは無く、日付時刻型の方が宜しいのではないでしょうか? いつ契約し、いつ更新したのか、上記データからでは読み取る事が不可能で 次回更新時って、引っ張るにも容易では無いような気がします その辺は、お考え済みであれば問題ないのですが・・・ テーブルのイメージをしっかりしてから、クエリー、フォームと作りこんでいかないと、テーブルを変更した途端、クエリー、フォームの作り直しと言う2度手間を食らいますけど・・・
お礼
ありがとうございました。 確かに、そうだと、回答をいただいて 気付きましたので テーブルを変更しました。まだ データが少ない段階だったのでよかったです。
関連する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) としたいのです。 どのようにすればいいのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- アクセスのサブフォームでのトラブル
サブフォームにコンボボックスがあります。値集合ソースにクエリを指定しており、クエリの抽出条件でメインフォームのリストボックスの値を参照しています。 ところがなぜか、メインフォームのリストボックスを変更しても、それがサブフォームのコンボボックスに反映されません。どういうわけか、変更する前の値が反映されてしまいます。 ところがデータベースウィンドウからそのサブフォームを開くと、同じコンボボックスにメインフォームの変更がちゃんと反映されています。 メインフォームのリストボックスの更新後処理イベントでサブフォームのコンボボックスのリクエリを実行しています。 原因が分からず困っています。よろしくお願いします。
- 締切済み
- その他MS Office製品
- 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
- 締切済み
- その他MS Office製品
- Access サブフォームのリレーションに関して
標記の件よろしくお願いします。 メイフォームとサブフォームを メインフォーム ID オートナンバー型 主キー設定設定あり。 サブフォーム ID 数値型(長整数) 主キー設定なし。 の条件でリレーションしてあります。 現状ではメイフォームのIDとサブフォームのIDを を別々に手入力しています。 メインフォームのIDを入力したらサブフォームのIDが自動的に 同じ数値で表示されるような設定をするにはどのようにすれば よいのでしょうか。 また、新規データを入力する際に レコードセレクタにて空の入力欄を表示させて 前回のデータの入力を確定させているのですが これ以外の方法はありますでしょうか? この方法だと他の担当が操作した場合に いつデータ入力が完了したのか 次のデータを入力するにはどうすればよいのか 分かりづらいのではないかと思います。 上記2点どちらかでも構いませんので アドバイスお願いいたします。
- ベストアンサー
- その他(データベース)
- Accessでメイン、サブフォームへの入力について
accessほぼ初心者です。 取引先の会社情報を管理するために、access2007で顧客管理を作成しています。現在、取引先本社情報とその支店情報を登録するフォーム「会社登録フォーム」を作成していますが、次のようなことで困っています。 <問題としていること>: 「サブフォーム」をクリックした瞬間に、テーブルにレコードが追加されてしまう。 <改善したいこと>: 本社テーブルの会社名が未入力ならば、上記の操作でレコードを追加しない。(会社名に主キーは設定していません。) <会社登録フォームの環境>: 会社の本社情報をメインフォーム、その会社の支店情報をサブフォームに、単票形式のタブコントロールで複数画面にして支社ごとに分けて入力できる登録フォームを作成しました。本社テーブルの会社IDを主キーに、支店テーブルの支店IDを主キーにしてリレーションシップを設定しています。 <会社情報の入力に関して行っていること>: ・メインフォームに「新規」「更新」「削除」ボタンを設置。 ・新規ボタンでメインフォームの「会社ID」に自動採番。 ・会社(本社)名がないと困るので、未入力の状態で「新規」「更新」及び「サブフォーム」をクリックされた際に「会社名が未入力です。」のメッセージを表示され「OK」で元の状態にもどります。 ・会社(本社)名が入力済みならば、「更新」ボタンで、メッセージ「OK」「キャンセル」が表示され、「OK」ならば本社テーブルにレコードが追加され「キャンセル」ならばそのままの状態になります。 上記の<問題としていること>の補足ですが、新規ボタンで新規登録フォームに会社IDが自動採番(末番)されるのですが、「会社名」を入力せず、先にサブフォームの支店情報から(タブ名「支店(1)」)入力しようとした場合、「会社名が未入力です。」のメッセージを表示されますが、この時点で本社テーブルに、この採番でレコードが追加されてしまいます。入力者がそのまま会社名(本社)から入力するも、途中でキャンセルした場合、再度新規登録をする際、登録フォームの自動採番がキャンセルされた採番の次の番号になります。 キャンセルされた会社情報空白のレコードができるということになります。これを回避したいのです。 出来るだけ詳細をとおもい説明が長くなりましたが、よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
お礼
あrがとうございました。 この通りにやりましたら、できました。 今回nzという関数をはじめてみたので、調べました。 別件の回答もありがとうございます。まだまだ 知らないことばかりですね。