Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Glory Member Откуда: Сообщений: 104751 |
Вот я и говорю - откройте для себя параметры ADO |
||
8 апр 13, 13:45 [14151211] Ответить | Цитировать Сообщить модератору |
VitalikBV Member Откуда: Сообщений: 44 |
Вы был прав - я сделал так, что в тех значениях где был NULL , теперь стала строка (с разными там значениями) и оно заработало. Но все равно было бы очень интересно, как можно в профайлере посмотреть какой запрос передается на скл. |
||
8 апр 13, 13:51 [14151258] Ответить | Цитировать Сообщить модератору |
VitalikBV Member Откуда: Сообщений: 44 |
спасибо, нужно будет посмотреть. |
||
8 апр 13, 13:53 [14151275] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
1. Запустить Профайлер 2. Соединиться с сервером 3. Выбрать для трассировки нужные события 4. Запустить трассу 5. Выполнить клиентский код |
||
8 апр 13, 13:54 [14151285] Ответить | Цитировать Сообщить модератору |
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] Пишет вот такое :
Что здесь не так? Да всё здесь не так. Прежде всего, тебе надо научиться писать запросы с parameter binding, а не так вот через жопу, формируя текстовые запросы. Так я здесь не вижу никаких синтаксических ошибок, вероятно, в переменных dtt, label, tara, number,idl содержится что-то , что делает этот запрос невалидным по синтаксису. Таким образом тебе нужно получить полный текст запроса и рассматривать его, а лучше всего : Останется один update. |
||
8 апр 13, 14:29 [14151559] Ответить | Цитировать Сообщить модератору |
VitalikBV Member Откуда: Сообщений: 44 |
Спасибо. |
||||
8 апр 13, 14:30 [14151572] Ответить | Цитировать Сообщить модератору |
VitalikBV Member Откуда: Сообщений: 44 |
Благодарю за критику. По поводу как сделано - то это не я делал. Просто мне дали разобрать программу, и по ее принципу сделать другую программу. Логика отличаться будет не мало, но вот отдельные строительные блоки попадаются что можно брать. А именно по-другому делать, то пока нет времени, сроки очень сжаты. |
||||
8 апр 13, 15:27 [14152018] Ответить | Цитировать Сообщить модератору |
Паганель Member Откуда: Винница Сообщений: 22550 |
впервые слышу про сжатые сроки при разработке на C++ это ж не C# |
8 апр 13, 15:28 [14152024] Ответить | Цитировать Сообщить модератору |
ambarka_max Member Откуда: Россия Сообщений: 517 |
С завидной периодичностью и упорством на форум обращаются люди с огромными шишками от граблей {query->SQL->Add} и {rocket="+label+"}. Где эти преподаватели, которые учат писать ТАК? Это же враги народа. Надеюсь у автора это временный период в жизни, и он через это пройдет. |
8 апр 13, 15:46 [14152145] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
А как записать в это поле пустую строку? |
||
8 апр 13, 16:34 [14152576] Ответить | Цитировать Сообщить модератору |
Alex_Toms Member Откуда: Саранск Сообщений: 595 |
Наверное не строку, а значение... Если tara="", то NULLIF("+tara+",'') возвратит NULL Данный вариант использую для возможных пустых значений переменных... |
8 апр 13, 16:40 [14152629] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
NULL и '' только в Оракле являются синонимами В других базах - это разные значения. |
||
8 апр 13, 16:43 [14152660] Ответить | Цитировать Сообщить модератору |
Alex_Toms Member Откуда: Саранск Сообщений: 595 |
Уточнение: Если tara="" tara переменная из С++ |
8 апр 13, 16:44 [14152665] Ответить | Цитировать Сообщить модератору |
Гость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] Ответить | Цитировать Сообщить модератору |
Alex_Toms Member Откуда: Саранск Сообщений: 595 |
Glory функция MSSQL NULLIF ( expression , expression ), ORACLE здесь не причём... Гость333 имелось ввиду, если строка из с++ пустая, то в базу пишется NULL, если есть необходимость хранить NULL или '', то функция NULLIF не нужна... Я в ряде случаев в базу вместо пустой строки пишу NULL, для этого случая привёл пример... |
8 апр 13, 16:53 [14152749] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
При том, что для вас NULL и '' тоже одинаковые значения |
||
8 апр 13, 16:56 [14152773] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
На каком основании ? |
||
8 апр 13, 16:56 [14152777] Ответить | Цитировать Сообщить модератору |
Alex_Toms Member Откуда: Саранск Сообщений: 595 |
При том, что для вас NULL и '' тоже одинаковые значения Есть поле примечание. В если проге удаляется фраза, остаётся пустая строка, пользователь в проге при NULL или '' всё равно видет "пустое" окно примечания, потому для этих случаев в поле заношу NULL... На каком основании ? А вот это ее понял? |
8 апр 13, 17:09 [14152877] Ответить | Цитировать Сообщить модератору |
Alex_Toms Member Откуда: Саранск Сообщений: 595 |
Опечатка... На каком основании ? А вот это не понял? |
8 апр 13, 17:10 [14152883] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А чего не пробелы ? Их тоже типа "не видно"
Вы подменяете одни значения на другие потому, что там было указано в ТЗ или потому, что визуально они не различимы ? |
||||
8 апр 13, 17:15 [14152916] Ответить | Цитировать Сообщить модератору |
Alex_Toms Member Откуда: Саранск Сообщений: 595 |
А в чём тайный смысл хранить пробелы, если для пользователя от них проку нет? ...потому, что визуально они не различимы... |
8 апр 13, 17:18 [14152936] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Вот именно, что нужно хранить то, что заносится. |
||
8 апр 13, 17:20 [14152947] Ответить | Цитировать Сообщить модератору |
Alex_Toms Member Откуда: Саранск Сообщений: 595 |
Можно хранить, любой вариант, "для порядка" привожу к одному варианту... Привык в таблицах при отсутствии ЗНАЧИМОЙ информации, использовать NULL, бывает и вместо нулей, храню NULL ... Это дело вкуса, а как говорят, о вкусах не спорят... |
8 апр 13, 17:25 [14152991] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Это дело соблюдения ТЗ, а не вкуса
Как вы определяете _значимость_ ? То, что значение не было задано и что значение было задано в пустую строку, для вас не имеет значение ? |
||||
8 апр 13, 17:28 [14153006] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |