crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 28.5.2020, 0:02