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

タイトルのようなことをしたいのですが、わかりやすいやり方はないでしょうか?

A 回答 (4件)

質問内容は、クエリで抽出したデータをフォームで表示する際に、連番をつけたい。


という捕らえ方でいいのでしょうか?(違っていたらごめんなさい)

フォームのつくり方によるのですが、表形式のフォームだったらできますよ。
たとえば、詳細セクションに連番がふりたい場合。

1・非連結コントロール(テキストボックス)を詳細セクションあたりにつくります。つくると「ラベル○○」と言う文字の入った「ラベル」部分と、白い箱で非連結と言う文字の入った「テキストボックス」部分ができます。

2・ラベル部分をページヘッダセクションに移動して、「番号」とか名前を変えます。

3・テキストボックス(詳細セクション内にある)をダブルクリックして、プロパティを出します。

4・データタブをクリックし、[コントロールソース]に半角文字で、=1と入力し、[集計実行]を全体にします。

5・非連結のテキストボックス(今は、=1の文字がある)の書式をきれいに整えます。


6・ビューを切り替えると、連番で表示されると思います。

的外れでないといいのですが。
    • good
    • 0

レポートの場合は、No.1の方の方法で簡単にできますが、


残念ながらフォームで作成したテキストボックスでは、[集計実行]できませんね。

フォームで行おうとすると、自分であれば下記のようにします。(表形式のフォームを既に作成済みの前提です。)

(1)クエリの元になっているテーブルにフィールドを追加(例えば”フォーム連番”(データの型は数値型)

(2)クエリに”フォーム連番”の表示を追加

(3)フォームにテキストボックスを追加して、そのテキストボックスの名前を”フォーム連番”、レコードソースを”フォーム連番”とする。

(4)VBAで処理を追加。例えば下記は、連番セットというコマンドボタンを作成し、これをクリックすることで、連番を入力するものです。

Private Sub 連番セット_Click()
On Error GoTo Err_連番セット_Click

Dim レコード数 As Integer
Dim i As Integer

レコード数 = DCount("フォーム連番", "クエリの名前")
DoCmd.GoToRecord , , acFirst
For i = 1 To レコード数 + 1
Me.フォーム連番 = i
DoCmd.GoToRecord , , acNext
Next i

Exit_連番セット_Click:
Exit Sub

Err_連番セット_Click:
MsgBox Err.Description
Resume Exit_連番セット_Click

End Sub

ご参考になれば幸いです。m(__)m

この回答への補足

回答ありがとうございます。
試してみたところ、
「このレコードセットは更新できません」
とでるのですが、どうすれば回避できるでしょうか?
おしえていただけるとありがたいです。

補足日時:2002/08/21 18:06
    • good
    • 0

(1)まずVBAのコードの一部が間違ってました。

(^^ゞ
For i = 1 To レコード数 + 1
は、
For i = 1 To レコード数
です。
(修正前ですと、新規レコードに移動してしまい、エラーとなります。)

(2)このフォームのレコード自体が更新できないようになっている場合(元になっているクエリのレコード自体が更新できないようになっている場合)には、エラーとなります。
No.2の回答で、(2)あるいは(3)まで作成していたとして、”フォーム連番”に数値を入力して、レコードが保存できるか確認してください。
さしつかえなければ、作成したクエリのSQL文がどうなっているかわかれば、回答しやすいんですけど。・・・
    • good
    • 0
この回答へのお礼

朝早くからの回答ありがとうございます。

No3の回答のようにやってみたのですが、やっぱりできません。

できればSQLを公開して解決したいのですが、開発中のソフトであるため
公開はできないです。申し訳ございません。

お礼日時:2002/08/22 10:09

クエリ自体が更新できないレコードソースであれば、このままではできませんね。



ちょっと難しくなりますが、クエリと同じフィールドと、フォーム連番フィールドを持つ新しいテーブルを作成しておいて、フォームのデータをその新しいテーブルに書き込み、フォームのレコードソースを新しいテーブルに置き換える処理では、どうでしょうか?(新しいフォームを開くことでも結構ですけど)

処理の流れとしては、
(1)新しいテーブルの初期化
(2)データの転送処理
(3)レコードソースを新しいテーブルにする。(Me.RecordSource = "新しいテーブル名")
(4)フォームの再表示(Me.Requery)
となります。
参考に(1)新しいテーブルの初期化と(2)データの転送処理モジュールの例を記載しておきます。

Public Sub テーブル初期化処理(strテーブル As String)
Dim rst As New ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open strテーブル, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do Until rst.EOF
rst.Delete
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
End Sub

Public Sub データ転送処理(strテーブル As String)
Dim rst As New ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open strテーブル, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Dim レコード数 As Integer
Dim i As Integer
レコード数 = DCount("フォーム連番", "クエリ1")
DoCmd.GoToRecord , , acFirst
For i = 1 To レコード数
rst.AddNew
rst![フォーム連番] = i
rst![項目1] = Me![項目1]
rst![項目2] = Me![項目2]
rst.Update
DoCmd.GoToRecord , , acNext
Next i
rst.Close
Set rst = Nothing
End Sub

なお、はじめからフォームのレコードソースをこのような更新できるレコードソース(ワークテーブル?)にしておく手もありますね。
ご参考になれば幸いです。m(__)m
    • good
    • 0

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