Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Как определить, что запись последняя?

08.02.2010, 09:08. Показов 4374. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть прилада с исходником (моя) и БД под аксесом, связь по ADO. В приладе есть много циклов перебора записей. Я перед циклом определяю, сколько в таблице всего строк, удовлетворяющих текущему фильтру, и юзю циклы со счётчиками. А как можно ещё? Можно ли в цикле while, не используя счётчик записей в какой бы то нибыло его форме, определить, является ли текущая запись последней? Как именно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2010, 09:08
Ответы с готовыми решениями:

Последняя запись в таблице - Row и Column - подскажите пожалуйста как ее определить
Последняя запись в таблице - Row и Column - подскажите пожалуйста как определить эти значения

Как определить, что ячейка таблицы в Ворд - последняя в строке?
Как определить, что ячейка таблицы в Ворд - последняя в строке?

Как сделать запись в реестр win7 64. В реестр попадает только последняя запись
Добрый вечер! Не могу сделать запись в реестр win7 64. Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine; ...

32
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.02.2010, 09:21
FindNext, FindPrior, FindFirst и FindLast работают с фильтрованными данными...
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 09:41
Code
1
2
3
4
5
while (!Query1->Eof)
{
  // do something
   Query1->Next();
}
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.02.2010, 10:01  [ТС]
oxotnik, спасибо за ответ. На сколько я его понял, Eof работает и с таблицами/запросами ADO? Не знал. Я думал, что Eof только для файлов.

Добавлено через 1 минуту
Но делать теперь буду так:
C++
1
2
3
4
for (Query->First(); !Query->Eof(); Query->Next())
{
 
}
. Сначала указал while как цикл без счётчика, а потом сообразил, что мне же ещё надо перейти к первой записи, да и Next() удобнее в заголовке. А для обратного перебора есть что-то подобное? Типа
C++
1
2
3
4
for (Query->Last(); !Query->Bof(); Query->Prev())
{
 
}
? Или может
C++
1
2
3
4
for (Query->Last(); !Query->Eof(); Query->Prev())
{
 
}
?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 10:34
а для чего вообще перебор записей делать? обычно таким занимаются, когда SQL не знают.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.02.2010, 10:55  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
когда SQL не знают
. На сиквэле далеко не всё можно сделать. Я использую перебор записей сразу нескольких таблиц во вложенных циклах (на некоторых уровнях вложения имеется более одного цикла) в подпрограмме формирования допустимого учебного расписания вуза. Нука попробуй сделать целиком на сиквеле! Принципиально может и реализуемо, но ты этот запрос себе представь и прикинь, каково его сделать, а тем более, проверить, а на сях хоть декомпозиция есть. А вот второй вариант: таблица имеет композитный ключ из двух полей, её надо вывести на экран, так, чтобы одному полю ключа соответствовала строка, а второму - столбец. Сделай ка это на сиквэле! И вообще, из того, что ты связываешь знание сиквэла с перебором записей, следует, что именно ты сиквэла и не знаешь, раз не сообразил сразу, что он предназначен только для формирования выборки и может оказаться непригоден для выполнения операций с отобранными записями. Поиск путём перебора записей - действительно признак незнания сиквэла. Но разве я скзал, что ищу этим способом запись? Наоборот, из первого же моего поста видно, что поиск уже выполнен средствами сиквэла и обработать требуется все записи:
Цитата Сообщение от taras atavin Посмотреть сообщение
сколько в таблице всего строк, удовлетворяющих текущему фильтру
.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 11:07
Цитата Сообщение от taras atavin Посмотреть сообщение
что именно ты сиквэла и не знаешь, раз не сообразил сразу, что он предназначен только для формирования выборки и может оказаться непригоден для выполнения операций с отобранными записями.
кхм... SQL мощный инструмент работы с наборами данных, и может применяться не только для выборки, но и для добавления/изменения/удаления, причем эти операции выполняются не поочередно для каждого значения/записи, а для набора целиком, что в разы повышает производительность.
Я в свое время тоже начинал с переборов, но после того как узнал возможности SQL понял, что перебор записей на клиенте это самое распоследнее дело (особенно для отображения в виде таблицы).
По поводу столбцов и строк: конкретно твою задачу я не знаю, но строка в столбец средствами SQL может преобразоваться через UNION, либо аксесс поддерживает перекрестные запросы, которым тоже это можно сделать (я правда ни разу их не использовал, но в документации об этом говорится).
Зы: к стати, сложности при отображении и обработке данных свидетельствуют о неправильной/не продуманной архитектуре БД.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.02.2010, 11:14  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
особенно для отображения в виде таблицы
Ты прочитал, какая именно у меня экранная таблица? Разве это на сиквэле реализуемо? Операторы типа
SQL
1
INSERT
/
SQL
1
DELETE
/
SQL
1
SET
и связь нескольких таблиц в одном запросе я юзю. Перебор в клиенте - последнее? Согласен.Так я и делаю его после того, как сиквэл уже почти все таблицы связал, все
SQL
1
INSERT
/
SQL
1
DELETE
/
SQL
1
SET
сделал, обработал
SQL
1
WHERE
и выдал несколько выборок.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 11:23
Цитата Сообщение от taras atavin Посмотреть сообщение
Ты прочитал ...? Разве это на сиквэле реализуемо?
а ты прочитал что я тебе про перекрестные запросы писал, и про структуру БД (возможно неправильную)?
и вообще я отвечал на твое утверждение:
Цитата Сообщение от taras atavin Посмотреть сообщение
раз не сообразил сразу, что он предназначен только для формирования выборки и может оказаться непригоден для выполнения операций с отобранными записями
во первых, я не согласен с что SQL только для выборки
во вторых, я не согласен с тем утверждением, что нельзя выполнять операции с отобранными записями, т.к. уж если их сумели отобрать, то и операции над ними не проблема сделать.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.02.2010, 11:26  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
добавления/изменения/удаления
это тоже формирование некоторого отношения. Хотя формирование расписания тоже можно сюда отнести, но ты себе представь такое отношение и соответствующий запрос. Сиквэл - язык запросов, не более того. Если б можно было всё свалить на сиквэл, то кто бы вообще писал клиенты и зачем они вообще были бы нужны? Если клиент ничего не делает, а всё свалено на сиквэл, то сдалай в аксесе форму с отчётом и юзь базу с аксеса. А если аксес не тянет по фукциональности/оформлению/времени разработки то и сиквэл не годен для полной реализации только на нём и клиенту придётся или обрабатывать записи самому или выдирать из них данные и самостоятельно отображать (не компонентами вкладки Data Controls, а другими, вообще с БД изначально не свзязанными, например, DrawGrid). Так вот, мне надо обе задачи решить не для отдельных записей, а для целых наборов, но си с наборами не работают целиком, отсюда перебор.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 11:49
Цитата Сообщение от taras atavin Посмотреть сообщение
Сиквэл - язык запросов, не более того
это инструмент для обработки данных
Цитата Сообщение от taras atavin Посмотреть сообщение
Если б можно было всё свалить на сиквэл, то кто бы вообще писал клиенты и зачем они вообще были бы нужны?
для отображения данных

Цитата Сообщение от taras atavin Посмотреть сообщение
Если клиент ничего не делает, а всё свалено на сиквэл, то сдалай в аксесе форму с отчётом и юзь базу с аксеса.
многие клиенты по такому принципу и работают... отображают данные, и передают на сервер, что надо с ними сделать, а сервер уже все делает сам, клиенту надо только изредка обновлять отображение.

Цитата Сообщение от taras atavin Посмотреть сообщение
А если аксес не тянет по фукциональности/оформлению/времени разработки то и сиквэл не годен для полной реализации только на нём и клиенту придётся или обрабатывать записи самому или выдирать из них данные и самостоятельно отображать (не компонентами вкладки Data Controls, а другими, вообще с БД изначально не свзязанными, например, DrawGrid).
аксесс это вообще жалкое подобие СУБД, и тем не менее на нем можно очень много делать и без переборов.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.02.2010, 12:14  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
на нем можно очень много делать
согласен. Но всё же. Если клиент вообще нужен, то и ему что всегда останется. А когда не нужен, так и писать его вообще не нужно, а надо юзить формы/отчёты самого аксеса.

Добавлено через 2 минуты
Цитата Сообщение от oxotnik Посмотреть сообщение
жалкое подобие СУБД
а хорошая СУБД тогда что? оракл? Я вообще то думал что оракл - крутая навороченная но слишком тяжелая для нормальных машин СУБД , аксес - средненькая, но всёже СУБД, а дэбэйс - лишь заготовка под СУБД.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 12:25
FireBird, MySQL, SQLite, MS SQL Express
все бесплатное и для повседневных задач шустрое, и ресурсов не требует особых.
дэбэйс - файловый вариант - прошлый век.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.02.2010, 12:27  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
дэбэйс - прошлый век.
Тогда и было. Но я и в прошлом веке считал его не СУБД, а заготовкой под СУБД.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
08.02.2010, 13:28
Давайте вернемся к истокам спора и проясним позиции.

Цитата Сообщение от oxotnik Посмотреть сообщение
а для чего вообще перебор записей делать? обычно таким занимаются, когда SQL не знают.
Ув. oxotnik, Вы предлагаете вообще не использовать такие select, которые возвращают несколько записей?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 13:49
Цитата Сообщение от Black Fregat Посмотреть сообщение
Ув. oxotnik, Вы предлагаете вообще не использовать такие select, которые возвращают несколько записей?
где я такое говорил? как вы из этого сделали такой вывод?
пожалуйста, возвращайте много записей, но оббегать циклом несколько десятков/сотен/тысяч записей для того что бы одному полю присвоить одинаковое значение это моветон.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
08.02.2010, 14:00
Тогда о чем спор? Мне показалось, что никто и не возражает, что
Цитата Сообщение от oxotnik Посмотреть сообщение
оббегать циклом несколько десятков/сотен/тысяч записей для того что бы одному полю присвоить одинаковое значение это моветон.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 14:04
Цитата Сообщение от Black Fregat Посмотреть сообщение
Тогда о чем спор?
а спора собственно нет, есть диалог (возможно не очень конструктивный), в котором я утверждаю, что нет необходимости в циклах, в противном случае не совсем верно запроектирована БД, либо имеется пробел знаниях SQL, либо нежелание делать через запросы.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
08.02.2010, 14:18
Боюсь, я не совсем понимаю, как сочетаются Ваши утверждения:

Цитата Сообщение от oxotnik Посмотреть сообщение
я утверждаю, что нет необходимости в циклах, в противном случае не совсем верно запроектирована БД, либо имеется пробел знаниях SQL, либо нежелание делать через запросы.
Цитата Сообщение от oxotnik Посмотреть сообщение
пожалуйста, возвращайте много записей
Но это абстракция. Вот конкретный пример. Пусть нам надо опросить 1000 приборов, параметры доступа к которым хранятся в базе. Какой код, на Ваш взгляд будут более правильным?
1) Выбрать 1000 записей одним запросом и пройтись по нему в цикле
2) Сделать 1000 параметризованных запросов - по одному на каждый прибор?

Или Вы настаиваете на третьем варианте - мистическим образом опрашивать приборы прямо из SQL?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 14:47
Не надо подменять понятия. Я говорил о том что, для представления данных в виде таблицы циклы не нужны, и что таблицу в любом виде при правильно спроектированной БД можно вернуть на клиента из СУБД таким образом, что она будет отображена стандартными средствами (в них уже есть циклы, зачем еще надстраивать свои?).
В приведенном примере клиент является прокладкой между данными из БД и некими устройствами, тут без циклов не обойтись.
Для больших СУБД выгодней делать много мелких запросов, нежели один большой (на скорости клиента это отрицательно скажется, но на системе в целом - положительно).
В случае если клиент и СУБД обслуживают только себя, т.е. просто хранят и обрабатывают данные, то целесообразно проектировать таким образом, что бы клиент мог быть разработан с минимальными затратами, а это значит, что всю логику управления данными надо поместить на сервер, а с клиента вызывать необходимый функционал сервера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2010, 14:47
Помогаю со студенческими работами здесь

Определить правда ли, что первая и последняя цифры числа 2^N в сумме больше чем N
Ввести натуральное N, определить правда ли, что первая и последняя цифры числа 2^N в сумме больше чем N (возведение в степень...

Дано число. Определить, верно ли, что сумма его чисел больше m и последняя цифра равна Y
дано число. верно ли что сумма его чисел больше m и последняя цифра равна Y <script> var n=prompt("Введите число ",10); ...

Как узнать, что в DbGridEh выделена последняя строка?
Здравствуйте. Подскажите пожалуйста как узнать что в DBGrideh выделенная последняя строка. а то есть если edit1.text=последней строки...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru