-1

クエリに基づいてレコードを返すビュータイプ「連続フォーム」のフォームがあり、レコードに1、2、3のような番号ラベルをリストされた順序で付けたいと思います。

形

そこでラベルまたはテキストボックスを自動的に生成する方法はありますか?

どんな助けでも大歓迎です!ありがとう

編集:ここにクエリコードがあります:

    Dim qd As DAO.QueryDef
    Set qd = CurrentDb.CreateQueryDef("pairsOrdered", "select * from allPairs order by Count desc")

    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("pairsOrdered")
    If Not rs.EOF Then
        Me.Label22.Visible = 0
    End If

    If Me.OpenArgs = "25" Then
        RecordSource = "select top 25 * from pairsOrdered"
    End If

    If Me.OpenArgs = "50" Then
        RecordSource = "select top 50 * from pairsOrdered"
    End If

    If Me.OpenArgs = "all" Then
        RecordSource = "select * from pairsOrdered"
    End If
4

1 に答える 1

2

テーブルに数値の主キーが含まれている場合は、クエリでDCount()を使用してシーケンス番号を生成できます。この例では、idは数字と主キーです。

SELECT DCount("*","MyTable","id<=" & [m].[id]) AS sequence_num, m.id, m.some_text
FROM MyTable AS m
ORDER BY DCount("*","MyTable","id<=" & [m].[id]);

必要に応じて、完全なフィールド式ではなく、フィールドリスト内のフィールド式の序数値を参照するようにORDERBYを変更できます。

ORDER BY 1;

いずれにせよ、クエリはフォームの編集可能なレコードソースを生成する必要がありますが、明らかにsequence_numを直接編集することはできません...したがって、バインドするコントロールのプロパティをEnable=Noおよび/またはLockedとして設定します=はい。

sequence_numのDCount式の代わりにサブクエリを使用することもできますが、そうすると、読み取り専用のレコードセットが取得されます。

このアプローチでは、数値の主キーは必要ありませんが、一意のフィールドまたは一意のフィールドの組み合わせが必要です。テキストまたは日付フィールドでそれを行うこともできます。

編集:フォームの行を削除する場合は、フォームの更新後の確認イベントでMe.Requeryを実行します。レコードセットの終わりの前に表示したい行を追加する場合は、Me.Requeryも実行します。既存の行の一意のフィールドの値を編集する場合も同じです。

于 2011-08-04T22:21:16.540 に答える