Как добавить поле серийного номера в форму MS Access - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть форма Invoice в MS Access 2007. Эта форма имеет подчиненную форму с именем InvoiceLines, имеющую поля SerialNumber, ItemNumber, ItemName, ItemQty и т. Д. Я хочу добавить серийные номера в эта форма. Я добавил =CurrentRecord свойство для отображения текущего номера строки. Но это свойство показывает число «1» во всех строках. Есть ли самый простой способ добавить серийные номера в форму MS Access?

enter image description here

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Из вашего скриншота и описания видно, что вы описываете поле AutoNumber.

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

Если ваше текущее поле SerialNumber уже содержит данные, вы не сможете изменить тип данных этого поля на AutoNumber. Таким образом, вам нужно будет удалить существующее поле SerialNumber перед добавлением нового поля с типом данных AutoNumber.

0 голосов
/ 12 ноября 2018

Хорошо, теперь зная, чего вы хотите, вот мое решение:

В подчиненной форме добавьте эту процедуру:

Private Function SerialNumber(ByVal sourceForm As Form) As Variant
    On Error GoTo Catch

    SerialNumber = Null

    With sourceForm.RecordsetClone
        .Bookmark = sourceForm.Bookmark
        SerialNumber = .AbsolutePosition + 1
    End With

Done:
    Exit Function

Catch:
    If Err.Number <> 3021 Then MsgBox Err.Number & ":" & Err.Description, vbExclamation, "SerialNumber"
    Resume Done
End Function

Затем добавьте элемент управления textbox в эту подчиненную форму и установите для Control Source значение =SerialNumber([Form]).

Это удовлетворит все ваши потребности.

Примечание: если вы удалите запись в подчиненной форме, вам потребуется обновить подчиненную форму, чтобы обновить серийную нумерацию.

0 голосов
/ 10 ноября 2018

Вы можете решить эту проблему, изменив источник данных формы и добавив туда новый столбец.

Предполагая, что ваша таблица называется Table1, а ваш первичный ключ - ID, вы можете использовать подзапрос для ее динамического вычисления:

SELECT Table1.*, (Select Count(*) FROM Table1 as X WHERE X.ID < Table1.ID)+1 AS Serial FROM Table1

...