Текущий архив: 2008.04.13;
Скачать: CL | DM;
Вниз
В чём причина появления ошибки: «parameter Kod not found»?(ADO) Найти похожие ветки
← →
NewSer (2008-03-16 10:23) [0]В чём может быть причина появления ошибки:
«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 то-же самое: например не получилось записать данные (ввели существующее значение ключевого поля), повторная попытка требует перезапуска программы.
← →
sniknik © (2008-03-16 10:57) [1]причина вот в этом
> ADOQueryS.Parameters.Clear;
в данном коде это не нужно
еще более веская причина в использовании ADOQuery, изза которого(под влиянием) пишется такой убогий код... там где нужен ADOCommand.
и самая глобальная причина в подходе (можно сказать психологии программирования), который заставляет экономить(???) то что не нужно (компоненты положенные на форму) за счет ресурсов и быстродействия (все бывает за счет чегото).
так тут по правильному требуется 2 компонента ADOCommand, чтобы системе не приходилось постоянно "препарить" одни и теже запросы, и д.р. а делать только необходимое - присвоить параметры и выполнить.
т.е. если бы писал правильным "стилем", правильными компонентами то даже близко бы к "проблеме" не подошел бы.
← →
NewSer (2008-03-16 11:06) [2]Спасибо, sniknik, сейчас попробую!
> 2 компонента ADOCommand
Вы говорите правильно, но, например, в данном случае, у меня база находится под паролем (проверять 2 раза), два раза переписывать строку соединения....
А по-поводу ADOQuery - значит, Вы считаетет - на них экономить не стоит?
И ADOQueryS.Parameters.Clear - я всё делал по аналогичным рабочим примерам! Подобного "not found" там не возникало!
← →
NewSer (2008-03-16 11:17) [3]Ещё раз спасибо, sniknik!
Сработало!
Но хотелось бы узнать:
>> И ADOQueryS.Parameters.Clear - я всё делал по аналогичным рабочим
>> примерам! Подобного "not found" там не возникало!
← →
sniknik © (2008-03-16 11:38) [4]> у меня база находится под паролем (проверять 2 раза), два раза переписывать строку соединения....
????
с идеологией даже хуже чем предполагал.
есть такой компонент ADOConnection который при работе с ADO ОБЯЗАТЕЛЕН к использованию, даже если больше ни одного ADO компонента не предвидится.
> А по-поводу ADOQuery - значит, Вы считаетет - на них экономить не стоит?
нет, я считаю что их надо снести нафиг с палитры, и не в коем случае не использовать (+ ADOTable, ADOStoredProc) особенно начинающим. не стоит травмировать неокрепшую психику корявой логикой...
> Но хотелось бы узнать:
просто везло. не было внесено 2х подряд одинаковых запросов. (при разных оно само сделает и клер параметрам и т.д. а если одинаковые, т.е. уже все сделано для того же самого ранее зачем парится повторно? а тут ты ему такое западло, взял и удалил то, что не просили...)
← →
NewSer (2008-03-16 11:44) [5]Хм ))) всё-таки полезно не только книжки читать, но и на форумах общаться! )))
> есть такой компонент ADOConnection который при работе с ADO ОБЯЗАТЕЛЕН
а-а-а разобрался!!!
я подумал Вы про 2 - ADOConnection говорите )))
один то у меня есть! )))
По началу думал, что проблема в "обрыве" связи ADOQuery с ним!
Страницы: 1 вся ветка
Текущий архив: 2008.04.13;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.007 c