есть запрос, формируемый пользователем по заполнению формы. в одной из граф необходимо указать число. по ошибке пользователь в конце числа ставит твердый знак. 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);
, то сообщение появляется.
Казус "Ъ" (твердого знака)
сервер может реагировать на русские буквы как угодно, до тех пор пока они не обрамлены двойными кавычками как "идентификаторы в третьем диалекте".
собственно, это ты должен отсекать "неправильные числа" во время их ввода. На то всякие maskedit и проч.
Также можно пользоваться параметрами в запросе, на этапе присвоения параметру числа и вылезет ошибка:
DataSet.ParamByName('Componentid').asInteger:=StrToInt(Edit1.Text);
нельзя в сервер пихать что попало в текстовом виде.
А если юзер наберет вместо числа кусочек текста '15 or Quantity = 20' ?
Хорошо если только это. так и до возможности ввести delete/update недалеко.
собственно, это ты должен отсекать "неправильные числа" во время их ввода. На то всякие maskedit и проч.
Также можно пользоваться параметрами в запросе, на этапе присвоения параметру числа и вылезет ошибка:
DataSet.ParamByName('Componentid').asInteger:=StrToInt(Edit1.Text);
нельзя в сервер пихать что попало в текстовом виде.
А если юзер наберет вместо числа кусочек текста '15 or Quantity = 20' ?
Хорошо если только это. так и до возможности ввести delete/update недалеко.
Последний раз редактировалось kdv 06 июн 2006, 17:52, всего редактировалось 1 раз.
с себя ответственности не снимаю, но и сервер, честно говоря, насмешил. явно что-то не так - встретил символ непонятный и отсек. тем более, что он стоит сразуже после числового значения: без пробелов или ковычек. получается, что он считает любой не понятный ему символ как окончание запроса (а может и вообще вылетает потихому). это видимо не правильно. хотя повторюсь с себя ответственности не снимаю.
проверку на правильность вводимых данных уже поставил.
проверку на правильность вводимых данных уже поставил.