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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: вставка строк в базу данных с кавычками (как проескейпить ?)  (Прочитано 4762 раз)
burunduk
Гость
« : Март 15, 2007, 00:26 »

не могу что-то найти решения

QSqlDatabase::database().exec(query);

где query строка и формируется динамически

использовать prepare() + addBindValue() ?
что-то попробывал так, код возврата - истина, а база не меняется
я делаю инсерт запрос
Записан
crocus
Гость
« Ответ #1 : Март 15, 2007, 01:41 »

Такая же ерунда была,  попробуй использовать не query.exec, а через модель типа так:
Код:

begin = ( "INSERT INTO  " + agency + "(agency_name, flats_date, room_cod, sale_name"
 ", region_name, street_name, So, Sz, Sk, flats_floor, flats_floorest"
 ", material_short, plan_short, wc_short, balcon_short, flats_price, flats_cod, flats_tel "
 ", type_s, side_name, cond_short, agent_name, flats_confid, flats_pm2, flats_comments, sale, flats_ex) SELECT g.agency_name, f.flats_date, r.room_cod, k.sale_name"
 ", a.region_name, s.street_name, f.So, f.Sz, f.Sk, f.flats_floor, f.flats_floorest"
 ", m.material_short, p.plan_short, w.wc_short, b.balcon_short, (f.flats_price + " + txtMarket +
 ")*" + txtCurss + ", f.flats_cod, f.flats_tel "
 ", t.type_s, d.side_name, l.cond_short, n.agent_name, f.flats_confid, (f.flats_price/f.So)*" + txtCurss + ", f.flats_comments, f.sale, f.flats_ex "
 "FROM tbl_flats f, tbl_type t, tbl_sale k, tbl_room r," + tblroom + tblregion + tblstreet + tblplan +
 "tbl_region a, tbl_street s, tbl_wc w, tbl_balcon b, tbl_side d, tbl_cond l," + tblwc + tblbalcon +
 tblmaterial + tblagenci + "tbl_material m, tbl_agency g, tbl_agent n, tbl_plan p "
 "WHERE f.type_cod = t.type_cod  AND f.room_cod = r.room_cod " + room + balcon + material + agenci +
 " AND f.sale_cod = k.sale_cod AND f.street_cod = s.street_cod" + region + street + plan + wc +
 " AND s.region_cod = a.region_cod  AND f.agent_cod = n.agent_cod AND n.agency_cod = g.agency_cod"
 " AND f.wc_cod = w.wc_cod AND f.plan_cod = p.plan_cod AND f.balcon_cod = b.balcon_cod"
 " AND f.material_cod = m.material_cod AND f.side_cod = d.side_cod AND f.cond_cod = l.cond_cod"
modelQuery->setQuery( begin );
Записан
burunduk
Гость
« Ответ #2 : Март 15, 2007, 10:34 »

Нифига так не ескейпит:

"ERROR:  syntax error at or near "sos" at character 115
QPSQL: Unable to create query"


'sos' пишу в текстовом поле в одинарных кавычках

собираю на Qt 4.1.4
Записан
Вудруф
Гость
« Ответ #3 : Март 15, 2007, 14:17 »

/'
Или связанные переменные
Записан
alexis
Гость
« Ответ #4 : Март 15, 2007, 21:20 »

Ну а что мешает в генерируемый запрос вместо реальных данных напихать плейсхолдеров?
И попутно, вести массив данных к  ним.

что-то в этом роде, только у меня тут полностью запрос динамически собирается.

Код:

wheres.append( QString( "( %1 = ? )" ).arg( name ) );
binds.append( *it );

---
sql = QString( "SELECT %1 FROM %2" ).arg( fileds.join(", ") ).arg( table );
sql.append(" WHERE ");
sql.append( Object::access() );

if ( wheres.count() ) {
    sql.append(" AND ( ");
    sql.append( wheres.join( " " ) );
    sql.append( " ) " );
}

sql.append( groups );
sql.append( orders );
sql.append( limit );
sql.append( offset );

if ( opt.contains("explain") )
    explainQuery( sql );

QSqlQuery query( db );
query.prepare( sql );

for( QList<QVariant>::Iterator it = binds.begin(); it != binds.end(); ++it )
                        query.addBindValue( (*it) );
 
[/code]
Записан
burunduk
Гость
« Ответ #5 : Март 16, 2007, 12:45 »

спасибо за поддержку )

prepare() + addBindValue() + exec()
и всё зашибись, просто тупил уже к концу рабочего дня :-)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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