Страница 1 из 1

Казус "Ъ" (твердого знака)

Добавлено: 06 июн 2006, 17:03
indra
есть запрос, формируемый пользователем по заполнению формы. в одной из граф необходимо указать число. по ошибке пользователь в конце числа ставит твердый знак. SQL-сервер пропускает это спокойно. все вроде бы нормально. однако, после обновления данных в таблице присутствуют только то, что он указал в форме.

анализ показал, что Firebird 1.5 отсекает из запросе все, что стоит после такого символа. пример запроса:

06.06.2006 15:30:13
update RDepository set Id_Component = 383, Id_Unit = 3, TypeId = 1, Quantity = 15ъ where (Id = 8442);

т.е. 'where (Id = 8442);' просто не обработалось и все данные были заменены на приведенные....

выполнении запроса повторюсь сообщений об ошибке не было.

если написать так:
update RDepository set Id_Component = 383, Id_Unit = 3, TypeId = 1, Quantity = '15ъ' where (Id = 8442);

, то сообщение появляется.

Добавлено: 06 июн 2006, 17:51
kdv
сервер может реагировать на русские буквы как угодно, до тех пор пока они не обрамлены двойными кавычками как "идентификаторы в третьем диалекте".

собственно, это ты должен отсекать "неправильные числа" во время их ввода. На то всякие maskedit и проч.
Также можно пользоваться параметрами в запросе, на этапе присвоения параметру числа и вылезет ошибка:
DataSet.ParamByName('Componentid').asInteger:=StrToInt(Edit1.Text);

нельзя в сервер пихать что попало в текстовом виде.
А если юзер наберет вместо числа кусочек текста '15 or Quantity = 20' ?
Хорошо если только это. так и до возможности ввести delete/update недалеко.

Добавлено: 06 июн 2006, 17:52
dimitr
2.0 не отсекает, но и не ругается - просто игнорирует твердый знак. Причем на разных русских буквах эффект различен. Явная недоработка парсера.

Добавлено: 06 июн 2006, 21:20
indra
с себя ответственности не снимаю, но и сервер, честно говоря, насмешил. явно что-то не так - встретил символ непонятный и отсек. тем более, что он стоит сразуже после числового значения: без пробелов или ковычек. получается, что он считает любой не понятный ему символ как окончание запроса (а может и вообще вылетает потихому). это видимо не правильно. хотя повторюсь с себя ответственности не снимаю.

проверку на правильность вводимых данных уже поставил.

Добавлено: 07 июн 2006, 11:46
dimitr
исправлено в FB 2.1