Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
fortero |
26.4.2011, 19:46
Сообщение
#1
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 132 Регистрация: 4.12.2010 Пользователь №: 2242 Спасибо сказали: 0 раз(а) Репутация: 0
|
И с нова я...
Подскажите пожалуйста как оптимально экономично используя ресурсы, и логически правельно узнать количество строк в запросе? У меня есть такой вариант, но что то мне подсказует что он не целисообразно использует ресурсы! Буду очень признателен если кто-то прольёт свет, спасибо за внимание! |
|
|
|
|
abc |
26.4.2011, 19:52
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4
|
int QSqlQuery::size () const
|
|
|
|
|
fortero |
26.4.2011, 20:13
Сообщение
#3
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 132 Регистрация: 4.12.2010 Пользователь №: 2242 Спасибо сказали: 0 раз(а) Репутация: 0
|
А это не оно?
Дело в том, что для того что бы вызвать выше указанную функцию итератору как я понимаю надо пролестать весь контейнер QSqlQuery, а это затраты на итерацию более проще можно получить сведенья? Сообщение отредактировал fortero - 26.4.2011, 20:15 |
|
|
|
|
abc |
26.4.2011, 20:41
Сообщение
#4
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4
|
не понимаю тебя, ты написал в теме посчитать количество строк, query.size() даёт результат, при чём здесь обход элементов?
|
|
|
|
|
fortero |
26.4.2011, 21:13
Сообщение
#5
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 132 Регистрация: 4.12.2010 Пользователь №: 2242 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(abc @ 26.4.2011, 20:41) Link не понимаю тебя, ты написал в теме посчитать количество строк, query.size() даёт результат, при чём здесь обход элементов? Я в посте написал не как вообще решить эту проблему а как максимально правельно с точки зрения нагрузки, что бы максимально разумно использовать ресурсы! |
|
|
|
|
abc |
26.4.2011, 21:34
Сообщение
#6
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4
|
А почему ты сомневаешься, что это оптимально?
Сообщение отредактировал abc - 26.4.2011, 21:51 |
|
|
|
|
MoPDoBoPoT |
26.4.2011, 22:07
Сообщение
#7
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9
|
Цитата(abc @ 26.4.2011, 22:34) Link я думаю, при выборке из БД в какой-нибудь приватный член QSqlQuery пишется количество выбранных строк, после чего при запросе query.size() ты значение этого члена и извлекаешь, т.е. query.size() не считает строки Это верно, если драйвер (и СУБД) поддерживает данную фичу. Цитата(fortero @ 26.4.2011, 20:46) Link Подскажите пожалуйста как оптимально экономично используя ресурсы, и логически правельно узнать количество строк в запросе? Обычно пишется SQL-запрос вида: Если возвращаемое число каким-то образом используется для изменении данных в БД, то запрос на количество записей и изменение данных делается в рамках одной транзакции, чтобы данные были консистентными. |
|
|
|
|
fortero |
26.4.2011, 22:15
Сообщение
#8
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 132 Регистрация: 4.12.2010 Пользователь №: 2242 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(MoPDoBoPoT @ 26.4.2011, 22:07) Link Цитата(abc @ 26.4.2011, 22:34) Link я думаю, при выборке из БД в какой-нибудь приватный член QSqlQuery пишется количество выбранных строк, после чего при запросе query.size() ты значение этого члена и извлекаешь, т.е. query.size() не считает строки Это верно, если драйвер (и СУБД) поддерживает данную фичу. Цитата(fortero @ 26.4.2011, 20:46) Link Подскажите пожалуйста как оптимально экономично используя ресурсы, и логически правельно узнать количество строк в запросе? Обычно пишется SQL-запрос вида: Если возвращаемое число каким-то образом используется для изменении данных в БД, то запрос на количество записей и изменение данных делается в рамках одной транзакции, чтобы данные были консистентными. Про это я знаю: Но как извлечь данные из такого запроса не смейтесь я только начинаю в Qt работать и мне пока многое не понятно... И как сделать 2 запроса в рамках одной транзакции? Просто мне внчале надо получить данные о количестве строк для передачи в мою функцию, а лиш потом получать контейнер query... |
|
|
|
|
silver47 |
27.4.2011, 4:47
Сообщение
#9
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6
|
Если БД не SQLite то query.numRowsAffected();
|
|
|
|
|
PAFOS |
27.4.2011, 8:24
Сообщение
#10
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8
|
Цитата(fortero @ 26.4.2011, 23:15) Link Просто мне внчале надо получить данные о количестве строк для передачи в мою функцию, а лиш потом получать контейнер query... С точки зрения оптимальности я бы выполнил запрос данных, затем эти данные поместил в контейнер (например в QList) попутно обрабатывая данные. В итоге имеем 1. через QList::count() я могу получить кол-во записей, причем независимо от возможностей sql драйвера 2. данные уже преобразованы и готовы к дальнейшей обработке. Все лучше чем делать два sql запроса) |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 22.12.2025, 12:24 |