これ何て呼びますか

Accessのサブフォーム内で連続番号を振りたい
メインフォームで受付番号親(オートナンバー型)
サブフォームで受付番号子(数値)
でサブフォームで連続番号を振りたい場合の方法が見つかりません。
例:
メインフォーム 受付番号親1
サブフォーム 受付番号親1 子1 商品~~~
サブフォーム 受付番号親1 子2 商品~~~ 
メインフォーム 受付番号親2
サブフォーム 受付番号親2 子1 商品~~~
サブフォーム 受付番号親2 子2 商品~~~

てな具合なんですけど。

A 回答 (4件)

フォーム自体で行うことも可能ですが、クエリ側で行うことをお勧めします。


関数として、DCount関数を使う事になりますが使い方わかりますか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
できたら、フォームでのやり方が今後のために知りたいのですが。

お礼日時:2005/11/17 20:25

おはようです。



すみません。Upするときに、DCountをDMaxに変更したため、思惑通り動作してませんでした><
申し訳ありません。
変更した理由が「1,2,3」とあって、「2」を削除後「1,3」とした時、Countだと3を追加、連続番号ではなくなるので、Maxに変更してみたんですが・・・。

Private Sub Form_BeforeUpdate(Cancel As Integer)

If IsNull(Me.受付番号子.Value) Then
If IsNull([Forms]![フォーム1]![受付番号親]) Then
Me.受付番号子.Value = 1
Else
If DCount("[受付番号子]", "サブフォームに使用しているテーブル名", _
"[サブフォームに使用しているテーブル名]![受付番号親] =" & [Forms]![親フォーム名]![受付番号親]) = 0 Then
Me.受付番号子.Value = 1
Else
Me.受付番号子.Value = _
DMax("[受付番号子]", "サブフォームに使用しているテーブル名", _
"[サブフォームに使用しているテーブル名]![受付番号親] =" & [Forms]![親フォーム名]![受付番号親]) + 1
End If
End If
End If

End Sub

多分これで^^;
単に連続する番号を振りたいのであれば、テーブルにフィールドを作成する必要もなくなるのですが、フィールドを作った理由を深読みしすぎてますか?
    • good
    • 0
この回答へのお礼

おはようございます。回答くださった方法で試してみましたが全て"1"が代入されてしまいます。
社内販売の管理として使用したく、依頼者が複数の方に商品を発送する際の管理番号として付番したかったので、レコードに保存します。
もう一度考えてみます。

お礼日時:2005/11/18 09:17

サブフォーム内での連番でしたら、「CurrentRecord」の代入でやるのが楽です。



既存のデータに割り当てるのでしたら、
1)メインフォームで先頭レコードに移動
2)サブフォームで先頭レコードに移動(念のため)
3)サブフォームの「受付番号」にCurrentRecordを代入したら、
 次のレコードに移動
4)同様に、サブフォームの最後のレコードまで繰り返し
5)メインフォームで次のレコードに移動
6)上の「2)~5)」を、メインフォームの最後のレコードまで繰り返し
となります。

新規レコードの場合は、「レコード挿入時」イベントでCurrentRecordを代入するのがよいでしょう。


一応、既存レコードへの代入については、以前の回答でサンプルを作成してますので、よければそちらも参考に。(→参考URL)

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

回答ありがとうございます。
基本的に新規レコードのみに適用します。
ただし、結構ド素人なもんでCurentRecordの使い方がよくわかりません
もう少し詳しく教えていただくと幸いです。

お礼日時:2005/11/17 23:24

結構、フォームで行おうとすると、難しいですね^^;



サブフォームの更新前処理で、

Private Sub Form_BeforeUpdate(Cancel As Integer)

If IsNull(Me.受付番号子.Value) Then
If IsNull([Forms]![親フォーム名]![受付番号親]) Then
Me.受付番号子.Value = 1
Else
Me.受付番号子.Value = DMax("[受付番号子]", "サブフォームに使用しているテーブル名", _
"[サブフォームに使用しているテーブル名]![受付番号親] =" & [Forms]![親フォーム名]![受付番号親]) + 1
End If
End If

End Sub

で、サブフォームに使用しているテーブルの「受付番号子」の既定値を0を削除し、Nullに変更してます。
更新前処理まで「受付番号子」を空欄で置いてあるのですが、レコード移動時にすればカーソールがレコードに移った時にも数値が入れられますが・・・ESC等でデータを消された際、やはり更新後にも必要になってきます。

受付番号子(数値)を演算として、テーブルに保管せず、裏でサブフォームにオートナンバー型のインデックスを取り付け、表の表記だけ、子の連番を取り付けるって考えたのですが・・・。こちらの方だと新規の時にもレコードに受付番号子に値が入ってくるように何とかなるかな~っと^^;
    • good
    • 0
この回答へのお礼

さっそくありがとうございました。
手元にそのDBがないのでこの情報を持ってやってみます。

お礼日時:2005/11/17 22:01

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A