Russian Qt Forum

Qt => Базы данных => Тема начата: Пантер от Сентябрь 24, 2007, 18:11



Название: Как узнать реальную sql-строку?
Отправлено: Пантер от Сентябрь 24, 2007, 18:11
Сначала код
Код:
QSqlQuery* qsqQuery=new QSqlQuery();
qsqQuery->prepare("INSERT INTO table (ID) VALUE (:ID);")
qsqQuery->bindValue(":ID",iID);
qsqQuery->exec();
QMessageBox::critical(this, "",qsqQuery->lastQuery());
QMessageBox::critical(this, "",qsqQuery->executedQuery());
В первом случае получаю INSERT INTO table (ID) VALUE (:ID);
Во втором - INSERT INTO table (ID) VALUE (?);
Как получить реальную кверю? Т.е. INSERT INTO table (ID) VALUE (10);


Название: Re: Как узнать реальную sql-строку?
Отправлено: Вячеслав от Сентябрь 24, 2007, 19:22
Реальная вторая ;) Щаз никто из нормальных серверов параметры в запросе не гогняет(если явно bind указан)
Таки если хош plaintext Qstring(" insert into xxxx values(%1,%2 %3)").arg().arg().arg()
Но забодаешься с ескейпингом строк и даты :(


Название: Re: Как узнать реальную sql-строку?
Отправлено: Пантер от Сентябрь 24, 2007, 20:03
Млин. У меня просто что-то глючит и запросом, а что не просеку никак. В птице пытаюсь добавить строку, где первое поле через генератор, а он не срабатывает и строка добавляется с нулевым номером, при втором добавлении орёт что такой номер уже есть.
Ну, всё равно спасибо.


Название: Re: Как узнать реальную sql-строку?
Отправлено: Вячеслав от Сентябрь 24, 2007, 20:15
Млин. У меня просто что-то глючит и запросом, а что не просеку никак. В птице пытаюсь добавить строку, где первое поле через генератор, а он не срабатывает и строка добавляется с нулевым номером, при втором добавлении орёт что такой номер уже есть.
Ну, всё равно спасибо.

1) Для птица есть чудная конструкция insert returning .... Но в qt она не работает :(
2) как добавляешь - код покажи
3) Вариант тригер на поле повесить ? Это чтоб нула небыло ?
4) SP сгородить ? Ы ?


Название: Re: Как узнать реальную sql-строку?
Отправлено: Пантер от Сентябрь 24, 2007, 20:22
2. Код очень большой и не красивый. Завтра почишю и выложу.
4. А что это?


Название: Re: Как узнать реальную sql-строку?
Отправлено: Tonal от Сентябрь 24, 2007, 20:41
SP - Сохранённая процедура
Процедура на сервере, которая вставит запись и вернёт тебе ID.
IBExpert умеет такие генерить по таблице.


Название: Re: Как узнать реальную sql-строку?
Отправлено: Пантер от Сентябрь 26, 2007, 11:33
Разобрался. Просто я указывал генератор в bindValue, а так, наверное, нельзя делать. Прописал генератор наглухо в запросе и все пошло.


Название: Re: Как узнать реальную sql-строку?
Отправлено: Вячеслав от Сентябрь 26, 2007, 12:58
Разобрался. Просто я указывал генератор в bindValue, а так, наверное, нельзя делать. Прописал генератор наглухо в запросе и все пошло.
IHMO лучшее его(генератор) из тригера звать ;) А явно Id в запросе указывать для разных специальных вещей ;) Y


Название: Re: Как узнать реальную sql-строку?
Отправлено: Пантер от Сентябрь 26, 2007, 18:12
Можно пример как правильно делать?
И еще вопрос:
Есть таблица с блоб полем (которое я выставил как text), база создана с настройкой на ютф8. Как правильно записать в блоб поле QStringList? Сейчас делал так:
qsqQuery->bindValue(":textpole",qsqList->join("\n")); - записывается не в ютф кодировке
qsqQuery->bindValue(":textpole",qsqList->join("\n").toUtf8()); - при считывании приходится извращаться с fromUtf8().
Так и нужно или я неверно подхожу?


Название: Re: Как узнать реальную sql-строку?
Отправлено: Tonal от Сентябрь 26, 2007, 19:43
Код:
CREATE TRIGGER DOC_STATUS_BI FOR DOC_STATUS
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.ID is null) then
    new.ID = gen_id(GEN_DOC_STATUS_ID, 1);
end


Название: Re: Как узнать реальную sql-строку?
Отправлено: Пантер от Сентябрь 27, 2007, 11:38
Охренеть... Как много я еще не знаю. :(