Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2017, 13:59   #1
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию Номер записи в запросе

Здравствуйте.
Помогите решить, пожалуйста, следующую задачу.
Есть запрос, который выдаёт несколько записей. Хочу сделать вычисляемое поле, которое показывало бы номер каждой записи. Т.е. если записей всего три запрос выдал, то в этом поле были бы цифры, соответствующие номеру строки.
Изображения
Тип файла: png 2017-11-10_14-59-35.png (9.9 Кб, 475 просмотров)
superpsih вне форума Ответить с цитированием
Старый 10.11.2017, 14:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

c SQL.RU - отсюда

Цитата:
Код:
Q7: Как сымитировать счетчик в обычном запросе либо ленточной форме?

A1:
SELECT (Select Sum(1) From t AS p Where p.f<=p1.f), p1.f
FROM t AS p1
ORDER BY p1.f;

A2:
SELECT DCount("f", "t","f<=" & CStr(f)), f
FROM t
ORDER BY f;

Примечание 1. Поле f обязано быть уникальным.

Примечание 2. Способ 1 быстрее работает, но является необновляемым.

Примечание 3. Аналогичный вопрос в другом разделе FAQ: http://www.sql.ru/faq/faq_topic.aspx?fid=126

A3: В новых версиях Аксесса у формы есть свойство CurrentRecord.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.11.2017, 15:28   #3
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию

Не очень понял, как этим пользоваться.
Можете на тестовой БД показать?
Сделал как во втором варианте, но у меня не работает.
Вложения
Тип файла: zip count.zip (24.2 Кб, 40 просмотров)

Последний раз редактировалось superpsih; 10.11.2017 в 15:40.
superpsih вне форума Ответить с цитированием
Старый 10.11.2017, 15:51   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от superpsih Посмотреть сообщение
Не очень понял, как этим пользоваться.
ага. вижу.


Код:
SELECT DCount("id", "t","id<=" & CStr(id)), id, * FROM t
ORDER BY id;
вместо f нужно указать название поля, которое заведомо уникально в вашей таблице. например, id


по первому варианту для вашей таблицы:
Код:
SELECT (Select Sum(1) From t AS p Where p.id<=p1.id), p1.*
FROM t AS p1
ORDER BY p1.id;

а так будет выглядеть запрос по варианту 1, если нужно отобрать не все записи, а, допустим, только те, что содержат подстроку "gh" в поле f:
Код:
SELECT (Select Sum(1) From t AS p Where p.id<=p1.id and p.f like '*gh*'), p1.*
FROM t AS p1
where p1.f like '*gh*'
ORDER BY p1.id;

Последний раз редактировалось Serge_Bliznykov; 10.11.2017 в 15:57.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.11.2017, 15:56   #5
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию

Ух ты! Круто! Работает! Спасибо, вам, большое!
superpsih вне форума Ответить с цитированием
Старый 10.11.2017, 16:28   #6
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию

В тесте всё работает, а в рабочей БД отказывается. По первому варианту считает не правильно (поле count). По второму варианту База данных вылетает после того как в Design View я устанавливаю связь между двумя таблицами и открываю табличный вид запросы. Вот код, который не правильно считает.
Код:
SELECT continuous_properties.Place_x_number, continuous_properties.I_x, continuous_properties.P1_x, continuous_properties.P2_x, continuous_properties.date1_x, continuous_properties.date2_x, continuous_properties.lifetime_testing, continuous_properties.number_of_holder_link, DCount("id","continuous_properties","[continuous_properties]![id]<=" & CStr([continuous_properties].[id])) AS [count]
FROM continuous_properties INNER JOIN group_list ON continuous_properties.ID = group_list.lot_g
WHERE (((continuous_properties.Place_x_number)=[Forms]![lifetime_testing]![Place]) AND ((continuous_properties.date1_x)=[Forms]![lifetime_testing]![date1]));
Вот код, который вешает базу:
Код:
SELECT (Select Sum(1) From continuous_properties AS p Where p.id<=p1.id) AS Expr1
FROM continuous_properties AS p1 INNER JOIN group_list ON p1.ID = group_list.lot_g
ORDER BY p1.id;
Изображения
Тип файла: png 2017-11-10_17-24-41.png (13.4 Кб, 139 просмотров)
superpsih вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Номер записи в таблице. FoxPro. Kingdom_Reborn Помощь студентам 0 03.12.2010 22:48
Добавление записи в запросе при условии Rekky SQL, базы данных 11 29.07.2010 14:22
Порядковый номер записи Yur@ БД в Delphi 4 25.12.2009 08:37
Номер текущей записи Streetmagic БД в Delphi 5 25.12.2009 07:43
НОМЕР ЗАПИСИ))) chekanoff БД в Delphi 2 02.04.2008 09:18