Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Вниз

Проблема с командой INSERT   Найти похожие ветки 

 
Artem071   (2006-11-26 01:07) [0]

пытаюсь добавить запись через ADOQUERY...команда такая: adoquery1.SQL.Text:= "insert into ORDERS(clients) values("+edit1.text+")";
Ввожу в поле edit1 текст, например Imya. Тут же вылетает ошибка The name "Imya" is not permitted in this object. Only constants, expression or variables....
Причем если ввожу цифру или число, то всё вводится без ошибок. Подскажите в чем проблема?


 
MsGuns ©   (2006-11-26 01:39) [1]

В кавычках для символьного поля:

adoquery1.SQL.Text:= "insert into ORDERS(clients) values("+QuotedStr(edit1.text)+")";


 
Desdechado ©   (2006-11-26 17:09) [2]

"Уж сколько раз твердили миру..."
Используй параметры:
adoquery1.SQL.Text:= "insert into ORDERS(clients) values(:P)";
adoquery1.Parameters.ParamByName("P").Value := edit1.text;


 
clickmaker ©   (2006-11-27 09:36) [3]


> Artem071   (26.11.06 01:07)

почему бы не использовать хранимки? Безопасней, наглядней  и менять можно, не перекомпилируя клиента. Кроме того, не нужно этих заморочек с QuotedStr, форматами даты и пр.
Ну а если Query c cached-updates, то там и так с параметрами, как в [2]


 
MsGuns ©   (2006-11-27 09:57) [4]

>clickmaker ©   (27.11.06 09:36) [3]
>почему бы не использовать хранимки? Безопасней, наглядней  и менять можно, не перекомпилируя клиента. Кроме того, не нужно этих заморочек с QuotedStr, форматами даты и пр.

Хранимки не избавляют клиента от необходимости корректной работы с параметрами различных типов данных
Кроме того, реализация каждого "чиха" через хранимки чрезмерно загружают бизнес-логику? запутывая ее и делая чрезвычайно сложным процесс модификации сущностей БД


 
Плохиш ©   (2006-11-27 12:16) [5]


> Artem071   (26.11.06 01:07)  

Почитать описание синтаксиса SQL-запросов для выбранной БД религия не позволяет?


 
clickmaker ©   (2006-11-27 13:11) [6]


> [4] MsGuns ©   (27.11.06 09:57)

а зачем мешать мух с котлетами? Скрипты на SQL хранятся на сервере, код на паскале - клиент.
Другое дело, когда есть некие классы, динамически строящие скл-команды по описанию сущности. Но там не будет строк типа Query.SQL = Edit1.Text, потому как эти классы ничего не знают и знать не должны про эти самые эдиты. Есть набор таблиц, есть набор полей в таблице, есть ключи. Вот по ним и строим запрос.


 
clickmaker ©   (2006-11-27 13:20) [7]


> [1] MsGuns ©   (26.11.06 01:39)
> В кавычках для символьного поля:
>
> adoquery1.SQL.Text:= "insert into ORDERS(clients) values("+QuotedStr(edit1.text)+")";

а что-то подобное - так вообще прямая и светлая дорога к sql-injection, особенно для веб-приложений. Ну в случае со строкой вы прикрылись кавычками, а вот представьте, если едит для числа, да случайно еще без проверки на валидность оставили:
"insert into ORDERS(amount) values("+edit1.text+")";
ввожу я в этот эдит что-то типа
5) delete from Orders where (1=1
и всё. Накрылись все наши заказы медным тазом


 
Desdechado ©   (2006-11-27 13:46) [8]

> и всё. Накрылись все наши заказы медным тазом
Занятно, но работать вряд ли будет. Кверики запросы по одному обрабатывают. А вот если туда подзапрос втулить, тогда может весело получиться %)


 
clickmaker ©   (2006-11-27 13:58) [9]


> [8] Desdechado ©   (27.11.06 13:46)
> Занятно, но работать вряд ли будет

будет ;)


 
MsGuns ©   (2006-11-27 16:42) [10]

>clickmaker ©   (27.11.06 13:20) [7]
>ввожу я в этот эдит что-то типа
5) delete from Orders where (1=1
и всё. Накрылись все наши заказы медным тазом

Вообще-то правильный ответ "на все случаи жизни" был дан в [2], хотя все равно пихать в запросы (как параметры или как фрагменты сиквеля - роли не играет) содержимое эдитов без предварительной проверки на корректность не следует в любом случае



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
15-1169959653
SerJaNT
2007-01-28 07:47
2007.02.18
Шаблонизатор TemplatePower


3-1164717372
newby
2006-11-28 15:36
2007.02.18
Максимальное количество полей в Access


3-1164381708
Вольный Стрелок
2006-11-24 18:21
2007.02.18
TADOConnection.Create ругается "не произведен вызов CoInitialize"


1-1166872599
S_T_E_P_A_N___
2006-12-23 14:16
2007.02.18
Управление веб-сайтами из Delphi-программы


15-1169595372
IMHO
2007-01-24 02:36
2007.02.18
Опрос: где ваши программы хранят данные?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский