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

Форум: MS ACCESS

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

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

 
 

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

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

тема: проверить наличие записи
 
 автор: OlegZa   (09.10.2010 в 12:49)   личное сообщение
 
 

Запись имеется в виду - аналогичная вводимой.
Access 2003.
Помогите советом, кто знает - есть таблица "Оплата" поля [КодОплаты],[ДатаОплаты],[КодКлиента],[Сумма] заполняется через форму. Поля на форме аналогичны. Как бы мне на After Update поля [Сумма] формы прикрутить проверку на наличие такой же записи, чтобы нельзя было два раза одну оплату провести (ну или хоть предупредить, что такая запись уже есть)?
Подскажите по какой функции Help полистать?
Сам начал сначала делать через Recordset - но потом забоялся что-то - громоздко очень получается - долго видимо циклом обрабатывать будет. Должен, наверное, быть и попроще способ...

  Ответить  
 
 автор: kot_k_k   (09.10.2010 в 15:55)   личное сообщение
 
 

str_="select * from tabla where data=" & me.Data & " and КодОплаты=" & me.КодОплаты & " and КодКлиента = " & me.КодКлиента
set rst = dbs.Openrecordset (str_)
if rst.EOF= False - есть запись , если TRUE - то записи нет

никакой громозкости один запрос

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

конечно проще - обратиться к запросу и посчитать сколько записей в запросе если 0 то все хорошо ну а если...............................
запрос соответственно должен отбирать записи из таблы по введенным данным в форме

ну вот - не успел

  Ответить  
 
 автор: Lukas   (09.10.2010 в 17:53)   личное сообщение
 
 

Примените уникальный составной индекс по необходимым полям.
Jet сделает остальное сам.

  Ответить  
 
 автор: OlegZa   (10.10.2010 в 08:08)   личное сообщение
 
 

Большое спасибо.
Когда спрашивал - имел ввиду как раз скрытые (для меня, пока) возможности Access (т.е. в данном случае индекс).
Выбрал всё-же вариант с RecordSet-ом и вот почему:
1.) На поверку - при грамотном подходе на самом деле абсолютно не громоздко (сам не "дотумкал" малеха просто).
2.) С RecordSet-ом вариант получается гибче в плане реакции на попытку ввода повторения:
При составном индексе - ограничения достаточно жестки. Или абсолютно уникальные записи - или "суши вёсла". Не так уж сложно представить себе вариант, когда один и тот же клиент в один и тот же день по каким-либо "не зависящим от редакции обстоятельствам" вносит 100 т.р. утром и 100 т.р. вечером. И тогда при исполнениии через индекс - вариантов будет 2 - или в дату оплаты время добавлять (не хотелось бы - сама идея дискредитируется), или отлавливать аналогичный платёж за этот день, суммировать и вводить общей суммой - тоже фигня - не всегда так надо и не всегда и можно.
Хотелось предупредить - но оставить выбор за вводящим - проводить ещё раз эти 100 т.р., или это у него шарики за ролики и сам на одной и той же оплате "завис". Вот.
Спасибо всем!
Очень помогли

  Ответить  
 
 автор: OlegZa   (10.10.2010 в 10:36)   личное сообщение
 
 

Подскажите для общего развития - что за хрень:
Леплю в коде строку SQL:

... FROM Оплата WHERE (((Оплата.Дата_оплаты)=" & Me.[Дата_оплаты] & ") AND........
Set rst = CurrentDb.OpenRecordset(strSQL)

И когда открываю Рекордсет - ругается типа "Число содержит синтаксическую ошибку в выражении запроса '(((Оплата.Дата_Оплаты)=10.10.2010) AND..."
Пробовал и #_# дату обносить и CDate() пробовал - нифига. То же самое всё.
Запахало, как ни странно, вот так:

... FROM Оплата WHERE (((Оплата.Дата_оплаты)=" & CLng(Me.[Дата_оплаты])& ") AND........

Это я дурак, или лыжи не едут???

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