Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: добавление записей. Access 2003
 
 автор: miami   (04.06.2009 в 02:57)   личное сообщение
 
 

Здравствуйте. снова обращаюсь к вам за помощью. Постараюсь наиболее подробней все описать.

Есть таблица "реестр", в которой содержится поле НОМЕР и СЕРИЯ, и СЕРИЯ_НОМЕР
В нее добавляются записи пачкой из формы, вот таким образом.


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


Надо сделать что-то вроде проверки, чтобы не заносились одинаковые значения в поле СЕРИЯ_НОМЕР.
Ключевое поле уже назначено другое, так надо.

На деле все должно выглядеть примерно так:
при занесении идет проверка есть такой серия+номер в таблице или нет.
Если есть, то пропускается и берется следующие значение из цикла (см. выше).
Если нет, то соответственно заносится и берется следующие значение в цикле и так же проверяется.Затем следующие и так до последнего значения.
Вроде все просто, но у меня уже голова пухнет. Как я только не пробовал :(

Собственно вот, прошу помощи.

  Ответить  
 
 автор: snipe   (04.06.2009 в 07:16)   личное сообщение
 
 

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


может где-то так (хотя могу ошибаться)

  Ответить  
 
 автор: osmor   (04.06.2009 в 08:48)   личное сообщение
 
 

установите уникальный индекс (не ключ) для этого поля или для пары полей НОМЕР и СЕРИЯ
зачем сохранять в таблице данные которые можно легко вычислить на основании данных других полей той же строки?
Это сразу добавляет головную боль в виде необходимости контролировать что кто-то не изменил значение исходных полей или результирующего поля.
т.е. что таблице нет записей типа

Номер |  Серия | Серия_Номер
АА    |  BB    | DDDD


Данные которые можно вычислить нужно сохранять в таблице только в очень обоснованных случаях, во всяком случае в ACCESS, где нет триггеров и вычисляемых полей на уровне таблиц.

  Ответить  
 
 автор: Miami   (04.06.2009 в 09:42)   личное сообщение
 
 

я понял вашу мысль.
уже и так стоит "Индексированное (совпадения не допускается)"
разбиение на 3 элемента необходимо...
то есть Серия / номер / серия+номер.

Сейчас получается так, что если программа натыкается на значение, которое уже есть в поле "серия_номер", то все стопорится и данные дальше по списку (даже те которых нет) - не заполняются.

  Ответить  
 
 автор: Анатолий (Киев)   (04.06.2009 в 10:22)   личное сообщение
 
 


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

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList