Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Собственно сабж. Если делать в лоб, т.е. с помощью QSqlQuery, валится на строке 36 064 возвращаемого результата. QSqlModel подойдет для этой цели? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2012, 16:24 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludiСобственно сабж. Если делать в лоб, т.е. с помощью QSqlQuery, валится на строке 36 064 возвращаемого результата. QSqlModel подойдет для этой цели? Спасибо. Какие название и номер ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2012, 16:26 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
название и номер ошибкиmagister_ludiСобственно сабж. Если делать в лоб, т.е. с помощью QSqlQuery, валится на строке 36 064 возвращаемого результата. QSqlModel подойдет для этой цели? Спасибо. Какие название и номер ошибки? сигнал: sigsegv. назначение: segmentation fault. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2012, 16:34 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludiсигнал: sigsegv. назначение: segmentation fault. Разреши core dump, грузи его в gdb, смотри где и на чём оно упало. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2012, 19:24 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovmagister_ludiсигнал: sigsegv. назначение: segmentation fault. Разреши core dump, грузи его в gdb, смотри где и на чём оно упало. дамп мало о чем сказал. вылетел на while(query.next()). Судя по стеку вызовов проблема в qt'шном драйвере для firebird, присутствует вызов QSqlCachedResult::cacheNext(). Драйвер устанавливался как пакет из репозитория Debian 6, командой apt-get install. Были у кого такие проблемы? Как решали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2012, 19:52 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludiвылетел на while(query.next()). А ты уверен, что для этого цикла тебе требуется именно кэшированный датасет?.. Может, обойдёшься таким, который не складывает полученные данные за щёку?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2012, 20:00 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovmagister_ludiвылетел на while(query.next()). А ты уверен, что для этого цикла тебе требуется именно кэшированный датасет?.. Может, обойдёшься таким, который не складывает полученные данные за щёку?.. query->setForwardOnly(true)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2012, 20:21 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludi..на строке 36 064 возвращаемого результата. ... вот мне дико интересно, а что потом Вы будете делать с результатом то??? представил бесконечную бумажную ленту ползущую из принтера(типа убить бумагу, принтер, тонер в раз)... Или файл отчёта для весу так сказать (типа у меня отчётов на 20 гигов!)? Может быть Вы захотели всё втянуть "для скорости", и у вас самое крутое локальное железо? :) короче говоря - просвятите дурака нахрена это делать то??? (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 16:59 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
kolobok0, Назови, пожалуйста, нижнюю границу обёма выборки, до которой ты бы не стал поднимать свой вопрос. Спасибо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 17:36 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludiприсутствует вызов QSqlCachedResult::cacheNext(). Скорее всего ты упёрся в лимит объёма этого Кешированного ДатаСета. Читай документацию. Да и вообще, знающие верно подметили что прогружать всю базу на клиента это не cool. Соптимизируй объём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 17:59 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
vvmkolobok0, Назови, пожалуйста, нижнюю границу обёма выборки, до которой ты бы не стал поднимать свой вопрос. Спасибо. :) 2-3 экрана записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2012, 19:45 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
kolobok0magister_ludi..на строке 36 064 возвращаемого результата. ... короче говоря - просвятите дурака нахрена это делать то??? (круглый) Специализированная программа для создания файлов конфигурации графа технического состояния промышленного комплекса. Не я это придумал, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 13:20 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
maytonmagister_ludiприсутствует вызов QSqlCachedResult::cacheNext(). Да и вообще, знающие верно подметили что прогружать всю базу на клиента это не cool. Соптимизируй объём. Все верно, это я понимаю. Ситуация стандартна: кто-то эту жесть придумал, другой написал и уволился, а третий со всем этим гумном разбирается. И вот в текущей ситуации, кроме как делать выборку по всем записям, ничего сделать нельзя. Благо база локальная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 13:35 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Сделай setForwardOnly(true), и, раз уж не обойтись без предварительного кэширования, начитывай данные в свои струтуры. И храни в своих структурах. Так, хотя бы, сможешь управлять процессом начитки и кеширования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2012, 15:08 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
rovanСделай setForwardOnly(true), и, раз уж не обойтись без предварительного кэширования, начитывай данные в свои струтуры. И храни в своих структурах. Так, хотя бы, сможешь управлять процессом начитки и кеширования. так и делаю. результат такой же: segmentation fault Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 05:57 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludi, А есть segfault если закомментарить тело цикла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 06:09 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludiформирование строки запроса не привожу И кстати зря не приводите, т.к. в коде форматирующем строки часто бывают ошибки переполнения буфера. А они в свою очередь прямо ведут к segfault в произвольных местах программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 06:15 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymagister_ludi, А есть segfault если закомментарить тело цикла? все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 06:42 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymagister_ludiформирование строки запроса не привожу И кстати зря не приводите, т.к. в коде форматирующем строки часто бывают ошибки переполнения буфера. А они в свою очередь прямо ведут к segfault в произвольных местах программы. Почему я не стал писать формироание строки запроса. Изначально запрос был таким: Код: plsql 1. Это уже потом начал подгружать данные порциями в надежде победить ошибку и все равно результата нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 06:59 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludiПочему я не стал писать формироание строки запроса. Изначально запрос был таким: Так а сейчас он какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 08:15 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludiAnatoly Moskovskymagister_ludi, А есть segfault если закомментарить тело цикла? все работает Ну так как вы нам тогда предлагаете гадать из-за чего ошибка, если не приведен код вызывающий ее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 13:39 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Извиняюсь. Вот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 20:07 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
magister_ludi, Обратите внимание на этот код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Т.е. у вас, если в очередной записи встретился null в поле №2, то указатель на буфер обнуляется, и на следующей итерации цикла где не будет null, memcpy затрет память около нулевого адреса (а эта страница всегда защищена от записи - отсюда и сегфолт). Ну и обнуление указателя на буфер делает бессмысленным free() в конце цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 20:35 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
Ну и так тоже нельзя делать: Код: plaintext 1. - т.к. здесь вы в указатель записываете адрес временной переменной, которая будет удалена до того как вы этим указателем воспольуетесь. Правильно так: Код: plaintext 1. 2. Вместо XXX поставьте тип который возвращает toAscii() (я его не знаю, см. доку) Это ошибка тоже может приводить к сегфолту. Но думаю что до нее не доходит, т.к. срабатывает гарантированный сегфолт описанный в моем предыдущем сообщении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 20:44 |
|
||
|
Qt+firebird как правильно реализовать выборку >50 000 строк
|
|||
|---|---|---|---|
|
#18+
И еще. У вас объявлено Код: plaintext 1. , т.е. указатель на массив элементов размера 4 или 8 байтов. А в коде вы к нему обращаетесь как к указателю на байты (char *buff). Код: plaintext 1. 2. 3. Это неминуемое переполнение буфера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2012, 20:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38001607&tid=2020743]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
399ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 297ms |
| total: | 810ms |

| 0 / 0 |
