"...В этом году все контракты идут под автом. номером плюс текущий год. В следующем году автом. номер должен начинаться с начала..."
DownLoad к статье
Дмитрий
29.06.2001
Как программно обнулить AutoValue в таблице?
К примеру, мне нужно обнавлять счетчик в таблице каждый раз при изменениии текущего года.
Помогите кто может!
Nic
29.06.2001
Хм...
1 Если удалить все записи и сжать базу данных, отсчет будет от единицы
2 Либо через рекордсет.
А в чем задача?
Дмитрий
29.06.2001
Задача в следующем...
Необходимо автоматизировать номер контракта. Для примера:
В этом году все контракты идут под автом. номером плюс текущий год.
В следующем году автом. номер должен начинаться с начала.
Опишите, пожалуйста, второй метод
Nic
29.06.2001
Re:Задача в следующем...
Самый легкий способ - создать отдельную таблицу с полями счетчика
и текущего года по умолчанию. При создании нового контракта проверять год на изменение
А при изменении года прописать код на удаление записей таблицы и присвоении первому контракту "1"
А в таблицу контрактов вносить слитные значения номера контракта и года.
В этой таблице я бы сделал для удобства поле номера контракта-год текстовым, что бы можно было писать, например
000012001
000022001
100312001
Дмитрий
29.06.2001
Очень благодарен Вам за ответ и последнее...
Извините, что немного Вас помучал и последнее:
Как автоматически удалить все записи из extra таблицы, чтобы отсчет начался с единицы. Я имею ввиду автоматическое сжатие.
Nic
29.06.2001
Сносим все на фиг :)
Можно и не сжимать.
Function DDD() 'Проверяет текущий год и если предыдущее поле совпадает с текущим годом, 'добавляет новую запись Dim rs As Recordset Dim God As String Set rs = CurrentDb.OpenRecordset("Table1") If Not rs.EOF Then rs.MoveLast God = Format(rs("Year"), "yyyy") End If rs.AddNew If Format(Now(), "yyyy") = God Or rs("ID") = 1 Then rs("Year") = Now() rs.Update rs.Close Else 'Если год изменился переходим на создание новой таблицы rs.Close Call ChangeYear End If End Function
Sub ChangeYear() Dim mySQL As String 'Удаляем на хрен старую таблицу DoCmd.DeleteObject acTable, "Table1"
'И создаем новую mySQL = "CREATE TABLE Table1 (ID COUNTER CONSTRAINT myIndex PRIMARY KEY,Year DATETIME)" DoCmd.RunSQL mySQL End Sub
Решение очень радикальное, но домой я тоже хочу :))
А мужики завтра что-нибудь толковее напишут :))
Nic
29.06.2001
А мыло яичное бане №5 особенно симпатично.
Во-первых, естественно, что в выше приведенном коде надо вставить свои строки передачи значений в главную таблицу.
Во -вторых, ты можешь добавить поле клиента, и перед удалением сливать таблицу во внешний файл. Реестр контрактов за год в удобном виде никому не помешает...
Ну и так далее.
Timour
29.06.2001
а я бы вот так сделал
Создайте форму на основе своей таблицы
и в обработчике события "До Вставки" напишите:
Private Sub Form_BeforeInsert(Cancel As Integer) Number = 1 + Nz(DMax("Number", "Table2", "[Year]=" & DatePart("yyyy", Now()))) End Sub
'Здесь : 'Number - поле с номером (его лучше заблокировать, 'чтобы исключить 'ручной вввод 'Table2 - ваша таблица 'Year - имя Long поля с годом (4 цифры)
Если нужно вводить и за прошлые годы, то вместо события "До Вставки"
используйте событие "После Вставки", а вместо Now() - текущее поле Year и 1 не
прибавляйте - так наверно даже корректней.