Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QSqlQuery и экранирование символов. 
V
    Опции темы
ssstttuuufff
Дата 6.5.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



Можно ли как-то средствами Qt экранировать кавычки и т.д. ?



PM MAIL   Вверх
JackYF
Дата 6.5.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(ssstttuuufff @  6.5.2008,  17:51 Найти цитируемый пост)
Можно ли как-то средствами Qt экранировать кавычки и т.д. ?

Поиск по разделу рулит, уже поднимался подобный вопрос. Если вкратце, то QSqlQuery::bindValue экранирует нежелательные символы.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ssstttuuufff
Дата 6.5.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



JackYF, 

Извиниюсь. Забыл написать, что я пользуюсь AddBindValue.
Похоже ошибка не в экранировании символов, а в том, что сложные строки QString почему-то не записывааютя полностью. Т.е. от фразы My name is Boris в QTextStream помешается только My.
PM MAIL   Вверх
nickless
Дата 6.5.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Цитата(ssstttuuufff @  6.5.2008,  18:06 Найти цитируемый пост)
а в том, что сложные строки QString почему-то не записывааютя полностью. Т.е. от фразы My name is Boris в QTextStream помешается только My

Код в студию


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
ssstttuuufff
Дата 6.5.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



Такс. Похоже всё-таки дело не в QString, а именно в экранировании  кавычек. Там где в тексте встречается ", запрос криво работает. В частности есть такой вот текст:

Вы можете спросить, а каким вообще образом он раскрывает преступления. Ведь, глядя на него, трудно представить, что он может самостоятельно сходить в магазин. Парадокс, однако детектив Монк работает намного продуктивнее, чем полиция Сан-Франциско.

Смотрите первую серию третьего сезона сериала "Дефективный детектив". Мистер Монк отправляется покорять Нью-Йорк, попутно расследуя зверское убийство латвийского посла в США


А получаю в базе:

". Мистер Монк отправляется покорять Нью-Йорк, попутно расследуя зверское убийство латвийского посла в США.

Вот так выполняется запрос:

Код

    sqlQuery->prepare("INSERT INTO items (itm_title, itm_link, itm_description, itm_author, itm_pubdate)"
                           "VALUES (?, ?, ?, ?, ?)"
                           );
                          
    sqlQuery->bindValue(title);
    sqlQuery->bindValue(link);
    sqlQuery->bindValue(description);
    sqlQuery->bindValue(author);
    sqlQuery->bindValue(pubdate);
    
    if (sqlQuery->exec())
        return true;
    else
    {
        QMessageBox::warning(0, tr("Query Error"), sqlQuery->lastQuery() + "\n\n" + sqlQuery->lastError().text());
        return false;
    }


PM MAIL   Вверх
SABROG
Дата 6.5.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Экранируется только одиночный апостроф ' превращаясь в двойной. Но вообще если встречается такое: INSERT .... '..."Дефективный детектив"...'

то обычно проблем не возникает.

Это сообщение отредактировал(а) SABROG - 6.5.2008, 19:49


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ssstttuuufff
Дата 6.5.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



Ну я не знаю уже, что пробовать. Капнул глубже. Весь этот текст, который я пытаюсь загнать в БД, я получаю из xml файла. Думал, что-то в парсере не так работает. Но вроде всё работает нормально. Для того текста (см. пример выше) парсер выдаёт в консоль это: 

Цитата

Вы можете спросить, а каким вообще образом он раскрывает преступления. Ведь, глядя на него, трудно представить, что он может самостоятельно сходить в магазин. Парадокс, однако детектив Монк работает намного продуктивнее, чем полиция Сан-Франциско.

Смотрите <a href="https://novafilm.tv/details.php?id=5848">первую серию</a> третьего сезона сериала "Дефективный детектив". Мистер Монк отправляется покорять Нью-Йорк, попутно расследуя зверское убийство латвийского посла в США.



Вроде всё нормально. Притом этот текст я вывожу из уже созданной QString переменной (см. код ниже), а это значит, что текст в ней записан вроде как правильно.

Код

xmlDataElement = xml.text().toString(); 
itemDescription = xmlDataElement;
std::cout << qPrintable(itemDescription) << "\n\n"; 


Блин, но почему в базу не заносится тоже самое ?? 
PM MAIL   Вверх
SABROG
Дата 6.5.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Максимальный размер у колонки в базе данных какой установлен ? Какая база данных MySQL ?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ssstttuuufff
Дата 6.5.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



SABROG, 

БД  - SQLite3. Поле TEXT без ограничений на размер.
PM MAIL   Вверх
ssstttuuufff
Дата 6.5.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



Кстати с латинецей такой лажи нет. Вроде всё нормально в базу пишется. 
PM MAIL   Вверх
nickless
Дата 6.5.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 13
Всего: 181



Какой версии SQLite?

Цитата(ssstttuuufff @  6.5.2008,  21:25 Найти цитируемый пост)
Кстати с латинецей такой лажи нет

В какой кодировке база?


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
SABROG
Дата 6.5.2008, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



SQLITE 3.5.6

База данных в UTF-8

Таблица:

Цитата

CREATE TABLE [test] ([txt] TEXT);


Запрос

Код

INSERT INTO test (txt) VALUES('Вы можете спросить, а каким вообще образом он раскрывает преступления. Ведь, глядя на него, трудно представить, что он может самостоятельно сходить в магазин. Парадокс, однако детектив Монк работает намного продуктивнее, чем полиция Сан-Франциско.

Смотрите первую серию третьего сезона сериала "Дефективный детектив". Мистер Монк отправляется покорять Нью-Йорк, попутно расследуя зверское убийство латвийского посла в США')


Все отлично занеслось в полной мере. Причем оба варианта и с сылкой на новафильм и без.

Возможно действительно косяк с кодировкой, если символы кодируются двубайтовыми значениями и среди них есть символы 0x0, 0x1 и т.п., то база данных может расценить их как конец EOF.

Это сообщение отредактировал(а) SABROG - 6.5.2008, 23:14


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ssstttuuufff
Дата 6.5.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



nickless, 

UTF-8
PM MAIL   Вверх
SABROG
Дата 6.5.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(ssstttuuufff @ 6.5.2008,  23:13)
nickless, 

UTF-8

В какой кодировке xml ?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
ssstttuuufff
Дата 6.5.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.3.2008

Репутация: нет
Всего: нет



SABROG, 

так у меня тоже нормально работает. Может быть дело в placeholder'ах ? Может быть надо запросы все делать без bindValue и т.д. ?

Добавлено через 52 секунды
SABROG, 

windows-1251
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.2169 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.