Автоматически генерировать ссылку на основе значений в других столбцах - PullRequest
0 голосов
/ 28 апреля 2020

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

Что я пытаюсь выполнить sh?

Я создаю базу данных генеалогического индекса имен.

Ссылка, которая должна автоматически генерироваться в столбце ссылок, должна брать первые три буквы поля фамилии (например, JOO) и добавлять к нему последовательность чисел (например, 0001), НО числовая последовательность должна зависеть от первых трех букв фамилии, а не просто увеличиваться на +1 для каждой новой записи.

Таблица состоит из следующих столбцов:

  • Поле ссылки, которое должно содержать сформулированную, автоматически сгенерированную ссылку.
  • Фамилия
  • Имя (я)
  • Et c ...

Пример того, как это должно работать:

Следующие записи (введенные в том же порядке, как показано) содержат фамилии (в поле фамилий):

  1. Jooste
  2. Jooste
  3. Wessels
  4. Potgieter
  5. Jooste

Их ссылки, которые должны быть сгенерированы должен выглядеть следующим образом:

  1. JOO0001
  2. WES0001
  3. POT0001
  4. JOO0003

Их ссылки, которые должны быть сгенерированы не должны выглядеть следующим образом :

  1. JOO0001
  2. JOO0002
  3. WES0003
  4. POT0004
  5. JOO0005

Это вызвано следующей формулой (которую я пробовал):

reference = Left(Surname, 3) & Right("000" & CStr(CInt(Nz(DMax("right(reference,4)", "relatives_tbl"), 0)) + 1), 4)

Почему я пытаюсь выполнить sh это?

Основная причина, почему мне нужен номер ссылки, чтобы сформулировано, чтобы сделать будущие ссылки легче в будущем. Таким образом, ссылочный номер будет настолько коротким, насколько это возможно, потому что вы легко можете получить до 30 000 человек в общей сложности, но очень маловероятно, чтобы более чем 9999 из одной фамилии.

Я попробовал формулу, упомянутую выше, которая не дает мне желаемый результат. Я надеюсь, что мой вопрос ясен и логичен, и я с нетерпением жду ваших решений.

1 Ответ

0 голосов
/ 28 апреля 2020

Это можно сделать с помощью третьего аргумента DMax, который действует как предложение WHERE:

Function fGetSurnameID(strSurname As String) As String
    fGetSurnameID = UCase(Left(strSurname, 3)) & Format(Nz(DMax("right(SurnameID,3)", "tblSurname", "Left(Surname,3)='" & Left(strSurname, 3) & "'"), 0) + 1, "000")
End Function

Или, если вы вызываете это с помощью кнопки в форме, тогда вы можете сделать:


Private Sub submit_btn_Click()
    member_ID = UCase(Left(Surname, 3)) & Format(Nz(DMax("right(Member_ID,3)", "relatives_tbl", "Left(Surname,3)='" & Left(Surname, 3) & "'"), 0) + 1, "000")
End Sub

Однако хранение двух фрагментов информации в одном поле часто может быть плохой идеей в базе данных. Кроме того, вам нужно подумать о том, как вы обрабатываете любые фамилии, которые содержат менее 3 символов.

Кроме того, использование reference в качестве имени поля может вызвать проблемы, так как это зарезервированное слово в Access.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...