|
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
|
||||||
Нумерация строк в запросе06.05.2012, 22:58. Показов 51919. Ответов 21
Метки нет (Все метки)
Много раз обсуждались подобные темы, но не одна из них мне не смогла помочь. Необходимо в запросе пронумеровать строки, и чтоб не зависимо как будет сортироваться запрос номера срок шли по порядку. В принципе я сделал то что мне нужно таким вот образом:
0
|
||||||
| 06.05.2012, 22:58 | |
|
Ответы с готовыми решениями:
21
Нумерация строк в запросе Нумерация строк в запросе |
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
||||||
| 06.05.2012, 23:41 | ||||||
|
Добавьте в запрос "Выбор агента" поле Платежи.Ідентифікатор. Запрос "Нумерация" будет такой
1
|
||||||
|
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
|
|
| 07.05.2012, 00:13 [ТС] | |
|
0
|
|
|
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
|
|||||||||||
| 09.05.2012, 14:14 [ТС] | |||||||||||
|
В этой же теме у меня вознилка еще трудность, необходимость пронумеровать в одном запросе все платежи чтоб каждый агент был под своей нумерацией. Нашел тему похожую на форумах решаемая с помощью вот такого запроса:
0
|
|||||||||||
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|||||||
| 09.05.2012, 16:00 | |||||||
|
Так как вы не сообщили, строки какого запроса/таблицы вам необходимо пронумеровать, то в приведенном запросе нумеруются строки ранее выложенной таблицы "Платежи" (имя поля Name изменил на dat)
Вообще-то необходимость в такой нумерации обычно возникает при выводе данных в отчет. В отчете же есть возможность организовать такую нумерацию, не прибегая к нумерации в запросе.
2
|
|||||||
|
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
|
||
| 09.05.2012, 17:26 [ТС] | ||
|
0
|
||
|
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
|
|||||||||||||||||||||||||||||||||||||||||
| 10.05.2012, 02:32 | |||||||||||||||||||||||||||||||||||||||||
|
Раз уж нельзя давать ссылки на другие форумы, то выкладываю фак c sql.ru (c) полностью:
Автор: Владимир Саныч, участники форума по Аксессу Прислал: Владимир Саныч Вопросы Q1: Как создать свой счетчик (чтобы поле было не типа счетчик)? Q2: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? Q3: Может ли поле счетчика содержать повторяющиеся значения? Q4: В таблице есть счетчик, но его значения идут не подряд, несколько чисел в середине отсутствуют. Как перезаполнить поле, чтобы дырок не было? (Другой вариант вопроса. Счетчик показывает, что последняя запись в моей таблице имеет номер N, а реально записей меньше. Почему счетчик неправильно считает количество записей в таблице? Что это - баг или фича?) Q5: Как сымитировать счетчик в отчете? Q6: Как сымитировать счетчик в запросе на добавление? Q7: Как сымитировать счетчик в обычном запросе либо ленточной форме? Q8: Как получить значение счетчика только что добавленной записи? Q9: Как создать одним запросом таблицу со счетчиком? Вопросы с ответами Q1: Как создать свой счетчик (чтобы поле было не типа счетчик)? A: Надо написать функцию, к которой обращаться либо в DefaultValue контрола (к сожалению, DefaultValue поля в таблице допускает только ограниченный набор стандартных функций), либо в программе, которая добавляет запись через рекордсет, либо в запросе на добавление. Ниже приведено несколько вариантов такой функции. Особое внимание надо уделить обработчику ошибок. Вариант 1
Nz(DMax(...),0)+1
Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax. Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. Вариант 2
Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Внимание - файл, в котором сидит эта таблица, запрещено сжимать.
Подвариант
Подвариант: все-таки делать rsCounter.Update, тогда по виду этой таблицы будет сразу ясно, какое значение было выдано последним. Правда, в этом случае файл станет расти. Еще подвариант: держать в этой таблице одну запись, в которой находится очередное значение счетчика, и вместо AddNew делать Edit и rsCounter!nCounter=rsCounter!nCounter+1, а потом соответственно Update. Вариант 3 (от Гетца)
Держим в отдельной таблице очередное значение счетчика и каждый раз увеличиваем его на 1. Таблица блокируется на момент чтения и увеличения счетчика, а все, кто в нее будут в это время стучаться, спокойно ждут (см. обработчик ошибок adhGetNextAutoNumber_Err) освобождения таблицы.
Q2: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? А1
Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого или большего значения еще не выдавал. (Если таким образом дать счетчику отрицательное значение, то он начнет выдавать отрицательные значения, несмотря на то что уже выдавал значения, большие их. Играя на этом, можно добиться, чтобы счетчик выдавал любые значения, в т.ч. и те, которые уже были.) А2
Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. В некоторых версиях Аксесса это работает только при условии, что таблица со счетчиком пуста (и тогда счетчик начнет выдавать значения с 1).
А3
Начиная с Аксесса 2000, можно запустить запрос наподобие такого:
Q3: Может ли поле счетчика содержать повторяющиеся значения? А
В принципе да. Этого несложно достичь, меняя состояние счетчика описанными способами. Однако если при этом возникнут нарушения ключа (вообще говоря, поле счетчика можно и не делать ключевым, но обычно все-таки принято делать), то записи просто не смогут добавляться. Каждая неудачная попытка добавить запись будет увеличивать значение счетчика на 1. Когда зона существующих значений будет пройдена, то записи опять смогут добавляться. Q4: В таблице есть счетчик, но его значения идут не подряд, несколько чисел в середине отсутствуют. Как перезаполнить поле, чтобы дырок не было? (Другой вариант вопроса. Счетчик показывает, что последняя запись в моей таблице имеет номер N, а реально записей меньше. Почему счетчик неправильно считает количество записей в таблице? Что это - баг или фича?) А
Это нормальная ситуация. Если возникла необходимость, чтобы значения счетчика шли подряд, значит база была спроектирована неверно. Поле счетчика должно служить только для однозначной идентификации записей (и, возможно, порядка их занесения), юзер не должен видеть его значений, а если и увидит, то не должен возражать против тех значений, которые есть. Счетчик не служит для подсчета записей. Q5: Как сымитировать счетчик в отчете? А
Заводим текстбокс и задаем ему свойства: ControlSource = "=1" RunningSum = Over All Q6: Как сымитировать счетчик в запросе на добавление? А
Пишем функцию примерно такого вида:
В запросе обращаемся к ней дважды: в части WHERE - с параметрами (чтоугодно,N), где N равно нужному начальному значению счетчика; в части SELECT - в качестве первого параметра передавать любое поле из таблицы, второй параметр не указывать. Внимание: упрощать этот код, удаляя из него параметр, передаваемый в части SELECT, - нельзя. Без параметра функция будет вызвана только один раз, а не в каждой записи заново. Q7: Как сымитировать счетчик в обычном запросе либо ленточной форме? А1
А2
Примечание 1. Поле f обязано быть уникальным. Примечание 2. Способ 1 быстрее работает, но является необновляемым. А3
В новых версиях Аксесса у формы есть свойство CurrentRecord.
Q8: Как получить значение счетчика только что добавленной записи? А1
Если запись добавляется через рекордсет, то так: rs.AddNew переменная = rs!полесчетчика ... rs.Update 'или Set rs = ...OpenRecordset("...where 1=0") 'обязательно пустой рекордсет rs.AddNew 'ровно один раз; при добавлении двух и более записей ничего не получится ... rs.Update rs.MoveFirst переменная = rs!полесчетчика 'или rs.AddNew ... rs.Update rs.Bookmark = rs.LastModified переменная = rs!полесчетчика А2
Более широкий круг применимости у такого способа:
работает либо через ADO, либо через DAO в Jet 4 и позже, и только с базами формата Аксесса 2000 и позже; возвращает значение только из записи, добавленной программно, но не через юзер-интерфейс. А3
Для adp годится такая модификация того же способа:
Q9: Как создать одним запросом таблицу со счетчиком? A: create table xx (id counter)
3
|
|||||||||||||||||||||||||||||||||||||||||
|
2643 / 1342 / 256
Регистрация: 25.10.2010
Сообщений: 2,196
|
|
| 16.05.2012, 11:27 | |
|
Все-таки форумы - замечательная вещь!
Тоже возникла задача пронумеровать строки в запросе - источнике строк списка. Даже мучится не пришлось - есть готовое решение minob, alvk, очень помогли, спасибо
0
|
|
|
6 / 6 / 1
Регистрация: 10.03.2016
Сообщений: 304
|
|
| 11.07.2018, 10:07 | |
|
Простите за глупый вопрос, но как в примере в первом посте создан запрос "Нумерация", в качестве источника данных "p1", но такой таблицы или запроса я не вижу.
0
|
|
|
Мы один, давай на "ты"
3849 / 1393 / 345
Регистрация: 16.06.2016
Сообщений: 3,288
|
|
| 11.07.2018, 10:14 | |
|
Angie, это псевдоним таблицы "Выбор агента"
1
|
|
|
6 / 6 / 1
Регистрация: 10.03.2016
Сообщений: 304
|
||||||
| 11.07.2018, 11:33 | ||||||
|
Панург,
а как понять этот запрос?
И вообще не могу понять, как из этого выражения делается нумерация.
0
|
||||||
|
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
| 11.07.2018, 12:15 | ||||||
|
Предположим в форме Вам нужно сделать выборку из таблицы [Выбор агента] и задать ей нумерацию в поле НомерАгента. Тогда запрос в SQL
1
|
||||||
|
Мы один, давай на "ты"
3849 / 1393 / 345
Регистрация: 16.06.2016
Сообщений: 3,288
|
|
| 11.07.2018, 12:18 | |
|
Angie, ты думаешь я возьму тут и прочту тебе весь курс по SQL? Зря ты так думаешь. Бери книги и читай.
Alias (SQL) Коррелированные подзапросы
1
|
|
|
6 / 6 / 1
Регистрация: 10.03.2016
Сообщений: 304
|
||
| 11.07.2018, 15:26 | ||
|
mobile, можете глянуть Запрос2, пожалуйста? Как сделать, чтобы нумерация совпадала с выводимой информацией? То есть если задано объединение всех данных, то нумеровались бы все совпадающие. Пробовала нумеровать по другим таблицам и дописывать параметры, но пока не могу сообразить. Панург, нет-нет, спасибо. Просто вообще упустила эту тему из вида и логику запроса не поняла. Теперь буду разбираться, спасибо
0
|
||
|
-5 / 2 / 0
Регистрация: 15.03.2014
Сообщений: 73
|
||
| 14.08.2020, 12:59 | ||
|
Заранее спасибо.
0
|
||
|
Модератор
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
|
||
| 14.08.2020, 18:41 | ||
|
Их там две, не считая функции (точнее, операции) сложения. Так что Вас конкретно интересует?
0
|
||
|
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
|
|
| 15.08.2020, 04:04 | |
|
0
|
|
|
-5 / 2 / 0
Регистрация: 15.03.2014
Сообщений: 73
|
|
| 15.08.2020, 07:04 | |
|
Я имел ввиду пример в котором будет использоваться это выражение.
В моём случае таблица не имеет ключа, т.к. это линк с экселя и видимо мне этот метод не подойдёт.
0
|
|
|
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
|
||
| 15.08.2020, 07:38 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 05.12.2020
Сообщений: 1
|
|
| 05.12.2020, 19:23 | |
|
Никогда не знал как из отчета подставлять данные в запрос, спасибо автору темы и тем кто помогали решать. У меня похожая ситуация, нужно вывести последние 10 строк таблицы, ни ключей ни нумерации нет. Предполагаю напихать отдельную таблицу нумерацией и данными из таблицы методами Update, Insert, опыта с макросами нет, а можно запустить макрос при открытии формы?
0
|
|
| 05.12.2020, 19:23 | |
|
Помогаю со студенческими работами здесь
20
Нумерация строк в запросе на объединение Нумерация строк в запросе, начиная с заданного номера
Нумерация в запросе и выборка записей по условию нумерации Нумерация строк в запросе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|