Russian Qt Forum

Qt => Общие вопросы => Тема начата: kibsoft от Февраль 12, 2010, 02:02



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


Название: Re: QString максимальный размер :(
Отправлено: break от Февраль 12, 2010, 05:00
Никак нельзя ваш вариант перевести на QSqlQuery.prepare() и вызов QSqlQuery.exec() много раз с разными параметрами (bindValue), вместо формирования оч. длинной строки?


Название: Re: QString максимальный размер :(
Отправлено: shirushizo от Февраль 12, 2010, 05:21
Никак нельзя ваш вариант перевести на QSqlQuery.prepare() и вызов QSqlQuery.exec() много раз с разными параметрами (bindValue), вместо формирования оч. длинной строки?
И собствено, параметры можно записывать в QStringList и обрабатывать в цикле.(либо QSqlQuery::bindValue, либо QString::arg).
P.s: Если честно не видел SQL-запросов в 192КБ  :-\


Название: Re: QString максимальный размер :(
Отправлено: SABROG от Февраль 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);
 


Название: Re: QString максимальный размер :(
Отправлено: shirushizo от Февраль 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);
 

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


Название: Re: QString максимальный размер :(
Отправлено: kibsoft от Февраль 12, 2010, 22:09
SABROG, спасибо! Увеличил производительность программы в сто с лишним раз :)