Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Query1:Parameter 'pNAME' not found, При добавлении новой записи в БД-ошибка  
:(
    Опции темы
bomberman
Дата 8.5.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Приветствую, господа!

Постановка задачи
Необходимо добавить новую запись в таблицу
(Только начинаю работать в Delphi 5.0 с БД (Oracle 10))

Проблема
При попытке выполнения нижеуказанного кода Delphi выдается сообщение об ошибке:
Query1: Parameter 'pNAME' not found


Интересующие вопросы
1. Где ищутся эти параметры исполняемой программой (в данном случае где ищется pNAME)? 
    (Предполагаемые варианты ответа: в SQL-выражении свойства UpdateSQL1.InsertSQL) 
2. Почему все же он не может найти этот параметр?
    (Предполагаемые варианты ответа: ошибка в данном PL/SQL-выражении, ищет в др. PL/SQL- 
    выражении, ищет где-то еще)
3. И извечный вопрос: что делать, чтобы все же корректно добавить новую запись в БД (на основе
    представленных здесь исходных данных)?
    (Предполагаемые варианты ответа: )

Исходные данные (на форме имеются компоненты типов: TDBEdit, TUpdateSQL, TQuery)
1. PL/SQL-выражение в свойстве SQL компонента Query1: 
    
Код

    select ID, NAME from Tbl where ID = :pID
    


2. В свойстве Params компонента Query1 определен параметр 
    pID: Value=0, ParamType=ptInput, DataType=ftInteger

3. В свойстве InsertSQL компонента UpdateSQL1 находится PL/SQL-выражение 
    (ID- на этом поле триггер висит автоинкрементный):
    
Код

    insert into Tbl (NAME) values (:pNAME)
    


4. Код обработчика события Query1.OnNewRecord 
Код

procedure TfrmaDetail.qryDetailNewRecord(DataSet: TDataSet);
var
  i :integer;
begin
  inherited;
   with qryDetail do begin
      if not Prepared then Prepare;
      for i:=0 to Params.Count-1 do Params.Items[i].Clear;
  
      DataSet.FieldByName('ID').AsInteger    := Parameters.ParamByName('pID').AsInteger;
      DataSet.FieldByName('NAME').AsString := Parameters.ParamByName('pNAME').AsString;
  
   end;
end;


Спасибо за помощь!
PM MAIL ICQ   Вверх
Данкинг
Дата 8.5.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



А параметрам значение задать не хочешь? smile 
Код

Parameters.ParamByName('pID').Value:=10;
Parameters.ParamByName('pNAME').Value:='SSSSSS';




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
bomberman
Дата 8.5.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Данкинг @ 8.5.2009,  22:08)
А параметрам значение задать не хочешь? smile 
Код

Parameters.ParamByName('pID').Value:=10;
Parameters.ParamByName('pNAME').Value:='SSSSSS';

 Извиняюсь, может, за банальные вопросы, не силен в тонкостях этих материй, только учусь
1. Где вставлять этот код для присвоения значений перед/вместо/после:
Код

   DataSet.FieldByName('ID').AsInteger    := Parameters.ParamByName('pID').AsInteger;
   DataSet.FieldByName('NAME').AsString :=  Parameters.ParamByName('pNAME').AsString;


2. Какая глобальная цель в задании значений параметрам приследуется, если моя цель - 
    это ввести данные в TDBEdit, чтобы они потом добавились в таблицу БД в качестве новой записи

3. И такой вопрос: я видел в примерах, что для модификации данных 
    в обработчике OnUpdateRecord пишут:
   
Код

Parameters.ParamByName('pID').AsInteger := DataSet.FieldByName('ID').AsInteger     
   DataSet.FieldByName('NAME').AsString         := Parameters.ParamByName('pNAME').AsString;

   а для добавления новой записи в OnUpdateRecord:
   
Код

DataSet.FieldByName('ID').AsInteger    := Parameters.ParamByName('pID').AsInteger;
   DataSet.FieldByName('NAME').AsString := Parameters.ParamByName('pNAME').AsString;

   В чем смысл и разница? 
PM MAIL ICQ   Вверх
Данкинг
Дата 8.5.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(bomberman @  8.5.2009,  23:57 Найти цитируемый пост)
Где вставлять этот код для присвоения значений перед/вместо/после:

Пример из моей программы:
Код

 zapros.Close;
 zapros.SQL.Clear;
 zapros.SQL.Add('insert into :tn values(:par1, :par2, :par3, :par4, :par5, :par6, :par7, :par8, :par9)');
 zapros.Parameters.ParamByName('tn').Value:=fn;
 zapros.Parameters.ParamByName('par1').Value:=fn;
 zapros.Parameters.ParamByName('par2').Value:=getwordnum(p,'^',inttostr(1));
 zapros.Parameters.ParamByName('par3').Value:=getwordnum(p,'^',inttostr(2));
 zapros.Parameters.ParamByName('par4').Value:=getwordnum(p,'^',inttostr(3));
 zapros.Parameters.ParamByName('par5').Value:=getwordnum(p,'^',inttostr(4));
 zapros.Parameters.ParamByName('par6').Value:=getwordnum(p,'^',inttostr(5));
 zapros.Parameters.ParamByName('par7').Value:=getwordnum(p,'^',inttostr(6));
 zapros.Parameters.ParamByName('par8').Value:=getwordnum(p,'^',inttostr(7));
 zapros.Parameters.ParamByName('par9').Value:=getwordnum(p,'^',inttostr(8));
 zapros.ExecSQL; 

(zapros - это Query)

Цитата(bomberman @  8.5.2009,  23:57 Найти цитируемый пост)
это ввести данные в TDBEdit, чтобы они потом добавились в таблицу БД в качестве новой записи

Я с DBEdit работал весьма мало, но вроде как там же отображается текущее поле таблицы. При чём тут добавление новой строчки? 

Цитата(bomberman @  8.5.2009,  23:57 Найти цитируемый пост)
И такой вопрос:

Какие-то непонятные примеры: зачем параметру присваивать значение поля таблицы? Точнее, для какой-то конкретной задачи это, возможно, и нужно, но говорить о какой-то универсальности этого примера я бы не стал.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 8.5.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

Query1: Parameter 'pNAME' not found


Цитата

2. В свойстве Params компонента Query1 определен параметр 
    pID: Value=0, ParamType=ptInput, DataType=ftInteger

а тебе говорит что не найден параметр pNAME, его ты где объявил?


--------------------

PM MAIL   Вверх
bomberman
Дата 8.5.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Dmi3ev @ 8.5.2009,  23:13)
Цитата

2. В свойстве Params компонента Query1 определен параметр 
    pID: Value=0, ParamType=ptInput, DataType=ftInteger

а тебе говорит что не найден параметр pNAME, его ты где объявил?

Наверно меня конкеретно на..дурили) но сказали что типо Parameters.ParamByName('pID')
и объявляет заодно параметр (в данном случае pID). Типо  Parameters - это некий глобальный кэш
что-ли, где хранятся все параметры и добавляются и хранятся.
Дело в том, что если попытаться добавить новый параметр в Query1.Params там в списке параметров,
то имеющаяся там кнопочка для добавления новых параметров неактивна

PM MAIL ICQ   Вверх
Данкинг
Дата 8.5.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(bomberman @  9.5.2009,  00:33 Найти цитируемый пост)
Дело в том, что если попытаться добавить новый параметр в Query1.Params там в списке параметров,

Зачем добавлять - делай как у меня в примере. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 8.5.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

Типо  Parameters - это некий глобальный кэш что-ли, где хранятся все параметры и добавляются и хранятся.

Есть запрос, у него есть параметры, у другого запроса другие параметры , у третьего ваще нет...
хз, по-моему это бред...
даже попробуй два Query кинуть на форму, и посмотри параметры у одного, и параметры для дргого...

Добавлено через 7 минут и 26 секунд
Код

      DataSet.FieldByName('ID').AsInteger    := Parameters.ParamByName('pID').AsInteger;
      DataSet.FieldByName('NAME').AsString := Parameters.ParamByName('pNAME').AsString;

это тоже как-то странно...
можно не усложнять
1) есть запрос на выборку
Код

select ID, NAME from Tbl where ID = :pID

кстати он работает?
2) надо добавить в таблицу новое поле
Код

Query1.Append;
Query1.FieldByName('NAME').AsString:=Edit1.Text;
Query1.Post;

или с Ораклом так не прокатывает???
Кстати еще совет, никогда не называть поле NAME, MONEY, DATE, ... это служебные слова, можешь когда-нибудь столкнуться



--------------------

PM MAIL   Вверх
bomberman
Дата 8.5.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Данкинг @ 8.5.2009,  23:42)
Цитата(bomberman @  9.5.2009,  00:33 Найти цитируемый пост)
Дело в том, что если попытаться добавить новый параметр в Query1.Params там в списке параметров,

Зачем добавлять - делай как у меня в примере. smile

Уговорил дружище, сейчас только пойду.. вхомячу чего-нибудь  smile , а то уже мосх все калории выедает и займусь этим, потом выдам результат эксперимента
PM MAIL ICQ   Вверх
Данкинг
Дата 9.5.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Dmi3ev @  9.5.2009,  00:43 Найти цитируемый пост)
надо добавить в таблицу новое поле

Не новое поле, а новую запись ты добавляешь, не путай bomberman' а! smile 

Цитата(Dmi3ev @  9.5.2009,  00:43 Найти цитируемый пост)
Кстати еще совет, никогда не называть поле NAME, MONEY, DATE, ... это служебные слова, можешь когда-нибудь столкнуться

Да, вот это правильно: name, index, prim, recno - так полей лучше не называть.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 9.5.2009, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

Не новое поле, а новую запись ты добавляешь, не путай bomberman' а!

ок, согласен, тупо сказал...
Цитата

Да, вот это правильно: name, index, prim, recno - так полей лучше не называть. 

просто по-моему это логично, ведь переменные именами типов данных или функций или директив, или... не возникает желания называть...


--------------------

PM MAIL   Вверх
Quatrox7m
Дата 10.6.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Читал читал,так ничего из вышенаписаного непонял:
Приветсвую. Подскажите, а в чем у меня проблема?
Код


   1 DataModule3.ADOQuery2.Close;
   2 DataModule3.ADOQuery2.SQL.clear;
   3 DataModule3.ADOQuery2.SQL.add('SELECT UserS.id,UserS.Login,UserS.MD5_Pass,UserS.CloseKey FROM UserS');
   4 DataModule3.ADOQuery2.SQL.add('WHERE ((UserS.Login:=par1)and(UserS.MD5_Pass:=par2));');
   5 DataModule3.ADOQuery2.Parameters.ParamByName('par1').Value:=Edit1.Text ;
   6 DataModule3.ADOQuery2.Parameters.ParamByName('par2').Value:=Md5.Md5DigestToStr(Md5.MD5String(MaskEdit1.Text));
   7 DataModule3.ADOQuery2.Open;


на 5 строке выдает ошибку:          ADOQuery2: Parameter 'par1' not found

Это сообщение отредактировал(а) Quatrox7m - 10.6.2009, 12:02
PM MAIL ICQ   Вверх
Данкинг
Дата 10.6.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Цитата(Quatrox7m @  10.6.2009,  12:57 Найти цитируемый пост)
на 5 строке выдает ошибку:          ADOQuery2: Parameter 'par1' not found

Бывают такие глюки с Select'ом. Как с ними правильно бороться - не знаю, я в случае их появления делаю запрос без параметров, просто одной строкой с переменными.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Quatrox7m
Дата 10.6.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



пробуем одной строкой....
PM MAIL ICQ   Вверх
Romikgy
Дата 10.6.2009, 13:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

4 DataModule3.ADOQuery2.SQL.add('WHERE ((UserS.Login=:par1)and(UserS.MD5_Pass=:par2));');



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1004 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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