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

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

В чём причина появления ошибки: «parameter 'Kod' not found»?(ADO)


NewSer ©   (2008-03-16 10:23:00) 

В чём может быть причина появления ошибки:
«parameter 'Kod' not found»
при повторномзапуске процедуры?
If new then begin
  if ADOQueryS.Active then ADOQueryS.Close;
  ADOQueryS.Parameters.Clear;
  ADOQueryS.SQL.Text:='INSERT INTO TableM (Kod, Nomer) '+
   'VALUES (:Kod, : Nomer)';
  ADOQueryS.Parameters.ParamValues['Kod']:=SpinEditKod.Value;
  ADOQueryS.Parameters.ParamValues[' Nomer ']:=LabeledEditO.Text;
  ADOQueryS.ExecSQL;
  ADOQueryS.Close;
 end
 else begin
  if ADOQueryS.Active then ADOQueryS.Close;
  ADOQueryS.Parameters.Clear;
  ADOQueryS.SQL.Text:='UPDATE TableM SET Kod=:Kod WHERE Nomer =:Nom';
  ADOQueryS.Parameters.ParamValues['Kod']:=SpinEditKod.Value;
  ADOQueryS.Parameters.ParamValues[' Nom ']:=LabeledEditO.Text;
  ADOQueryS.ExecSQL;
  ADOQueryS.Close;
End;

Причём! UPDATE после INSERT срабатывает нормально, а повторный UPDATE вызывает эту ошибку!
С INSERT то-же самое: например не получилось записать данные (ввели существующее значение ключевого поля), повторная попытка требует перезапуска программы.


NewSer   (2008-03-16 11:44:00) [1]

Хм ))) всё-таки полезно не только книжки читать, но и на форумах общаться! )))

> есть такой компонент ADOConnection который при работе с ADO ОБЯЗАТЕЛЕН

а-а-а разобрался!!!
я подумал Вы про 2 - ADOConnection говорите )))
один то у меня есть! )))
По началу думал, что проблема в "обрыве" связи ADOQuery с ним!


sniknik   (2008-03-16 11:38:00) [2]

> у меня база находится под паролем (проверять 2 раза), два раза переписывать строку соединения....
????
с идеологией даже хуже чем предполагал.
есть такой компонент ADOConnection который при работе с ADO ОБЯЗАТЕЛЕН к использованию, даже если больше ни одного ADO компонента не предвидится.

> А по-поводу ADOQuery - значит, Вы считаетет - на них экономить не стоит?
нет, я считаю что их надо снести нафиг с палитры, и не в коем случае не использовать (+ ADOTable, ADOStoredProc) особенно начинающим. не стоит травмировать неокрепшую психику корявой логикой...

> Но хотелось бы узнать:
просто везло. не было внесено 2х подряд одинаковых запросов. (при разных оно само сделает и клер параметрам и т.д. а если одинаковые, т.е. уже все сделано для того же самого ранее зачем парится повторно? а тут ты ему такое западло, взял и удалил то, что не просили...)


NewSer   (2008-03-16 11:17:00) [3]

Ещё раз спасибо, sniknik!

Сработало!
Но хотелось бы узнать:
>> И ADOQueryS.Parameters.Clear - я всё делал по аналогичным рабочим
>> примерам! Подобного "not found" там не возникало!


NewSer   (2008-03-16 11:06:00) [4]

Спасибо, sniknik, сейчас попробую!

> 2 компонента ADOCommand
Вы говорите правильно, но, например, в данном случае, у меня база находится под паролем (проверять 2 раза), два раза переписывать строку соединения....

А по-поводу ADOQuery - значит, Вы считаетет - на них экономить не стоит?

И ADOQueryS.Parameters.Clear- я всё делал по аналогичным рабочимпримерам! Подобного "not found" там не возникало!


sniknik   (2008-03-16 10:57:00) [5]

причина вот в этом
> ADOQueryS.Parameters.Clear;
в данном коде это не нужно

еще более веская причина в использовании ADOQuery, изза которого(под влиянием) пишется такой убогий код... там где нужен ADOCommand.

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

т.е. если бы писал правильным "стилем", правильными компонентами то даже близко бы к "проблеме" не подошел бы.


Наверх

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