Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TADOCommand с параметрами 
:(
    Опции темы
MoRoZfromT
Дата 28.3.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 24.3.2006

Репутация: нет
Всего: нет



Есть MS Access база. Использую TADOConnection для доступа. Нужно сделать такой запрос:

Код

with ADOCommand1 do begin

  CommandText := 'Update People SET People.PC_name = :NEWPC WHERE (People.position =  :From)' ;

  CommandType := cmdText;
  Parameters.Refresh;
// Parameters.ParamByName('NEWPC').Value := 'NEW';
// Parameters.ParamByName('From').Value := FromPosition.Text ;
  Parameters.FindParam('NEWPC').Value:='NEW';
  Parameters.FindParam('From').Value:= FromPosition.Text;
  Execute
end;

FromPosition - это комбобокс.
В таком варианте получаю Access violation. Если раскомментировать строки с ParamByName, а с FindParam закомментировать, то получаю ADOCommand1: Parameter 'NEWPC' not found.
Уже как только не пробовал.
Пробовал и ADOQuery - тоже не получается передать параметры. К тому же в хелпе сказано, мол TADOCommand проще, используйте его, когда не надо ничего возвращать.
Подскажите, как передать параметр.
PM MAIL   Вверх
Tror
Дата 28.3.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



Цитата(MoRoZfromT @ 28.3.2006, 12:52 Найти цитируемый пост)
о получаю ADOCommand1: Parameter 'NEWPC' not found.

естественно.
для начала попробуй их создать

Код

ADOCommand1.Parameters.CreateParameter(тип, имя, вход/выход);

===============================

сорри написал немного не то
вот так все работает
Код

ADOCommand1.CommandText := 'update REGION r set r.name = :newName where r.id = 1';
ADOCommand1.Parameters.ParamByName('newName').Value := 'Fuck782';
ADOCommand1.Execute;


проблема в Parameters.Refresh;


Это сообщение отредактировал(а) Tror - 28.3.2006, 13:28
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Vit
Дата 28.3.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



1. Не надо создавать никаких параметров.
2. Используйте TADOQuery - Работает стабильнее
3. Перед использованием параметров надо сделать ParseSQL:

Код

ADOQuery1.SQL.Text := 'Update People SET PC_name = :NEWPC WHERE position =  :Pos';
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);
ADOQuery1.Parameters.ParamByName(NEWPC ).Value := ...;
ADOQuery1.Parameters.ParamByName(Pos).Value := ...;
ADOQuery1.Execute;

4. "From" - это зарезервированное слово, его применение как параметра может иметь малопредсказуемые последствия.






--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
MoRoZfromT
Дата 28.3.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 24.3.2006

Репутация: нет
Всего: нет



Спасибо. Слегка поправлю для истории
Код

ADOQuery1.Close;
ADOQuery1.SQL.Text := 'Update People SET PC_name = :NEWPC WHERE position =  :Pos';
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);
ADOQuery1.Parameters.ParamByName('NEWPC' ).Value := 'NEW';
ADOQuery1.Parameters.ParamByName('Pos').Value := FromPosition.Text;
ADOQuery1.ExecSQL;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.