Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 18.11.2013
Сообщений: 37

создание зависимого счетчика

25.11.2013, 06:00. Показов 3443. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день.
требуется создать счетчик (отдельное поле в таблице), который бы изменялся (+1) при создании новой записи в зависимости от значения этого поля в предыдущей записи.
родной не походит по причине того, что если удалить, например, 10ю запись и потом создать новую, то он начинается с 11, а не с 10ти.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2013, 06:00
Ответы с готовыми решениями:

Создание таблицы запросом + поле счетчика
Здравствуйте, Уважаемые форумчане! Задача: сделать некую ленточную форму, источником данных которой будет являться запрос. Запрос...

Создание зависимого *.EXE файла
Доброго времени суток! Очень нужна помощь в компиляции огромного проекта на С++ Builder. Скомпилировать всё в независимый *.exe-шник...

Создание счетчика в БД
Здравствуйте! Есть у меня база данных sql , там есть столбик количество .., нужно чтобы значения этого столбика каждый раз стали больше...

13
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
25.11.2013, 06:42
Цитата Сообщение от Grief192 Посмотреть сообщение
который бы изменялся (+1) при создании новой записи в зависимости от значения этого поля в предыдущей записи
Обычно используют выражение типа Nz(DMax("Поле","Таблица"),0)+1, значение которого присваивают Полю в форме при вводе новой записи. Но проблему "дырок" это не решает.
1
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
25.11.2013, 08:05
Цитата Сообщение от Grief192 Посмотреть сообщение
родной не походит по причине того, что если удалить, например, 10ю запись и потом создать новую, то он начинается с 11, а не с 10ти.
Если есть зависимая таблица, как собираетесь решить проблему с тем id, который будет в ней из главной?
Проверять и обновлять на новый последовательный, и так с каждой последующей записью, если дырка в середине?

Бросайте Вы это гиблое дело. Делайте нормальный счетчик, как он должен быть. А если нужна сквозная нумерация то делайте ее в форме, отчете отдельно, для "визуальности", не зависимо от присутствия счетчика в таблице.
2
0 / 0 / 0
Регистрация: 18.11.2013
Сообщений: 37
25.11.2013, 10:03  [ТС]
Цитата Сообщение от Agapov_stas Посмотреть сообщение
А если нужна сквозная нумерация то делайте ее в форме, отчете отдельно, для "визуальности", не зависимо от присутствия счетчика в таблице.
нужно чтоб было отдельное поле с счетчиком (номер квитанции), который потом будет использоваться для поиска нужной записи, и печати. соответсвено он не должен изменяться при сжатии и т.п. Т.е. будет жестко привязан к записи.
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
25.11.2013, 10:14
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Nz(DMax("Поле","Таблица"),0)+1
так это и есть нумератор документов - чем не устраивает? Если нужна сквозная операция по году - в DMax добавляется соответствующее условие для года.
1
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
25.11.2013, 10:21
Цитата Сообщение от Grief192 Посмотреть сообщение
нужно чтоб было отдельное поле с счетчиком (номер квитанции), который потом будет использоваться для поиска нужной записи, и печати. соответсвено он не должен изменяться при сжатии и т.п. Т.е. будет жестко привязан к записи.
Все что Вы здесь описали и называется уникальным индексом/счетчиком.
0
0 / 0 / 0
Регистрация: 18.11.2013
Сообщений: 37
25.11.2013, 19:14  [ТС]
Цитата Сообщение от ltv_1953 Посмотреть сообщение
так это и есть нумератор документов - чем не устраивает? Если нужна сквозная операция по году - в DMax добавляется соответствующее условие для года.
я же говорил, что не устраивает .
пока вторую неделю как осваиваю access и интересовало какие есть варианты.
пойду изучать DMax (куда и как вставляются).

Добавлено через 8 часов 33 минуты
фуххх
везде (включая справку MS) где бы не искал, nz(Dmax......) задается для моих целей так: =Nz(DMax("поле","таблица"),0)+1)
два часа бился - выдает ошибку.
получилось только так: =Nz(DMax("NКвитанции";"Общая");0)+1 ,т.е. вместо запятой, точка с запятой.
при таком условии корректно работать будет?
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
25.11.2013, 19:25
Если пишите в VB или SQL (в процедуре Form_BeforeInsert присваиваете этот номер - так обычно делают) то ставится ",". В выражениях, создаваемых в конструкторе, ставится ";", из-за того, что в национальных настройках "," используется для отделения целой части числа от дробной.
1
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
25.11.2013, 19:38
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Обычно используют выражение типа Nz(DMax("Поле","Таблица"),0)+1
а если таблица с 500 тысяч строк будет, не будет ли "торможения" при каждом добавлении строки? Ведь каждый раз нужно будет сравнить все эти 500 тысяч строк.
Или еще больше в разы

Добавлено через 3 минуты
Еще как вариант, правда это уже велосипед будет, сделать функцию-счетчик типа
Visual Basic
1
2
3
4
dim A as intiger = 0
Do
 A =A + 1
Loop
и после каждой записи значение переменной записывать в реестр.
При записи новой строки просто считывать ее и прибавлять единицу. Не нужно будет весь столбец программе анализировать на значение максимальной.

Добавлено через 1 минуту
ltv_1953, Еще этот метод плох тем, что если удалить последнюю запись в таблице (или последние 10 записей), то счетчик опять эти же 10 значений присвоит следующим 10 записям, так как они максимальные были
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2013, 19:39
Цитата Сообщение от emenem97 Посмотреть сообщение
а если таблица с 500 тысяч строк будет, не будет ли "торможения" при каждом добавлении строки? Ведь каждый раз нужно будет сравнить все эти 500 тысяч строк.
Или еще больше в разы
Добавить запись это разовая операция, совершаемая только над над одной записью (если конечно, записи добавляются через форму, а не инсертом). Попав в таблицу, значение становится обычным, а не расчетным выражением, и проверки его уже не производятся.
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
25.11.2013, 19:45
В рабочих базах обычно бывает сквозная нумерация в течении года. Тогда в таблице документов добавляется поле Год и уникальный индекс (Год, Номер). Следующее значение счетчика получается не DMax, а функцией, в которой используется запрос с Max (с выборкой по году). На сотнях тысяч записей торможение не заметно. Ну и, естественно, нужно добавить обработку ошибки 3022, заменяя номер следующим.

Добавлено через 3 минуты
Цитата Сообщение от emenem97 Посмотреть сообщение
ltv_1953, Еще этот метод плох тем, что если удалить последнюю запись в таблице (или последние 10 записей), то счетчик опять эти же 10 значений присвоит следующим 10 записям, так как они максимальные были
Причем здесь это - речь идет о нумераторе документов. Если удалили последний документ с номером 555, то новый должен получить его номер.
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
25.11.2013, 19:49
Цитата Сообщение от mobile Посмотреть сообщение
если конечно, записи добавляются через форму, а не инсертом
Вдруг у автора таблица подвязана и добавляет записи массово с внешнего файла через запрос на добавление

Добавлено через 3 минуты
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Если удалили последний документ с номером 555, то новый должен получить его номер.
я наоборот понял вопрос. Извиняюсь
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
26.11.2013, 07:54
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Если удалили последний документ с номером 555, то новый должен получить его номер.
Как раз это решается легком, именно тем самым DMax().
А вот как ТС будет решать вопрос с "дырой" в середине, остается загадкой.
Если речь идет об одной таблице(без связанных, в которых будет храниться ссылка), тогда, думаю, достаточно просто раз в день(к примеру) сбрасывать счетчик всей таблицы.
SQL
1
ALTER TABLE Таблица ALTER COLUMN ПолеСчетчик counter(1,1)
(Написание статей).

Но, если от этой таблицы есть еще и связующая...Тогда не понятно зачем все это.
1
 Аватар для rvafexa
96 / 17 / 4
Регистрация: 13.08.2012
Сообщений: 490
26.11.2013, 08:55
выложить файл и сделаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2013, 08:55
Помогаю со студенческими работами здесь

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

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

Создание несбрасываемого счетчика
У меня макрос создает определенные бланки, каждый день. Они должны быть пронумерованы и номер должен быть уникальный... Вот сожу, думаю -...

Создание небольшого счетчика
Создание не большого счетчика ,т.е мне нужно ввести логин и пароль , но при этом если я введу 3 раза неправильный пароль программа должна...

Создание счетчика (аналог c++)
Доброго времени суток, уважаемые! Прошу не пинать сильно, так вопрос сто раз обсуждался, но пригодного решения в упор не вижу. В плюсах...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru