Обнаружена проблема с% n ***% n в доступном для записи сегменте *** C ++ i Qt - PullRequest
0 голосов
/ 23 сентября 2010

Обнаружена проблема с% n *% n в доступном для записи сегменте * C ++ i Qt

У меня есть программа, которая обрабатывает большие данные, которые нельзя изменить.В одном файле мы встречаем «100% na» и останов приложения.

Когда я проверил его с помощью отладчика, он возвращает *% n в обнаруженном доступном для записи сегменте *.

Я не могу изменить видимые эти данные, пользователь должен видеть "100% нет".Я думал о вставке некоторых пробелов, отличных от пробела после%.

Переписывать целые приложения - не главное.Он работает на Windows и Linuks.

В настоящее время проблема в этом коде.Я проверил это в других местах, и это было то же самое.Переменные - QStrings.

QSqlQuery query;

query.exec("insert into table_name ("+variable_with_columns_names+" values ("+variable_with_data_to_insert+");");

У вас есть идеи, как избежать этого?

edit

Подготовить запрос решеннымпроблема в этом месте.Но это ломает в других точках.Обновить, Выбрать ..., где ... = '100% нет' (как переменная), создание отчетов и другие вещи.Более того, эти данные используются как минимум 5 модулями, каждый из которых использует более 5 таблиц данных.Поэтому я подожду когда-нибудь, если у кого-нибудь будет другое решение.

PS.Еще один вопрос: почему «% n» интерпретируется как «% n», а это не так?

Забавно, если я изменю «100% na» на «100 %% na», я получув базе данных "100 %% na", когда его следует изменить на "100% na".

Ответы [ 2 ]

1 голос
/ 23 сентября 2010

Используйте prepare для подготовки запроса.Затем введите значения, используя bindValue.Подготовленные выражения всегда следует использовать в таких сценариях, поскольку они обрабатывают экранирование специальных символов для вас.

0 голосов
/ 23 сентября 2010
QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (:id, :forename, :surname)");
     query.bindValue(0, 1001);
     query.bindValue(1, "Bart");
     query.bindValue(2, "Simpson");
     query.exec();

 QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (:id, :forename, :surname)");
     query.bindValue(":id", 1001);
     query.bindValue(":forename", "Bart");
     query.bindValue(":surname", "Simpson");
     query.exec();

  QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (?, ?, ?)");
     query.bindValue(0, 1001);
     query.bindValue(1, "Bart");
     query.bindValue(2, "Simpson");
     query.exec();

QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (?, ?, ?)");
     query.addBindValue(1001);
     query.addBindValue("Bart");
     query.addBindValue("Simpson");
     query.exec();

любая из этих справок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...