• 締切済み

accessのサブフォーム毎に連番をふり直す

accessのフォーム入力において、メインのフォームにサブフォームが一つ配置されています。 単票形式のメインフォームには、フィールド「ID」(主キー)と「社員名」と「日付」、「評価」が格納されておさり、「ID」で紐付けされたサブフォーム(帳票またはデータシート形式)に、社員の行動記録が入力されます。 ※行動記録:08:30~10:00 A社訪問 …など。 サブフォームにデータが入力される際、行動した時系列順に項番を振って管理したいと考えています。 データ例 メイン ID  日付   社員名   評価 1 2016/03/16 田中一郎  C 2 2016/03/16 鈴木政夫  D 3 2016/03/17 田中一郎  B サブ ID 項番 開始時間 終了時間 業務内容 1 1  08:30   10:00  A社訪問 1 2  10:25   11:40  見積書作成 2 1  08:30   12:00  会議 3 1  12:50   16:30  現場監督 3 2  17:00   21:50  報告書作成 クエリやイベントプロシージャにDcountやDMax関数、carrentrecordなどを使ったアドバイスのある回答やブログを見付けて、色々と試してみたのですが、どれも上手く行きません。 一番簡単そうなDMaxをサブフォームの項番の既定値に =NZ(DMax("項番", "サブフォームのテーブル名")+1,1) とするも、「項番」の最大値+1の「3」が表示されます。 データの入力は、日付当日とは限らず、また、入力順序も、(新規にレコードを追加する場合を除き)ID順だとは限りません(後日修正を行う場合も有ります) こういった場合の対処方法について、ご教示をお願いします。 なお、当方の技能レベルは、VBAのコードの意味を理解しないまま、他人の作ったコードをコピーして、何となく修正して使用できている、と言った程度です。 よろしくお願いします。

みんなの回答

回答No.5

【補足】 ※※※※※※※※※※  [行番号].規定値 ※※※※※※※※※※ =DBLookup("SELECT MAX(行番号)+1 FROM 行動記録 WHERE 勤務表_ID=" & [勤務表_ID]) 売上伝票の[行番号]では規定値を設定して管理することがあります。その場合、私は、AccessのLoookup()は処理が遅いのでADOで同じ働きをするDBLookup()を書きます。が、もちろん Lookup()でも構いません。 =Lookup("MAX(行番号)+1","行動記録","勤務表_ID=" & [勤務表_ID]) で、問題は、行の削除や並び替え処理。追加処理は、[規定値]を設定するだけですから。そこで、フォームのクローンが登場することになります。

すると、全ての回答が全文表示されます。
回答No.4

【社員】 ID 名前 【勤務表】 ID 日付 社員_ID 評価 【行動記録】 勤務表_ID<---複合キー※非表示 行番号<------複合キー 開始時間 終了時間 業務内容 ※リンク列は、{テーブル名+_ID}にしています。 このようなテーブル設計の場合には、添付図のようなメインとサブフォームとをウイザードが生成する筈ですが・・・。もちろん、添付図ではメインとサブフォームの一部を少々変更しています。 {メインの変更} [勤務表.ID]を入力不可に! {サブフォームの変更} [行動記録.勤務表_ID]を非表示に! これですと、実に陳腐な売上伝票や仕入伝票と同じ体裁のものになります。その場合に、各行は追加も削除も両方発生することになります。また、行の入れ替えも発生します。そういうことで、 Q1、行の追加処理。 Q2、行の削除処理。 Q3、行の並替処理。 の定番のやり方を質問することになります。が、質問は、そのように的が絞られていません。ですから、回答のしようがないのが実情です。

すると、全ての回答が全文表示されます。
  • panacon
  • ベストアンサー率31% (214/679)
回答No.3

f22a さんへ 私なら、DMAXの値の代入マクロを作って、サブフォームの必須項目の更新後にマクロを貼り付けます。同じサブフォーム内ですので、フィールド名称のみで代入先を指定できます。こうすると、新規レコードを登録した際に、レコードの最大+1が代入されます。

すると、全ての回答が全文表示されます。
回答No.2

行動した時系列順・・・ということなので 並行しての作業がない、日付をまたがらないのなら 開始時間に時刻だけでなく日付のデータも併せて格納するようにすれば クエリで並び替えられますから そのクエリをサブフォームのレコードソースにするのが手っ取り早いかな?と思います。 そうすれば項番は不要ですし必要な場合でも番号を振るのが簡単になるのでは? 現状のままでは並び替えに使えるフィールドが無いので難しいかと。

すると、全ての回答が全文表示されます。
回答No.1

いわゆる伝票入力サブフォームの行番号管理に関する質問です。やり方は、フォームのクローンを利用するのが一般的です。

すると、全ての回答が全文表示されます。

関連するQ&A