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

Откуда:
Сообщений: 104751
VitalikBV
Значит я не правильно понял.
Но думал вы за это: dRocket = @dt

Вот я и говорю - откройте для себя параметры ADO
8 апр 13, 13:45    [14151211]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

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

Вы был прав - я сделал так, что в тех значениях где был NULL , теперь стала строка (с разными там значениями) и оно заработало.

Но все равно было бы очень интересно, как можно в профайлере посмотреть какой запрос передается на скл.
8 апр 13, 13:51    [14151258]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
VitalikBV
Member

Откуда:
Сообщений: 44
Glory
Вот я и говорю - откройте для себя параметры ADO

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

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

1. Запустить Профайлер
2. Соединиться с сервером
3. Выбрать для трассировки нужные события
4. Запустить трассу
5. Выполнить клиентский код
8 апр 13, 13:54    [14151285]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе UPDATE.  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34658
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 - это переменные из кода на С++

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


Что здесь не так?

Да всё здесь не так.
Прежде всего, тебе надо научиться писать запросы с parameter binding, а не так вот через жопу, формируя текстовые запросы.
Так я здесь не вижу никаких синтаксических ошибок, вероятно, в переменных dtt, label, tara, number,idl содержится что-то , что делает этот запрос невалидным по синтаксису.

Таким образом тебе нужно получить полный текст запроса и рассматривать его,
а лучше всего :

  • написать запрос с параметрами
  • при этом SET DATEFORMAT dmy будет не нужен
  • DECLARE @dt datetime SET @dt=convert(datetime, '"+dtt+"', 103) -- тоже. Да он и сейчас не нужен ни на фиг.

    Останется один update.
  • 8 апр 13, 14:29    [14151559]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    VitalikBV
    Member

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

    1. Запустить Профайлер
    2. Соединиться с сервером
    3. Выбрать для трассировки нужные события
    4. Запустить трассу
    5. Выполнить клиентский код


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

    Откуда:
    Сообщений: 44
    MasterZiv
    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 - это переменные из кода на С++

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


    Что здесь не так?

    Да всё здесь не так.
    Прежде всего, тебе надо научиться писать запросы с parameter binding, а не так вот через жопу, формируя текстовые запросы.
    Так я здесь не вижу никаких синтаксических ошибок, вероятно, в переменных dtt, label, tara, number,idl содержится что-то , что делает этот запрос невалидным по синтаксису.

    Таким образом тебе нужно получить полный текст запроса и рассматривать его,
    а лучше всего :

  • написать запрос с параметрами
  • при этом SET DATEFORMAT dmy будет не нужен
  • DECLARE @dt datetime SET @dt=convert(datetime, '"+dtt+"', 103) -- тоже. Да он и сейчас не нужен ни на фиг.

    Останется один update.


  • Благодарю за критику.

    По поводу как сделано - то это не я делал. Просто мне дали разобрать программу, и по ее принципу сделать другую программу.
    Логика отличаться будет не мало, но вот отдельные строительные блоки попадаются что можно брать.

    А именно по-другому делать, то пока нет времени, сроки очень сжаты.
    8 апр 13, 15:27    [14152018]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Паганель
    Member

    Откуда: Винница
    Сообщений: 22550
    впервые слышу про сжатые сроки при разработке на C++
    это ж не C#
    8 апр 13, 15:28    [14152024]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    ambarka_max
    Member

    Откуда: Россия
    Сообщений: 517
    С завидной периодичностью и упорством на форум обращаются люди с огромными шишками от граблей {query->SQL->Add} и {rocket="+label+"}.
    Где эти преподаватели, которые учат писать ТАК? Это же враги народа.
    Надеюсь у автора это временный период в жизни, и он через это пройдет.
    8 апр 13, 15:46    [14152145]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    Вариант с "одной" строкой, в отладчике текст запроса на ->Text=
    query->SQL->Text="UPDATE trains SET dRocket = convert(datetime, '"+dtt+"', 103), rocket="+label+", tara=NULLIF("+tara+",''), nRocket=NULLIF("+number+",'') where id = " + idl;
    8 апр 13, 16:30    [14152547]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Гость333
    Member

    Откуда:
    Сообщений: 3683
    Alex_Toms
    tara=NULLIF("+tara+",'')

    А как записать в это поле пустую строку?
    8 апр 13, 16:34    [14152576]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    Наверное не строку, а значение...
    Если tara="", то NULLIF("+tara+",'') возвратит NULL
    Данный вариант использую для возможных пустых значений переменных...
    8 апр 13, 16:40    [14152629]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    Alex_Toms
    Наверное не строку, а значение...
    Если tara="", то NULLIF("+tara+",'') возвратит NULL

    NULL и '' только в Оракле являются синонимами
    В других базах - это разные значения.
    8 апр 13, 16:43    [14152660]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    Уточнение: Если tara="" tara переменная из С++
    8 апр 13, 16:44    [14152665]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Гость333
    Member

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

    Вот я хочу сделать так:
    UPDATE trains SET tara = '' WHERE id = 1;
    UPDATE trains SET tara = NULL WHERE id = 2;
    

    Как это осуществить при помощи вашего подхода?
    8 апр 13, 16:44    [14152670]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    Glory функция MSSQL NULLIF ( expression , expression ), ORACLE здесь не причём...

    Гость333 имелось ввиду, если строка из с++ пустая, то в базу пишется NULL, если есть необходимость хранить NULL или '', то функция NULLIF не нужна...
    Я в ряде случаев в базу вместо пустой строки пишу NULL, для этого случая привёл пример...
    8 апр 13, 16:53    [14152749]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    Alex_Toms
    Glory функция MSSQL NULLIF ( expression , expression ), ORACLE здесь не причём...

    При том, что для вас NULL и '' тоже одинаковые значения
    8 апр 13, 16:56    [14152773]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    Alex_Toms
    Я в ряде случаев в базу вместо пустой строки пишу NULL, для этого случая привёл пример...

    На каком основании ?
    8 апр 13, 16:56    [14152777]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    При том, что для вас NULL и '' тоже одинаковые значения
    Есть поле примечание.
    В если проге удаляется фраза, остаётся пустая строка, пользователь в проге при NULL или '' всё равно видет "пустое" окно примечания, потому для этих случаев в поле заношу NULL...

    На каком основании ?
    А вот это ее понял?
    8 апр 13, 17:09    [14152877]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    Опечатка...

    На каком основании ?
    А вот это не понял?
    8 апр 13, 17:10    [14152883]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    Alex_Toms
    пользователь в проге при NULL или '' всё равно видет "пустое" окно примечания, потому для этих случаев в поле заношу NULL.

    А чего не пробелы ? Их тоже типа "не видно"

    Alex_Toms
    На каком основании ?
    А вот это ее понял?

    Вы подменяете одни значения на другие потому, что там было указано в ТЗ или потому, что визуально они не различимы ?
    8 апр 13, 17:15    [14152916]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    А в чём тайный смысл хранить пробелы, если для пользователя от них проку нет?

    ...потому, что визуально они не различимы...
    8 апр 13, 17:18    [14152936]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    Alex_Toms
    А в чём тайный смысл хранить пробелы, если для пользователя от них проку нет?

    Вот именно, что нужно хранить то, что заносится.
    8 апр 13, 17:20    [14152947]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Alex_Toms
    Member

    Откуда: Саранск
    Сообщений: 595
    Можно хранить, любой вариант, "для порядка" привожу к одному варианту...
    Привык в таблицах при отсутствии ЗНАЧИМОЙ информации, использовать NULL, бывает и вместо нулей, храню NULL ...
    Это дело вкуса, а как говорят, о вкусах не спорят...
    8 апр 13, 17:25    [14152991]     Ответить | Цитировать Сообщить модератору
     Re: Ошибка в запросе UPDATE.  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    Alex_Toms
    Это дело вкуса, а как говорят, о вкусах не спорят...

    Это дело соблюдения ТЗ, а не вкуса

    Alex_Toms
    Привык в таблицах при отсутствии ЗНАЧИМОЙ информации, использовать NULL, бывает и вместо нулей, храню NULL ...

    Как вы определяете _значимость_ ?
    То, что значение не было задано и что значение было задано в пустую строку, для вас не имеет значение ?
    8 апр 13, 17:28    [14153006]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить