|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.05.2009, 13:42 | #1 |
Регистрация: 03.05.2009
Сообщений: 4
|
UPDATE с параметрами
Всем доброго времени суток.
Пишу программу в Delphi работающую с InterBase. Требуется содать запрос, который менял бы значение поля. При этом хочется что бы имя поля можно было менять в программе. Для этого всего использую 3 параметра: UPDATE TOVAR SET (:Par3)=:Par2 WHERE TOVARID=:Par1 Par2 и Par1 вопросов не вызывают, но когда я заменил значение конкретного поля на Par3 программа начала выдавать ошибку: SQL error code=-104 Token unknown - line 1, char 17 Что не так с par3? Или в запросе нельзя заменять имя конкретного поля на параметр? Заранее спасибо за ответы. |
03.05.2009, 15:47 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
уже тут было что-то подобное.
Пробуйте генерить запрос "на лету": Код:
|
03.05.2009, 16:27 | #3 |
Регистрация: 03.05.2009
Сообщений: 4
|
Спасибо за совет, а то меня переклинило, думал придется отдельно для каждого запроса отдельный компонент создавать. Уже все переделал, все работает.
Но всё же вопрос из за интереса: можно ли сделать как я делал с Par3. Я думаю там скорее всего ошибка в записи запроса(в SQL я пока хромаю на обе ноги). Ведь таким образом можно только передавать каждый раз новое значение параметра, а не переписывать запрос, что удобнее. Последний раз редактировалось QQmb; 03.05.2009 в 22:10. |
03.05.2009, 20:51 | #4 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
ясное дело, для сервака это какой-то косяк
ему приходит вот такой код после подстановки Код:
|
03.05.2009, 22:09 | #5 |
Регистрация: 03.05.2009
Сообщений: 4
|
ммм, не согласен, что ему такое приходит. Par3 (он же 'my_field_name') я назначаю в программе, так же как и Par2, Par1. То, что в эту переменную записывается необходимое имя поля(например, field1), я проверял. То есть когда запрос обрабатывается он выглядит так(учитывая параметры):
UPDATE TOVAR SET field1 = 1024 WHERE TOVARID = 17 А это вполне выполнимая команда. Или я ошибаюсь в своих рассуждениях? |
03.05.2009, 22:51 | #6 | |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
Цитата:
во-вторых, я не спорю - ты честно подставляешь свое field1, но так уж работает эта подстановка, что строковый параметр будет обрамлен кавычками (это же не макрос!) ну а чтобы попытаться меня опровергнуть попробуй свой старый вариант подстановки параметров и отлови, например, SQLMonitor-ом свой запрос (точнее, попытку его спрепейрить) или просто выведи текст получившегося запроса перед его выполнением таким образом Код:
|
|
05.05.2009, 21:01 | #7 |
Регистрация: 03.05.2009
Сообщений: 4
|
soleil@mmc, спасибо за объяснение. сейчас окончательно понял где я ошибался и почему нельзя так делать.
|
06.05.2009, 09:12 | #8 |
ios developer
Старожил
Регистрация: 16.11.2007
Сообщений: 2,885
|
На самом деле, поработав в свое время с ADO понял одно - на кой кляп вообще эти параметры нужны? Почему не генерить строку динамически с переменными?
Код:
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
|
06.05.2009, 11:56 | #9 | |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
Цитата:
интересно будет узнать какими глазами потом на вас будут смотреть юзвери и админы этих баз (речь есесно про SQL-базы типа мсскл, ибазе/фб, оракл) а все потому что запрос будет анализироваться движком каждый раз и тем самым тормозить работу вцелом параметры как раз позволяют избежать лишней работы сервака |
|
06.05.2009, 13:08 | #10 | |
ios developer
Старожил
Регистрация: 16.11.2007
Сообщений: 2,885
|
Цитата:
Зы. О каком вы анализе? Подставить переменные в строку уже есть анализ? Или ваш софт пашет напрямую с сервером, без прокси? Впрочем - я не спорю, что возможно есть другие доводы против этого метода, но те что привели вы - крайне сомнительны (если, конечно "тхаха" за обоснование не считать.) Добавлено: ЗЫЗЫ. Вы про sql-движок. Прошу прощения, торможу - чет башка совсем не варит сегодня. Но насчет микрософт/скорость - все равно останусь при своем.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!
Последний раз редактировалось crazy horse; 06.05.2009 в 13:12. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
insert и update | Tanusha | SQL, базы данных | 4 | 13.03.2009 14:47 |
Update данных | KiSH333 | БД в Delphi | 2 | 01.12.2008 13:28 |
c# and Access - update | MAcK | Общие вопросы .NET | 3 | 20.10.2008 12:58 |
не работает UPDATE | chekanoff | БД в Delphi | 1 | 27.02.2008 21:57 |
UPDATE и DELETE | Дамир | БД в Delphi | 3 | 13.03.2007 01:44 |