Russian Qt Forum
Сентябрь 30, 2024, 08:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString максимальный размер :(  (Прочитано 11098 раз)
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« : Февраль 12, 2010, 02:02 »

У меня в рантайме в QString формируется очень большой SQL запрос(например 192Кб примерно) и в один прекрасный момент строка просто становится пустой, т.е. меньшие запросы выполняются нормально, а на большие QString как я понимаю не хватает..что можно вместо него использовать?
P.S. Понимаю что тема не та, но может быть в Qt есть что-то для вставки многих строк в базу за раз (что я и делаю)..
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #1 : Февраль 12, 2010, 05:00 »

Никак нельзя ваш вариант перевести на QSqlQuery.prepare() и вызов QSqlQuery.exec() много раз с разными параметрами (bindValue), вместо формирования оч. длинной строки?
Записан
shirushizo
Гость
« Ответ #2 : Февраль 12, 2010, 05:21 »

Никак нельзя ваш вариант перевести на QSqlQuery.prepare() и вызов QSqlQuery.exec() много раз с разными параметрами (bindValue), вместо формирования оч. длинной строки?
И собствено, параметры можно записывать в QStringList и обрабатывать в цикле.(либо QSqlQuery::bindValue, либо QString::arg).
P.s: Если честно не видел SQL-запросов в 192КБ  В замешательстве
Записан
SABROG
Гость
« Ответ #3 : Февраль 12, 2010, 09:46 »

Обычно создается всего один запрос:

Код
SQL
INSERT INTO TABLE (field1, field2) VALUES (?,?);
 

Который передается в QSqlQuery::prepare()

Затем на каждую колонку из запроса создается свой QVariantList. Листы заполняются данными.

Далее привязываем эти листы к колонкам:

Код
C++ (Qt)
   query.addBindValue(field1List);
   query.addBindValue(field2List);
 

И выполняем:

Код
C++ (Qt)
   query.execBatch(QSqlQuery::ValuesAsRows);
 
Записан
shirushizo
Гость
« Ответ #4 : Февраль 12, 2010, 09:56 »

Обычно создается всего один запрос:

Код
SQL
INSERT INTO TABLE (field1, field2) VALUES (?,?);
 

Который передается в QSqlQuery::prepare()

Затем на каждую колонку из запроса создается свой QVariantList. Листы заполняются данными.

Далее привязываем эти листы к колонкам:

Код
C++ (Qt)
   query.addBindValue(field1List);
   query.addBindValue(field2List);
 

И выполняем:

Код
C++ (Qt)
   query.execBatch(QSqlQuery::ValuesAsRows);
 

О таком не слышал, вечно циклом проходил, буду знать, спасибо.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #5 : Февраль 12, 2010, 22:09 »

SABROG, спасибо! Увеличил производительность программы в сто с лишним раз Улыбающийся
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.153 секунд. Запросов: 22.