- 締切済み
同じ番号が入力された時に枝番を割当てたいです
アクセス2003でOSはXPです 受注番号に同じ番号が入力された時に枝番フィールドに1と入れたいのです 次にまた同じ受注番号が入力されると枝番フィールドに2と入れたいのです うまくいきません ご指南ください よろしくお願いいたします
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- hatena1989
- ベストアンサー率87% (378/433)
> 保存する部分ですが > 別にボタンをクリックするアクションで > > rs!受付番号 = Me!受付番号 > rs!枝番 = Me!枝番 > rs.Update > です。 rs はフォームを開くときにでも、同時に生成しているのでしょうか。 だとしたら、前回のコードの、Me.RecordsetClone を rs にするだけです。 Private Sub 受注番号_AfterUpdate() Select Case DCount("枝番","テーブル名","受注番号=" & Me.受注番号) Case 0 '新規の受注番号の時は何もしない Case 1 '同じ受注番号が1件あるとき With rs .FindFirst "受注番号=" & Me.受注番号 .Edit !枝番 = 1 .Update Me.枝番 = 2 End With Case Else Me.枝番 = Nz(DMax("枝番","テーブル名","受注番号=" & Me.受注番号),0)+1 End Select End Sub > 格納している受注番号と同じ番号が入力された時 > 格納してある受注番号に枝番1を付け後から入力した受注番号に枝番2と > したく、順に枝番3としたいのです それは分かっていますが、初めての受注番号を入力したときに枝番に 1 として、 次に同じ受注番号を入力したときに 2 とする仕様では何か不都合があるのなら、 その理由を教えてください、ということなのです。
- hatena1989
- ベストアンサー率87% (378/433)
非連結なら、ご提示のコードだけではテーブルに保存されませんが、 テーブルに保存する部分のコードもご提示ください。 それと、新規に入力するときに、最初から枝番に 1 と入れる仕様だと、どのような点で不都合なのか説明してください。
補足
ありがとうございます 保存する部分ですが 別にボタンをクリックするアクションで rs!受付番号 = Me!受付番号 rs!枝番 = Me!枝番 rs.Update です。 >新規に入力するときに、最初から枝番に 1 と入れる仕様 たとえば 1. 2. 3. とあって3と入れた時 1つ前の3に枝番1とついてあとに入れた3に枝番2をつける ということなのですが また 2と入れた場合もデーターの中の2に枝番1後から入れた2に枝番2としたいのです 格納している受注番号と同じ番号が入力された時 格納してある受注番号に枝番1を付け後から入力した受注番号に枝番2と したく、順に枝番3としたいのです よろしくお願いいたします 表現が下手ですいません
- hatena1989
- ベストアンサー率87% (378/433)
質問 > 受注番号に同じ番号が入力された時に枝番フィールドに1と入れたいのです > 次にまた同じ受注番号が入力されると枝番フィールドに2と入れたいのです ANo.1 補足 > 番号を入力した時の判断で > 同じ55555が入力されると1つ前の55555に枝番1そして入力した55555に枝番2としたいのですが ANo.3 補足 > 枝番フィールドは別に必要ないのですが > 55557と入った時に55557-2となって > 1つ前の55557が 55557-1 なんか、補足が入る度に少しずつ内容が異なってますが、それはいいとして、 目的は、重複するデータがあった場合、それぞれを識別できるように枝番をつけたいということだと思いますが、 55557-1、55557-2 というようにしてしまうと、グループ化するときとか、検索するときに、面倒なことになります。 受注番号 と 枝番 に分けた方がデータベースの設計としては自然です。 もう少し、目的を考慮して仕様を熟考したほうがいいように思います。 ANo.4 補足 > 受注番号 枝番は 非連結のテキストボックスです フォームを非連結なんですか。そのフォームでは新規データのみ入力するのですか。 また、入力した後、テーブルに反映させる現状のコードをご提示ください。
補足
ありがとうございます 新規のみの入力です 現在のコードは mlngBango = DLookup("最終受注番号", "受注番号管理", "受注番号管理キー =1") If Me!受注番号 = mlngBango Then Me.枝番 = Nz(DMax("枝番", "受注データ"), 0) + 1 End If よろしくお願いいたします
- hatena1989
- ベストアンサー率87% (378/433)
> 55554____ > 55555____ > となっていて > 番号を入力した時の判断で > 同じ55555が入力されると1つ前の55555に枝番1そして入力した55555に枝番2としたいのですが > 実現可能でしょうか 一応、この仕様でのコードを提示しておきます。 Private Sub 受注番号_AfterUpdate() Select Case DCount("枝番","テーブル名","受注番号=" & Me.受注番号) Case 0 '新規の受注番号の時は何もしない Case 1 '同じ受注番号が1件あるとき With Me.RecordsetClone .FindFirst "受注番号=" & Me.受注番号 .Edit !枝番 = 1 .Update Me.枝番 = 2 End With Case Else Me.枝番 = Nz(DMax("枝番","テーブル名","受注番号=" & Me.受注番号),0)+1 End Select End Sub
補足
ご指南ありがとうございます 誠に申し訳ございません 申し遅れました 受注番号 枝番は 非連結のテキストボックスです 本当に申し訳ございませんが 再度ご指南お願いいたします
- hatena1989
- ベストアンサー率87% (378/433)
> 55554____ > 55555____ > となっていて > 番号を入力した時の判断で > 同じ55555が入力されると1つ前の55555に枝番1そして入力した55555に枝番2としたいのですが > 実現可能でしょうか 実現可能ですが、ちょっと面倒なコードになります。わさわざそのようにする必然性が見えないのですが、 前に提示したコードでは、新規の受注番号を入力した時点で、1 と入力されます。 受注番号__枝番 55554____1 55555____1 というように、さらに新規レコードで 55556 と入力すると、 受注番号__枝番 55554____1 55555____1 55556____1 さらに、55555と入力すると、 受注番号__枝番 55554____1 55555____1 55556____1 55555____2 となります。これで、どのような不都合がありますか。
補足
ありがとうございます 枝番フィールドは別に必要ないのですが 受注番号フールドに続けて同じ番号が入った時に枝番が付けば良いのですが たとえば 55555 55556 55557 55557と入った時に55557-2となって 1つ前の55557が 55557-1 となって欲しいのですが
- nora1962
- ベストアンサー率60% (431/717)
試しみてください。 Dim cn As New ADODB.Connection Dim cnt As Long Set cn = CurrentProject.Connection Set cn = CurrentProject.Connection cn.BeginTrans cn.Execute "Update テーブル名 set 受注番号 = 受注番号 Where Not Exists ( Select 1 From TBL T2 Where TBL.受注番号=T2.受注番号 And TBL.受注番号=""" & Me.受注番号 & """ And T2.枝番<TBL.枝番)" cn.Execute "Update テーブル名 set 枝番 = 1 Where 受注番号 = """ & Me.受注番号 & """ And 枝番 is Null ", cnt If cnt = 0 Then cn.Execute "Insert Into テーブル名 values ( """ & Me.受注番号 & """, Null)" Else cn.Execute "Insert Into テーブル名 values ( """ & Me.受注番号 & """, " & _ Nz(DMax("枝番", "TBL", "受注番号='" & Me.受注番号 & "'"), 1) + 1 & ")" End If cn.CommitTrans 一番目のUPDATEコマンドは同じ受注番号で最大の枝番をロックするためのものです。
- hatena1989
- ベストアンサー率87% (378/433)
.> 受注番号に同じ番号が入力された時に枝番フィールドに1と入れたいのです 受注番号__枝番 55555____ ←未入力(Null値) 55555____1 55555____2 ということでしょうか。Null値が入ると扱いが面倒なので、 初めての受注番号は 1、その後、同じ受注番号が入力される度に、2, 3, 4・・・と加算されて行くという方法をお勧めします。 受注番号__枝番 55555____1 55555____2 55555____3 で、その方法ですが、テーブルと連結したフォームで入力するようにします。 受注番号のテキストボックスの更新後のイベントプロシージャを下記にように記述します。 Private Sub 受注番号_AfterUpdate() Me.枝番 = Nz(DMax("枝番","テーブル名","受注番号=" & Me.受注番号),0)+1 End Sub 受注番号のデータ型は数値型の場合です。テキスト型なら、 Private Sub 受注番号_AfterUpdate() Me.枝番 = Nz(DMax("枝番","テーブル名","受注番号='" & Me.受注番号 & "'"),0)+1 End Sub 以上です。
補足
早速 ご指南有難うございます 説明不足ですいません。 受注番号__枝番 55555____1 55555____2 55555____3 なのですが 最初に55555と入っていた時 つまり 55554____ 55555____ となっていて 番号を入力した時の判断で 同じ55555が入力されると1つ前の55555に枝番1そして入力した55555に枝番2としたいのですが 実現可能でしょうか もちろん55556と入力された場合は何もしない 困っていますのでよろしくお願いいたします。
補足
ありがとうございます 早速試してみましたが FindFirst "受注番号=" & Me.受注番号の Me.受注番号でエラー メソッドまたはデータメンバが見付かりません となります Me.受注番号はあるのですが? すいません ご指南ください