БД Access, поиск записей

  • Автор темы Mavrin
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Mavrin

Использую в качестве БД базу Access. Проблема в следующем. Есть таблица, куда записываются наименования с индивидуальным кодом. Каждая такая запись имеет значение, как количество наименования.
При изменении количества одного из наименований открываем данную таблицу и, перемещаясь снизу вверх, ищем первую запись нужного наименования по коду (тем самым как бы ищем запись нужного наименования, которая была внесена в БД последней). При нахождении таковой записи меняем количество.
Данный алгоритм работает, но периодически вносятся неверные значения количества. Так как глюк не постоянный, найти и определить его составляет некую трудность. Грешу пока на сам алгоритм. Может не всегда находится именно запись, внесенная последней? Или, может, еще что-нибудь?
Пожалуйста, поделитесь своим мнением. Может, вообще, все не так организовать? В чем фишка?
 
B

Barmutik

Я бы предложил Вам следующий алгоритм:

1. В таблицу добавляется уникальный ключ, которые увеличивается при добавлении новой записи.
2. Поиск производить не перебором я запросом с условием где КОД = требуемому Вами значению и уникальный ключ максимальный.
3. Извенять найденную запись по Вашим условиям.

Проблемы:

1. Если с программой одновременно работают несколько пользователей, то есть возможнсоть что Вы внесёте изменения все же не в последнюю запись, т.к. в момент Ваших действий другие пользователи могут добавить записи в эту таблицу.
2. У Вас проблема вероятнее всего в том что, MS Access НЕ всегда может однозначно вернуть список записей в том порядке в которром они были добавлены, следовательно Ваш алгоритм проходу снизу-вверх НЕ всегда будет работать правильно...
 
M

Mavrin

1. Если с программой одновременно работают несколько пользователей, то есть возможнсоть что Вы внесёте изменения все же не в последнюю запись, т.к. в момент Ваших действий другие пользователи могут добавить записи в эту таблицу.
.

Какие есть пути разрешения таковой ситуации?


Да, к стати при
Код:
  rsSQL = "SELECT MAX(q) FROM UhodCR WHERE Index='" & .TextMatrix(MyRow, 1) & "';" 
 Set rs = db.OpenRecordset(rsSQL) 

   az = rs.Fields(2)

на последней приведенной строчке выдает, что "элемент не найден в данном семействе".
 
B

Barmutik

Воодить программную блокировку на тот момент когда вы производите критические действия. Например пользователи не могут добавить запись пока происходит обновление... легко реализуемо на уровне приложения...

А насчёт ошибки .. ну так у вас в результирующем курсоре только одно поле .. а вы обращаетесь ко второму... вполне логично что его нет :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!