|
|
|
| Нужно создать ключевое поле формата ([год создания анкеты]-[порядковый номер анкеты в этом году]).
Сам ничего не придумал.
Подскажите пожалуйста, как это сделать? | |
|
| |
|
|
|
| непонятно, что вы называете форматом.
Если [год создания анкеты] и [порядковый номер анкеты в этом году] поля таблицы, то ключевое поле легко создается в конструкторе таблицы: меню Вид - Индексы (View - Indexes) | |
|
| |
|
|
|
| Да есть поле ДАТА СОЗДАНИЯ АНКЕТЫ
Есть поле счетчик.
Мне нужно, чтоб ключом было выражение типа
2006-1
2006-2
2006-3
2007-1
2007-2
Проблема в том, что счетчик считает все насквозь.
Надо как-то заставить счетчик сбрасываться на единицу, когда наступает новый год. | |
|
| |
|
|
|
| fфункци возвращает номер заказа в формате "номер года" / "номер заказа" - "07/01"
Public Function get_OrderNumber() As String
Dim sSQL As String, rs As ADODB.Recordset, s As String, b As Byte
On Error GoTo L_Err
get_OrderNumber = ""
Set rs = New ADODB.Recordset
sSQL = "SELECT Max(tblOrder.NumberOrder) AS MaxNum FROM tblOrder"
rs.Open sSQL, cnn
If rs.EOF Then
s = Format(Now(), "yy") & "/01_1"
Else
If Format(Now(), "yy") = Left(rs("MaxNum"), 2) Then
b = InStr(rs("MaxNum"), "_")
If b Then
s = Mid(rs("MaxNum"), 1, b) & Val(Right(rs("MaxNum"), 1)) + 1
Else
s = Val(Mid(rs("MaxNum"), 4)) + 1
s = IIf(Len(s) = 1, "0" & s, s)
s = Format(Now(), "yy") & "/" & s
End If
Else
s = Format(Now(), "yy") & "/01_1"
End If
End If
get_OrderNumber = s
L_Exit: Set rs = Nothing: Exit Function
L_Err: MsgBox Err.Description & " (" & Err.Number & ")", vbExclamation, "get_OrderNumber": GoTo L_Exit
End Function | |
|
| |
|
|
|
| Прошу прощения я за тупость свою.
Как это будет выглядеть если таблица "АНКЕТА", поля "ДАТА" и "Номер"
И как потом эту функцию использовать? Что, вставлять в поле таблицы как значение по умолчанию? | |
|
| |
|
|
|
| довольно бессмысленно создавать такое составное ключевое поле | |
|
| |
|
|
|
|
|
| это не значит, что нужно делать такой первичный ключ в таблице
номер типа YYYY-n можно сгенерировать в запросе - не обязательно его хранить в БД | |
|
| |
|
|
|
| можно даже и хранить
тока ключом его делать не надо | |
|
| |
|
|
|
| В принципе согласен.
Я хотел сделать двойной ключ:
- Номер (счетчик)
- Год (Year(Now))
Но тогда как обнулять первое поле при наступлении нового года? | |
|
| |
|
|
|
| попробую собрать в кучу все что насоветовали выше и добавить своего.
1. Не стоит делать ключ из двух полей, оставьте счетчик ключевым полем и не показывайте его никому
2. создайте поле "порядковый номер анкеты" - Long (не счетчик)
на событие создани новой записи считайте его так
me.[порядковый номер анкеты] = nz(dmax("[порядковый номер анкеты]","таблицаАнкет","ГодСозданияАнкеты = " & Year(date())),0) +1
3. Если очень хочется буть уверенным в уникальности пары годАнкеты+НомерАнкеты создайте уникальный индекс (НЕ КЛЮЧ)
4 ГодСозданияАнкеты я бы тоже не стал выделять отдельным полем ,а вычислял бы его в момент когда его надо показать из даты создания анкеты. | |
|
| |
|
|
|
| ну вот и все, собственно :))) | |
|
| |
|
|
|
| почему-то два раза запостилось | |
|
| |