Russian Qt Forum

Qt => Базы данных => Тема начата: kadr от Ноябрь 06, 2009, 14:05



Название: не та кодировка
Отправлено: kadr от Ноябрь 06, 2009, 14:05
Привет всем есть запрос в mysql
SQL = QString("SELECT code,name,zavod,price,kolvo,srokdo, FROM protek WHERE name LIKE '%1'")
 .arg(ui->korzina->item(i,0)->text().trimmed());
q.exec(SQL);
а вот ошибка
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM protek WHERE name LIKE '????????? ???????« ?­??????? ?????? ?????? ??/?? 20' at line 1 QMYSQL: Unable to execute query"
Вопрос:
Как мне перекодировать вот это ????????? ???????« ?­??????? ?????? ?????? ??/?? 20 в нормальный вид, база находиться в кодировке cp1251!  
Тут типа знаки вопросов одни а не смайлики.
И как мне узнать в какой кодировке запись (????????? ???????« ?­??????? ?????? ?????? ??/?? 20) находиться в данный момент?


Название: Re: не та кодировка
Отправлено: Aleksey_Zh от Ноябрь 06, 2009, 14:09
Привет! Убери последнюю запятую перед from


Название: Re: не та кодировка
Отправлено: Aleksey_Zh от Ноябрь 06, 2009, 14:15
А вообще для проверки запросов вместе с Qt идет полезная дёмка - SQL brouser называется. Вставляй в нее запрос но с готовыми данными. А свои  данные всегда в правильный запрос у себя в программе подставишь


Название: Re: не та кодировка
Отправлено: kadr от Ноябрь 06, 2009, 14:22
Привет! Убери последнюю запятую перед from
Ошибка вылетать перестала, но данные все равно не достаются от туда!
 SQL = QString("SELECT code,name,zavod,price,kolvo,srokdo FROM protek WHERE name LIKE '%1'")
          .arg(ui->korzina->item(i,0)->text().trimmed());
        q.exec(SQL);
        qDebug() << ui->korzina->item(i,0)->text().trimmed() << "|" <<q.value(0).toInt() <<q.value(1).toString() << q.value(2).toString() << q.value(5).toString();
SQL.clear();
SQL = QString("INSERT INTO zakaz VALUES (%1, '%2', '%3', %4, %5, '%6', '%7','%8')")
.arg(q.value(0).toInt())
.arg(ui->korzina->item(i,0)->text().trimmed())
.arg(q.value(2).toString())
.arg(ui->korzina->item(i,3)->text().trimmed())
.arg(ui->korzina->item(i,1)->text().trimmed())
.arg(q.value(5).toString())
.arg(ui->korzina->item(i,4)->text().trimmed())
.arg(date.currentDate().toString("dd.MM.yyyy"));
z.exec(SQL);
Вывод qDebug() << ui->korzina->item(i,0)->text().trimmed() << "|" <<q.value(0).toInt() <<q.value(1).toString() << q.value(2).toString() << q.value(5).toString();
"ВАЛЕРИАНЫ ЭКСТРАКТ ТАБ П/О 20 МГ №10 ДАЛЬХИМФАРМ-Р" | 0 "" "" ""
Выводит только то что у меня в таблице, а из запроса ничего не выводит!


Название: Re: не та кодировка
Отправлено: Aleksey_Zh от Ноябрь 06, 2009, 14:28
У тебя тут 2 запроса. Не выводит по какому именно?


Название: Re: не та кодировка
Отправлено: Aleksey_Zh от Ноябрь 06, 2009, 14:39
Кстати, ты не пробовал выбирать начальное там, может быть следующее значение из полученного набора данных?


Название: Re: не та кодировка
Отправлено: kadr от Ноябрь 06, 2009, 14:49
У тебя тут 2 запроса. Не выводит по какому именно?
Из описанного ниже следует, что из первого запроса вытаскивается все описанные поля сode,name,zavod,price,kolvo,srokdo, где имя(название) ui->korzina->item(i,0)->text().trimmed(). И подставляется во второй запрос .arg(q.value(0).toInt())


Название: Re: не та кодировка
Отправлено: Aleksey_Zh от Ноябрь 06, 2009, 14:57
Мне кажется ты просто не вышел на набор данных. Тоесть данные скачиваешь, а выбираешь их неправильно


Название: Re: не та кодировка
Отправлено: MoPDoBoPoT от Ноябрь 06, 2009, 18:23
Aleksey_Zh прав. Ты делаешь запрос, но не перемещаешь "указатель" на данные. После запроса его текущая позиция QSql::BeforeFirstRow. Надо воспользоваться одним из методов для перемещения по записям: next(), first(), last(), seek() (зависит от задачи). В твоем случае можно так:
Код
C++ (Qt)
...
q.exec(SQL);
if (q.next()) { //esli est' dannie, to rabotaem s nimi...
  qDebug() << ui->korzina->item(i,0)->text().trimmed() << "|" <<q.value(0).toInt() <<q.value(1).toString() << q.value(2).toString() << q.value(5).toString();
  ...
}
...
 
А из второго запроса (это который INSERT) ты вообще ничего не сможешь вытащить, так как не используешь  связанные переменные.
В общем, читай документацию, без нее никуда.