Для чего это стоит, я бы порекомендовал вам сохранить номер последовательности вы выводите в отдельном числовом поле, что-то вроде этого:
CasePK CaseDate CaseMonthSeq
------ ---------- ------------
101 2013-10-01 1
Таким образом, вы можете упростить процесс, чтобы получить новые порядковые номера, и вы можете легко построить строку «CaseID» из своих составных частей. (То есть, всегда проще склеивать строки, а не разделять их.)
Следующий тестовый код иллюстрирует, как вы можете получить порядковый номер при вставке записи в таблицу. Поскольку вывод делается в заявлении INSERT это должно быть сделано в неявной транзакции и, следовательно, быть пригодны для работы в среде многопользовательской
Sub CaseSeqTest()
Dim cdb As DAO.Database, SQL As String
Dim dtCaseDate As Date
dtCaseDate = DateSerial(2013, 10, 3) ' sample date for testing
Set cdb = CurrentDb
SQL = _
"INSERT INTO Cases (" & _
"CaseDate, " & _
"CaseMonthSeq " & _
") VALUES (" & _
"#" & Format(dtCaseDate, "yyyy-mm-dd") & "#, " & _
"Nz(DMax(""CaseMonthSeq"", ""Cases"", ""Format(CaseDate, """"yymm"""") = """"" & Format(dtCaseDate, "yymm") & """""""), 0) + 1 " & _
")"
Debug.Print SQL
cdb.Execute SQL, dbFailOnError
Set cdb = Nothing
End Sub
Debug.Print
оператор просто выводит команду SQL для выполнения, в этом случай ...
INSERT INTO Cases (CaseDate, CaseMonthSeq) VALUES (#2013-10-03#, Nz(DMax("CaseMonthSeq", "Cases", "Format(CaseDate, ""yymm"") = ""1310"""), 0) + 1)
... и запись вставляется в таблицу следующим образом:
CasePK CaseDate CaseMonthSeq
------ ---------- ------------
101 2013-10-01 1
102 2013-10-03 2
Если вы хотите, чтобы отобразить CaseID, то вы всегда можете собрать их вместе "на лету", как это ...
SELECT
CasePK,
CaseDate,
"CEF-" & Format(CaseDate, "yymm") & "-" & CaseMonthSeq AS CaseID
FROM Cases
... возвращение
CasePK CaseDate CaseID
------ ---------- ----------
101 2013-10-01 CEF-1310-1
102 2013-10-03 CEF-1310-2
...или, так как вы используете Access 2010 (или более поздней версии) можно изменить таблицу [случаи] для создания [CaseID] как вычисляемое поле, используя выражение
"CEF-" & Right(Year([CaseDate]),2) & IIf(Month([CaseDate])>9,"","0") & Month([CaseDate]) & "-" & [CaseMonthSeq]
так что вы можете просто получить [CaseID] прямо и не будет необходимости повторно создавать логику для сборки CaseID каждый раз, когда вы хотите использовать ее в запросе или отчете.
Это отлично работает. Я сделал небольшое изменение, чтобы использовать дату из поля вместо сегодняшней даты. Большое спасибо, и я определенно разработаю свои таблицы лучше. Спасибо за совет. – jstacy00