Russian Qt Forum
Февраль 10, 2012, 16:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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

Сообщений: 419


WWW
« : Февраль 12, 2010, 02:02 »

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

VoiceTranslator - приложение, которое предоставляет возможности перевода и озвучки текстов.
http://kibsoft.ru
break
Супер активный житель
*****
Offline Offline

Сообщений: 740


« Ответ #1 : Февраль 12, 2010, 05:00 »

Никак нельзя ваш вариант перевести на QSqlQuery.prepare() и вызов QSqlQuery.exec() много раз с разными параметрами (bindValue), вместо формирования оч. длинной строки?
Записан
shirushizo
Самовар
**
Offline Offline

Сообщений: 196



« Ответ #2 : Февраль 12, 2010, 05:21 »

Никак нельзя ваш вариант перевести на QSqlQuery.prepare() и вызов QSqlQuery.exec() много раз с разными параметрами (bindValue), вместо формирования оч. длинной строки?
И собствено, параметры можно записывать в QStringList и обрабатывать в цикле.(либо QSqlQuery::bindValue, либо QString::arg).
P.s: Если честно не видел SQL-запросов в 192КБ  В замешательстве
Записан
SABROG
Гуру общения
******
Offline Offline

Сообщений: 1424



« Ответ #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);
 
Записан

Национальная группа Russian Federation на QtCentre.
Qt: 4.7.2, GCC: 4.4.0
We'd get - widget!
shirushizo
Самовар
**
Offline Offline

Сообщений: 196



« Ответ #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
Бывалый
*****
Online Online

Сообщений: 419


WWW
« Ответ #5 : Февраль 12, 2010, 22:09 »

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

VoiceTranslator - приложение, которое предоставляет возможности перевода и озвучки текстов.
http://kibsoft.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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