Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Здравствуйте.
Я делаю на С++ программу, которая обращается к MS SQL 2005.

Не могу понять почему не работает вот эта последовательность:

-- в следующих 3-х строках просто присваивается время в переменную. Код работает 100% :
query->SQL->Add("SET DATEFORMAT dmy");
query->SQL->Add("DECLARE @dt datetime");
query->SQL->Add("SET @dt=convert(datetime, '"+dtt+"', 103)  ");

-- а вот это не отрабатывает:
 query->SQL->Add("UPDATE trains SET dRocket = @dt, rocket="+label+", tara="+tara+", nRocket="+number+" where id = " + idl);
-- там label, tara, number и idl - это переменные из кода на С++

Пишет вот такое :
автор
'Incorrect syntax near ',''


Что здесь не так?
8 апр 13, 12:25    [14150581]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
VitalikBV,

Покажите текст запроса, который передаётся в SQL Server.
8 апр 13, 12:31    [14150624]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Glory
Member

Откуда:
Сообщений: 104760
VitalikBV
там label, tara, number и idl - это переменные из кода на С++

Текстовые ? Которые содержат любые символы, включая туже запутую ?
8 апр 13, 12:32    [14150641]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
VitalikBV,

интересно, а откуда мы знаем типы Ваших полей?
Например, если rocket - varchar(...), то есть ли апострофы в начале и конце label?
И т.п.
8 апр 13, 12:32    [14150643]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
VitalikBV
Пишет вот такое :
автор
'Incorrect syntax near ',''
это еще фигня
а вот если случится Внедрение_SQL-кода то это уже будет серьезно

ЗЫ а зачэм дату в БД текстом хранить? хранили бы как дату, и преобразований не понадобилось бы
8 апр 13, 12:39    [14150690]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
В таблице интересующие поля вот таких типов:
drocket - datetime
rocket- int
tara - int
nRocket - int

А вот значения которые присваиваются:
@dt - здесь дата, здесь все ОК
label= "1032",тип string.Как я понимаю оно должно работать хоть я его и в int закидываю(поле rocket)
tara=null, тип string
number=null, тип string,
idl="1", String

Ну вот такие дела.
8 апр 13, 13:01    [14150845]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Glory
Member

Откуда:
Сообщений: 104760
VitalikBV
Ну вот такие дела.

Полный текст сценария _полученный_ сервером будет опубликован ?
8 апр 13, 13:02    [14150869]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
VitalikBV
В таблице интересующие поля вот таких типов:
drocket - datetime
rocket- int
tara - int
nRocket - int

А вот значения которые присваиваются:
@dt - здесь дата, здесь все ОК
label= "1032",тип string.Как я понимаю оно должно работать хоть я его и в int закидываю(поле rocket)
tara=null, тип string
number=null, тип string,
idl="1", String

Ну вот такие дела.
Дык, вместо number надо строку 'NULL' передавать. И вместо tara тоже.
А передаётся, небось, пустая строка?
8 апр 13, 13:03    [14150879]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
никак не могу понять, что такое "+dtt+"
8 апр 13, 13:07    [14150906]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
а, блин, это подсветилось так на форуме
8 апр 13, 13:09    [14150921]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Паганель
а, блин, это подсветилось так на форуме
Если б нам писали на T-SQL, а не на C++, было бы проще.
Но Виталик себя не утруждает...
8 апр 13, 13:12    [14150940]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
VitalikBV
Ну вот такие дела.

Полный текст сценария _полученный_ сервером будет опубликован ?


Не совсем понимаю о чем речь, но ниже подставил значения переменных в запрос.
Или может можно сценарий как-то посмотреть в момент обращения приложения к БД ?
8 апр 13, 13:28    [14151060]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Дык, вместо number надо строку 'NULL' передавать. И вместо tara тоже.
А передаётся, небось, пустая строка?

Да, там в переменных содержится значения NULL, вроде без кавычек.
Но вроде бы должно так работать. Возможно ошибаюсь.
8 апр 13, 13:30    [14151077]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
iap
Паганель
а, блин, это подсветилось так на форуме
Если б нам писали на T-SQL, а не на C++, было бы проще.
Но Виталик себя не утруждает...


Вот как выглядело бы на T-SQL:
UPDATE trains SET dRocket = @dt, rocket="1032", tara=NULL, nRocket=NULL where id = "1"
8 апр 13, 13:31    [14151084]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
VitalikBV
Или может можно сценарий как-то посмотреть в момент обращения приложения к БД ?
Да, в профайлере нужно посмотреть, что же на самом деле передаётся на сервер.
8 апр 13, 13:31    [14151087]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Glory
Member

Откуда:
Сообщений: 104760
VitalikBV
Не совсем понимаю о чем речь,

А том, что "сборка" скрипта из переменных черевата элементарными ошибками

VitalikBV
но ниже подставил значения переменных в запрос.

подставил значения не означает получил синтакисчески верный текст команды

VitalikBV
Или может можно сценарий как-то посмотреть в момент обращения приложения к БД ?

Именно

ЗЫ
Откройте для себя параметры
8 апр 13, 13:32    [14151088]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Гость333
Member

Откуда:
Сообщений: 3683
VitalikBV
Вот как выглядело бы на T-SQL:
UPDATE trains SET dRocket = @dt, rocket="1032", tara=NULL, nRocket=NULL where id = "1"

Строковые константы в T-SQL обрамляют апострофами
'1032'
8 апр 13, 13:33    [14151107]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Glory
Member

Откуда:
Сообщений: 104760
VitalikBV
Вот как выглядело бы на T-SQL:
UPDATE trains SET dRocket = @dt, rocket="1032", tara=NULL, nRocket=NULL where id = "1"

Это вы так думаете или где то увидели ?
8 апр 13, 13:34    [14151111]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Непосредственно после сборки строки скл получите ее буквальное значение в дебаггере и переклейте в окно серверной струдии. Попробуйте проверить синтаксис и выполнить. Многие заппросы отпадут.

Т.е. какая она ДОЛЖНА быть, по вашему мнению, не имеет никакой ценности. Какая она фактически собралась в коде - в таком виде ее в серверную студию.
8 апр 13, 13:36    [14151122]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
alexeyvg
VitalikBV
Или может можно сценарий как-то посмотреть в момент обращения приложения к БД ?
Да, в профайлере нужно посмотреть, что же на самом деле передаётся на сервер.

А можно подробнее,как это сделать?
8 апр 13, 13:40    [14151158]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
VitalikBV
Не совсем понимаю о чем речь,

Откройте для себя параметры

Не понял о чем вы.
Если про то что можно параметры передавать, то я знаю - там дата параметром передается.
8 апр 13, 13:41    [14151164]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Glory
Member

Откуда:
Сообщений: 104760
VitalikBV
Если про то что можно параметры передавать, то я знаю - там дата параметром передается.

В вашем скрипте нет ни одного параметра.
8 апр 13, 13:42    [14151173]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Программист-Любитель
Непосредственно после сборки строки скл получите ее буквальное значение в дебаггере и переклейте в окно серверной струдии. Попробуйте проверить синтаксис и выполнить. Многие заппросы отпадут.

Т.е. какая она ДОЛЖНА быть, по вашему мнению, не имеет никакой ценности. Какая она фактически собралась в коде - в таком виде ее в серверную студию.


Получается я смотрю в дебаггере строку запроса, но оно не показывает ее. Может из-за ограниченности C++ Builder.
8 апр 13, 13:43    [14151181]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
VitalikBV
Если про то что можно параметры передавать, то я знаю - там дата параметром передается.

В вашем скрипте нет ни одного параметра.


Значит я не правильно понял.
Но думал вы за это: dRocket = @dt
8 апр 13, 13:43    [14151187]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
там дата не параметром передается

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ADODB_TADOQuery_Parameters.html
8 апр 13, 13:43    [14151188]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить