Russian Qt Forum
Июнь 15, 2024, 22:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Qt + Postgesql + символы апострофа и слеш  (Прочитано 15346 раз)
mutineer
Гость
« Ответ #15 : Июнь 09, 2013, 15:45 »

У меня тоже используется qsqltablemodel+qdatawidgetmapper,  просто вместо c:\log\name.log, у меня SQL - запрос, но в принципе ситуация такая же как и уважаемого isoul.zi....Вопрос как тогда сделать чтобы mapper "брал" текст и делал замену ' на \' и " на \"   как написал gil9red ?

Для  mutineer:

Экранировать через replace?

Телепаты в перманентном отпуске, надо сразу говорить такие вещи. Судя по доке для записи и чтения данных в виджет QDataWidgetMapper использует проперти, которое ему можно сказать при маппинге. Соответственно используя мой предыдущий комментарий и, например, replace, можно заэкранировать нужные символы
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #16 : Июнь 09, 2013, 16:01 »

Я что-то не пойму, если используется Мапер то как пользователь вообще запрос пишет?
Мапер всего-лишь отображает содержимое поля на виджет, а не запрос к БД
Записан

Юра.
isoul.zi
Гость
« Ответ #17 : Июнь 09, 2013, 16:04 »


Телепаты в перманентном отпуске, надо сразу говорить такие вещи. Судя по доке для записи и чтения данных в виджет QDataWidgetMapper использует проперти, которое ему можно сказать при маппинге. Соответственно используя мой предыдущий комментарий и, например, replace, можно заэкранировать нужные символы

можете ссылку(не нашел)? я собирался через делегат двигаться..
Записан
Figaro
Гость
« Ответ #18 : Июнь 09, 2013, 16:09 »


А как узнать что из этого параметры?

Что т вроде этого см Assistant:

Код:
Binding values using positional placeholders (version 1):

     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();
Binding values using positional placeholders (version 2):

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

Ответил только потому, что у самого были проблемы с PostgreSQL... Пришлось дебаггером иметь драйвер... Но это уже мои личные проблемы...
Записан
mutineer
Гость
« Ответ #19 : Июнь 09, 2013, 16:11 »


А как узнать что из этого параметры?

Что т вроде этого см Assistant:

Код:
Binding values using positional placeholders (version 1):

     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();
Binding values using positional placeholders (version 2):

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

Ответил только потому, что у самого были проблемы с PostgreSQL... Пришлось дебаггером иметь драйвер... Но это уже мои личные проблемы...

Ну это понятно в случае, если ты знаешь что за запрос. Но у ТС запрос полностью вводит пользователь, там хз что параметры, а что нет
Записан
mutineer
Гость
« Ответ #20 : Июнь 09, 2013, 16:12 »


Телепаты в перманентном отпуске, надо сразу говорить такие вещи. Судя по доке для записи и чтения данных в виджет QDataWidgetMapper использует проперти, которое ему можно сказать при маппинге. Соответственно используя мой предыдущий комментарий и, например, replace, можно заэкранировать нужные символы

можете ссылку(не нашел)? я собирался через делегат двигаться..

Ссылку на что?
Записан
mutineer
Гость
« Ответ #21 : Июнь 09, 2013, 16:19 »

Я что-то не пойму, если используется Мапер то как пользователь вообще запрос пишет?
Мапер всего-лишь отображает содержимое поля на виджет, а не запрос к БД

Похоже что запрос записывается в таблицу, а не выполняется. В чем смысл действа сего - тайна, покрытая мраком:)
Записан
isoul.zi
Гость
« Ответ #22 : Июнь 09, 2013, 16:22 »

Ну это понятно в случае, если ты знаешь что за запрос. Но у ТС запрос полностью вводит пользователь, там хз что параметры, а что нет

Я все таки считаю что вопрос не в этом - ТС , по его словам:
Пользователь через qplaintextedit пытается записать в таблицу Postgesql, составленный им SQL-запрос вида: select to_date('07.06.2013','DD.MM.RRRR') from DSA."TABLENAME"...
При попытке submit — ошибка, сообщающая что не нравятся символы апострофа и кавычек в запросе....
там не в параметрах дело, а то что составленный им запрос в  форме приложения сохраняется в базу PG без апострофов.

Ссылку на что?

Судя по доке для записи и чтения данных в виджет QDataWidgetMapper использует проперти, которое ему можно сказать при маппинге.
Записан
mutineer
Гость
« Ответ #23 : Июнь 09, 2013, 16:25 »

Ну это понятно в случае, если ты знаешь что за запрос. Но у ТС запрос полностью вводит пользователь, там хз что параметры, а что нет

Я все таки считаю что вопрос не в этом - ТС , по его словам:
Пользователь через qplaintextedit пытается записать в таблицу Postgesql, составленный им SQL-запрос вида: select to_date('07.06.2013','DD.MM.RRRR') from DSA."TABLENAME"...
При попытке submit — ошибка, сообщающая что не нравятся символы апострофа и кавычек в запросе....
там не в параметрах дело, а то что составленный им запрос в  форме приложения сохраняется в базу PG без апострофов.

Ссылку на что?

Судя по доке для записи и чтения данных в виджет QDataWidgetMapper использует проперти, которое ему можно сказать при маппинге.

1) Да, точно, думал сначала что в самом запросе надо параметры биндить

2) Не думаю что нужна ссылка на доку, она ведь гуглится проще, чем этот форум
Записан
isoul.zi
Гость
« Ответ #24 : Июнь 09, 2013, 17:11 »

Переопредели QPlainTextEdit и в геттере проперти, которую использует qdatawidgetmapper заэкранируй слеши

если честно у меня эт первый опыт работы с qdatawidgetmapper...не совсем понятно геттере проперти, которую использует qdatawidgetmapper
Записан
mutineer
Гость
« Ответ #25 : Июнь 09, 2013, 17:17 »

Почитай про Q_PROPERTY
Записан
zharkov1977
Гость
« Ответ #26 : Июнь 09, 2013, 20:12 »

Извините что отвечаю не сразу,  но у меня пользователь должен через интерфейс(qsqltablemodel+qdatawidgetmappe) составить(QPlaintext) и сохранить сам запрос в ячейку(text) таблицы Postgesql, и запрос пользователь может составить в принципе любой...

Да дело в том что при сохранении он сохраняет без апострофов, и слешей...как я уже писал ранее, то есть пользователь составляет запрос - у меня данный запрос должен обработаться приложением, а так получается что при сохранении теряется весь смысл  записи... :

select to_date(07.06.2013,DD.MM.RRRR) from DSA.TABLENAME

Приложение берет  из таблицы для обработки пользовательский запрос и соответственно валится из-за этих апострофов и кавычек...
Т.е. мне надо чтобы запрос как ввел пользователь со спецсимволами в QPlaintext - так его и записать без потери чего либо....

У меня тоже не очень большой опыт с qdatawidgetmappe, и не очень понимаю как использовать в данном случае Q_PROPERTY
Записан
mutineer
Гость
« Ответ #27 : Июнь 09, 2013, 20:46 »

qdatawidgetmapper для забирания данных из виджета использует QObject::зroperty(...). При этом вызывается метод, указанный в секции READ макроса Q_PROPERTY. Вот в этом методе экранирование и выполняй
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #28 : Июнь 10, 2013, 02:21 »

Так вроде соль проявляется на поверхности.
zharkov1977 давай разбирать твою систему по косточкам:
1) В БД всё помещается как надо, т.к. Мапер туп совершенно, что пользователь написал, то он и сохранил в БД.
Т.е. если пользователь ввёл кавычки, то в БД они и сохранятся.

2)При чтении из БД строки запроса и последующего выполнения этого запроса возникает казус с кавычками.
нужно разобратся, как сейчас реализовано выполнение запроса.
Записан

Юра.
zharkov1977
Гость
« Ответ #29 : Июнь 10, 2013, 06:57 »

Спасибо за помощь , но решилось все установкой драйвера PostgreSQL Unicode, ранее был PostgreSQL ANSI....
т.е нормально обрабатываются и апострофы и слеши...
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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