アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access2000を使用しています。
以下のようなテーブルを作成し、町内毎に
実施したアンケートを集計しようと思います。
***************************************
「アンケートテーブル」
---------------------------------------
町内    テキスト  3バイト  
入力連番  数値    4バイト
設問1   テキスト  1バイト
(主キー= 町内+入力連番(7バイト))
****************************************
これに対し入力用のフォームを作成しました。
非連結のテキストボックスに町内名を入れると自動的に
町内ごとの入力連番の最終番号を取得し、「町内」と「入力連番」
のテキストボックスに町内名と入力連番(の最終番号)を表示させ
「設問1」のテキストボックスにフォーカスを移動させたいのですが
主キーが2つ以上のフィールドを組み合わせてできている場合の最終
番号の取得のやり方とテキストボックスに表示させるやり方がよく
分かりません。
Dmaxを駆使すればよいのだと思いますが、どなたか解説していただけ
ばありがたいのですが・・・・。
どうぞよろしくお願いいたします。

A 回答 (3件)

DAOを使用してテーブルの最終のレコードのフィールドの値をテキストボックスに代入すればよいのではと思います。

具体的には、下記の通り。
1.まずフォームを新規作成します。元になるテーブルクエリは無しで結構です。
2.ツールボックスからボタンとテキストボックスを1つずつ作ります。ボタンは最終番号取得、テキストボックスは最終番号表示としておきます。

3.ボタン最終番号取得のプロパティのイベントのクリック時で次のコードを記述します。
**********************************************
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("アンケートテーブル", dbOpenTable)

rs.MoveLast
Me!最終番号表示 = rs!町内 & rs!入力連番

rs.Close
db.Close
*************************************************
Dmaxを使用したやり方ではありませんが一度試してみてください。
    • good
    • 0
この回答へのお礼

またまた新しい「技」を教わりました。
こつこつ「技術」を磨いていこうと
思います。
ありがとうございました。

お礼日時:2003/01/16 19:49

こんにちは。

maruru01です。

新規レコードの入力連番に、既存データの最大値+1を自動でセットしたいということでしょうか。
そうと仮定して書きます。
非連結のテキストボックス[町内名入力]と、コマンドボタン[入力連番セット]を配置して、このコマンドボタンのクリックイベントに記述することにします。


Private Sub 入力連番セット_Click()

  Me!町内.Value = Me!町内名入力.Value
  If DCount("入力連番", "アンケートテーブル", "町内 = '" & Me!町内名入力.Value & "'") = 0 Then
    '既存にない町内名の場合は、1を表示
    Me!入力連番.Value = CStr(1)
  Else
    '存在する場合は、最大値+1を表示
    Me!入力連番.Value = CStr(DMax("入力連番", "アンケートテーブル", "町内 = '" & Me!町内名入力.Value & "'") + 1)
  End If

  Me!設問1.SetFocus

End Sub


ちなみに、[町内名入力]が未入力の状態でコマンドボタンをクリックすると、エラーになるので、対処して下さい。
    • good
    • 0
この回答へのお礼

まさにその通りです!!
ありがとうございました!!!!

お礼日時:2003/01/16 19:49

サンプルコードです。

 こんなもので如何でしょうか?
解説するまでもありませんので省略させて頂きます。
AccessのヘルプでDmax関数の解説をご覧ください。

町内名を入力するテキストボックス等の「更新後処理」イベントに
次のように記述します。

Private Sub 町内名入力_AfterUpdate()
  Dim MaxVal As Variant
  DoCmd.GoToRecord acForm, "アンケートテーブル", acNewRec
  Me.町内.Value = Me.町内名入力.Value
  MaxVal = DMax("[入力連番]", "アンケートテーブル", _
    "[町内]='" & Me.町内名入力.Value & "'")
  If IsNull(MaxVal) Then
    Me.入力連番.Value = 1
  Else
    Me.入力連番.Value = MaxVal + 1
  End If
  Me.設問.SetFocus
End Sub


フォームの「レコード移動時」のイベントに次のように記述します。

Private Sub Form_Current()
  Me.町内名入力.SetFocus
  Me.町内名入力.Value = Null
End Sub
    • good
    • 0
この回答へのお礼

答えがひとつだけではないというのがよく分かりました。
とても助かりました。
ありがとうございました。

お礼日時:2003/01/16 19:51

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