Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TAdoCommand и параметры [D7]


x_x_x ©   (2003-12-10 12:42:00) 

AdoCommand.ConnectionString := "Provider=MSDASQL.1;Persist Security Info=False;Data Source=файлы dBASE;Initial Catalog=x:\xxx\xx";
AdoCommand.CommandType := cmdText;
AdoCommand.CommandText := "UPDATE SomTable SET F1 = :F1, F2 = :F2 WHERE F3 = :F3";
AdoCommand.Parameters.Clear;
AdoCommand.Parameters.CreateParameter("F1", ftString, pdInput, 20, null)
AdoCommand.Parameters.CreateParameter("F2", ftString, pdInput, 20, null)
AdoCommand.Parameters.CreateParameter("F3", ftString, pdInput, 20, null)
AdoCommand.Parameters[1].Value = "fff1";
AdoCommand.Parameters[1].Value = "fff2";
AdoCommand.Parameters[1].Value = "fff3";
AdoCommand.Execute;

Запись с полем fff3 заведомо есть. Смотрю значения параметров - все как и хотелось, НО апдейта не происходит.
ПОЧЕМУ?
КАК посмотреть обработанный запрос, который Execute ;))
СПАСИБО


sniknik   (2003-12-10 17:14:00) [1]

x_x_x (10.12.03 12:42)
странное применение

или так
AdoCommand.ParamCheck:= true; {default}
AdoCommand.CommandText := "INSERT INTO SomTable (F1, F2, F3) VALUES (:F1, :F2, :F3)";
AdoCommand.Parameters[0].Value = "fff1"; {или по имени}
AdoCommand.Parameters[1].Value = "fff2";
AdoCommand.Parameters[2].Value = "fff3";
AdoCommand.Execute;

или так
AdoCommand.ParamCheck:= false;
AdoCommand.CommandText := "INSERT INTO SomTable (F1, F2, F3) VALUES (?, ?, ?)";
AdoCommand.Parameters.CreateParameter("F1", ftString, pdInput, 20, "fff0");
AdoCommand.Parameters.CreateParameter("F2", ftString, pdInput, 20, "fff1");
AdoCommand.Parameters.CreateParameter("F3", ftString, pdInput, 20, "fff2");
AdoCommand.Execute;

а обьеденять то зачем?

> И очень интересно как всетаки посмотреть ЧТО он Execute ???
function Execute(var RecordsAffected: Integer; const Parameters: OleVariant): _RecordSet; overload;
не заметил она таки функция, а значится чтото возвращает. а вар параметр RecordsAffected количество обработанных строк показывает...


x_x_x   (2003-12-10 16:02:00) [2]

Про индексы согласен, в реальности они с нуля...
По поводу AdoCommand.Parameters.Clear я писал - продиктовано необходимостью. Данный пример сильно упрощен для простоты восприятия. На самом деле вокруг добавления параметра обертка, но это отсупление от темы.
Вопрос в том что например
AdoCommand.CommandText := "INSERT INTO SomTable (F1, F2, F3) VALUES (:F1, :F2, :F3)";
AdoCommand.Parameters.Clear;
AdoCommand.Parameters.CreateParameter("F1", ftString, pdInput, 20, null)
AdoCommand.Parameters.CreateParameter("F2", ftString, pdInput, 20, null)
AdoCommand.Parameters.CreateParameter("F3", ftString, pdInput, 20, null)
выполняется на ура.
И как отмечалось если при трассировке посмотреть значения параметров до Execute, то они те что нужно.
И очень интересно как всетаки посмотреть ЧТО он Execute ???


Плохиш_   (2003-12-10 14:13:00) [3]

>x_x_x (10.12.03 12:43) [1]

> Поправка
> AdoCommand.Parameters[1].Value = "fff1";
> AdoCommand.Parameters[2].Value = "fff2";
> AdoCommand.Parameters[3].Value = "fff3";


Хм, а что индексы теперь не с 0 начинаются?


Silver Alex   (2003-12-10 14:12:00) [4]

ну посмотри что ты делаешь, сначала убиваешь все параметры
AdoCommand.Parameters.Clear;
а потом по новой добавляешь.Убери этот кусок не нужен он и попробуй без него.И пиши не
AdoCommand.Parameters[1].Value
а
AdoCommand.Parameters.ParamByName("f1").Value


x_x_x   (2003-12-10 13:53:00) [5]

Для того чтобы контролировать параметры. Например если я буду вызывать ХП (не из dBase конечно), то как обойтись без явного описания параметров?


Silver Alex   (2003-12-10 12:58:00) [6]


> AdoCommand.Parameters.Clear;
> AdoCommand.Parameters.CreateParameter("F1", ftString, pdInput,
> 20, null)
> AdoCommand.Parameters.CreateParameter("F2", ftString, pdInput,
> 20, null)
> AdoCommand.Parameters.CreateParameter("F3", ftString, pdInput,
> 20, null)

а зачем это?


x_x_x   (2003-12-10 12:43:00) [7]

Поправка
AdoCommand.Parameters[1].Value = "fff1";
AdoCommand.Parameters[2].Value = "fff2";
AdoCommand.Parameters[3].Value = "fff3";


Наверх

Титульная страница Поиск, карта сайта Написать письмо