crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Проблема с подстановкой в запрос SELECT даты (MS SQL).
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Ay49Mihas Дата 17.6.2010, 5:59
  Я делаю так в таких же условиях:

bindValue(":value", startDate->date().toString("yyyyMMdd"));
Litkevich Yuriy Дата 12.4.2010, 13:34
 
Цитата(silver47 @ 12.4.2010, 15:28) *
Ну в общем понятно, спасибо, буду в текст самого запроса вставлять строку с текстом, содержащую дату. Не красиво, зато работает
попробуй вариант про который я говорил (приведение типа)
silver47 Дата 12.4.2010, 11:28
 
searchQuery.addBindValue(startDate->date());
searchQuery.addBindValue(stopDate->date());


QODBCResult::exec: unable to bind variable: " [Microsoft][ODBC SQL Server Driver]Дополнительная возможность не реализована"

searchQuery.bindValue(0, startDate->date());
searchQuery.bindValue(1, stopDate->date());


QODBCResult::exec: unable to bind variable: " [Microsoft][ODBC SQL Server Driver]Дополнительная возможность не реализована"

Ну в общем понятно, спасибо, буду в текст самого запроса вставлять строку с текстом, содержащую дату. Не красиво, зато работает :(
molchanoviv Дата 12.4.2010, 11:01
  Оно так и не должно собираться. Либо используй
searchQuery.bindValue(0, startDate->date());
searchQuery.bindValue(1, stopDate->date());

либо
searchQuery.addBindValue(startDate->date());
searchQuery.addBindValue(stopDate->date());

Я использую второй вариант.
silver47 Дата 12.4.2010, 10:55
  попробуй для начала заменить подстоновочные значения конкретными данными, и закоментируй bindValue
Просто, чтобы проверить сам запрос.


попробовал, запрос верный.

Позиционнная подстановка:

QString q("SELECT ..... всякое безобразие ");

q += "(dbo.violations.DOCDATE >= '?') and (dbo.violations.DOCDATE <= '?')";
q += " ORDER BY dbo.violations.DOCDATE DESC";
searchQuery.prepare(q);
searchQuery.bindValue(startDate->date());
searchQuery.bindValue(stopDate->date());


Ошибка при компиляции widget.cpp:343: error: no matching function for call to 'QSqlQuery::bindValue(QDate)'

Зачем создаю промежуточную строку с текстом запроса? Запрос динамический, начало у него одинаковое, а вот WHERE меняются там на условиях.

Ну чтож, если не получиться с позиционной, никто не помешает мне непосредственно в текст запроса втыкать дату, хотя и не красиво и коряво будет :(


molchanoviv Дата 12.4.2010, 8:43
 
Цитата(silver47 @ 12.4.2010, 9:26) *
У меня не оракл, а Microsoft SQL Server 2005.


Зато драйвер QODBC.

Litkevich Yuriy Дата 12.4.2010, 8:39
 
Цитата(silver47 @ 12.4.2010, 12:26) *
У меня не оракл, а Microsoft SQL Server 2005.
тебе цитату привели не спроста, прочитай её всю
Цитата(silver47 @ 12.4.2010, 12:26) *
Как перестроить? конвертить дату в текст?
попробуй для начала заменить подстоновочные значения конкретными данными, и закоментируй bindValue
Просто, чтобы проверить сам запрос.

Если всё в порядке, то используй вопросики (позиционную подстановку)

вообще я думаю, что дата должна в каком-то конкретном виде в запрос подставлятся. Например как строка. А у тебя она напрямую помещается.
Может быть нужно что-то вроде этого:
CAST (':startstamp' AS TIMESTAMP)


silver47 Дата 12.4.2010, 8:26
 
Цитата(molchanoviv @ 12.4.2010, 11:19) *
Из ассистента:

Цитата
Oracle databases identify placeholders by using a colon-name syntax, e.g :name. ODBC simply uses ? characters. Qt supports both syntaxes, with the restriction that you can't mix them in the same query.


Попробуй перестроить запрос на использование запроса без параметров.

У меня не оракл, а Microsoft SQL Server 2005. Как перестроить? конвертить дату в текст?
molchanoviv Дата 12.4.2010, 8:19
  Из ассистента:

Цитата
Oracle databases identify placeholders by using a colon-name syntax, e.g :name. ODBC simply uses ? characters. Qt supports both syntaxes, with the restriction that you can't mix them in the same query.


Попробуй перестроить запрос на использование "запроса без параметров".
silver47 Дата 12.4.2010, 5:24
  Доброго времени суток, с толкнулся со следующей проблемой, при выполнении запроса, необходимо учитывать границы дат, в последствии нужно будет добавлять записи с нужной датой, думаю там будет то же самое :(.


QSqlQuery searchQuery;
QString q("SELECT dbo.violations.SSNO, dbo.DEPT.NAME, ... FROM dbo.violations INNER JOIN dbo.DEPT ON (dbo.violations.DEPT_ID = dbo.DEPT.ID) WHERE ");

q += "(dbo.violations.DOCDATE >= :start) and (dbo.violations.DOCDATE <= :stop)";
searchQuery.bindValue(":start", startDate->date());
searchQuery.bindValue(":stop", stopDate->date());


при выполнении запроса: QODBCResult::exec: unable to bind variable: " [Microsoft][ODBC SQL Server Driver]Дополнительная возможность не реализована"

:(
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 16.7.2025, 16:49