![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В чём причина появления ошибки: «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, чтобы системе не приходилось постоянно "препарить" одни и теже запросы, и д.р. а делать только необходимое - присвоить параметры и выполнить.
т.е. если бы писал правильным "стилем", правильными компонентами то даже близко бы к "проблеме" не подошел бы.