|
|
|
| Здравствуйте. снова обращаюсь к вам за помощью. Постараюсь наиболее подробней все описать.
Есть таблица "реестр", в которой содержится поле НОМЕР и СЕРИЯ, и СЕРИЯ_НОМЕР
В нее добавляются записи пачкой из формы, вот таким образом.
For i = dobav_s To dobav_po
rs.AddNew
rs![номер] = Mid(i, 2, 10)
rs![серия] = Me.серия
rs![серия_номер] = Me.серия + CStr(Mid(i, 2, 10))
rs.Update
Next
|
Надо сделать что-то вроде проверки, чтобы не заносились одинаковые значения в поле СЕРИЯ_НОМЕР.
Ключевое поле уже назначено другое, так надо.
На деле все должно выглядеть примерно так:
при занесении идет проверка есть такой серия+номер в таблице или нет.
Если есть, то пропускается и берется следующие значение из цикла (см. выше).
Если нет, то соответственно заносится и берется следующие значение в цикле и так же проверяется.Затем следующие и так до последнего значения.
Вроде все просто, но у меня уже голова пухнет. Как я только не пробовал :(
Собственно вот, прошу помощи. | |
|
| |
|
|
|
| For i = dobav_s To dobav_po
if DCount("[серия_номер]","[имя_источника]","[серия_номер]=" & Me.серия + CStr(Mid(i, 2, 10)))=0 then
rs.AddNew
rs![номер] = Mid(i, 2, 10)
rs![серия] = Me.серия
rs![серия_номер] = Me.серия + CStr(Mid(i, 2, 10))
rs.Update
end if
Next
может где-то так (хотя могу ошибаться) | |
|
| |
|
|
|
| установите уникальный индекс (не ключ) для этого поля или для пары полей НОМЕР и СЕРИЯ
зачем сохранять в таблице данные которые можно легко вычислить на основании данных других полей той же строки?
Это сразу добавляет головную боль в виде необходимости контролировать что кто-то не изменил значение исходных полей или результирующего поля.
т.е. что таблице нет записей типа
Номер | Серия | Серия_Номер
АА | BB | DDDD
|
Данные которые можно вычислить нужно сохранять в таблице только в очень обоснованных случаях, во всяком случае в ACCESS, где нет триггеров и вычисляемых полей на уровне таблиц. | |
|
| |
|
|
|
| я понял вашу мысль.
уже и так стоит "Индексированное (совпадения не допускается)"
разбиение на 3 элемента необходимо...
то есть Серия / номер / серия+номер.
Сейчас получается так, что если программа натыкается на значение, которое уже есть в поле "серия_номер", то все стопорится и данные дальше по списку (даже те которых нет) - не заполняются. | |
|
| |
|
|
|
|
For i = dobav_s To dobav_po
rs.FindFirst "[серия_номер] ='" & Me![серия] & Mid(i, 2, 10) & "'"
If rs.NoMatch Then
rs.AddNew
rs![номер] = Mid(i, 2, 10)
rs![серия] = Me.серия
rs![серия_номер] = Me![серия] & Mid(i, 2, 10)
rs.Update
End If
Next
|
| |
|
| |