Access VBA: как получить автоматическую нумерацию при непрерывной записи формы - PullRequest
0 голосов
/ 04 августа 2011

У меня есть форма представления типа "непрерывные формы", которая возвращает записи на основе запроса, и я хочу, чтобы записи имели номерную метку, например 1, 2, 3 .. в указанном порядке:

form

Есть ли способ автоматически сгенерировать метку или текстовое поле?

Любая помощь приветствуется! Спасибо

РЕДАКТИРОВАТЬ: Вот код запроса:

    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

1 Ответ

2 голосов
/ 05 августа 2011

Если ваша таблица содержит числовой первичный ключ, вы можете использовать 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]);

Вы можете изменить ORDER BY, чтобы ссылаться на порядковый номер выражения поля в списке полей, а не на полное выражение поля, если вы предпочитаете.

ORDER BY 1;

В любом случае запрос должен создать редактируемый источник записей для вашей формы, хотя, очевидно, вы не сможете редактировать sequence_num напрямую ... поэтому установите свойства элемента управления, которые вы связываете с ним, как Enable = No и / или заблокировано = Да.

Вы можете использовать подзапрос вместо выражения DCount для sequence_num, но тогда вы получите набор записей только для чтения.

Этот подход не требует числового первичного ключа, но вам нужно уникальное поле или комбинация полей, которые являются уникальными. Вы также можете сделать это с полями текста или даты.

Редактировать : Если вы удаляете строки в форме, выполните Me.Requery в событии подтверждения после обновления формы. Если вы добавляете строку, которую вы хотите отобразить до конца набора записей, тогда тоже выполните Me.Requery. То же самое, если вы редактируете значения в уникальных полях для существующих строк.

...