Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Ошибка в параметрах запроса


Автор: kulikoff 19.1.2006, 17:57
На запрос:
Код

procedure TForm1.sBitBtn5Click(Sender: TObject);
begin
  ADOQuery2.Close;
  ADOQuery2.SQL.Text:='select NUPL from BANKVUP where BANKVUP.ROZ=:d1';
  ADOQuery2.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);
  ADOQuery2.Parameters.ParamByName('d1').Value:='не рознесено';
  ADOQuery2.Open;
end;

выдаёт ошибку
Код

Paremeter 'd1' not found.

Как правильно писать запрос?

Автор: DemoCode 19.1.2006, 18:18
В SQL надо не двоеточие равно, а просто равно:
Код

'select NUPL from BANKVUP where BANKVUP.ROZ=d1'

Автор: bas 19.1.2006, 18:50
Цитата(DemoCode @ 19.1.2006, 18:18 Найти цитируемый пост)

В SQL надо не двоеточие равно, а просто равно:

Это почему?
Код

ADOQuery2.Parameters.ParamByName('d1').Value:='"не рознесено"';

Автор: DemoCode 19.1.2006, 18:54
Это Delphi, а SQL - это язык запросов:

Код

select NUPL from BANKVUP where BANKVUP.ROZ = d1


А так как у тебя неправильно, в SQL нет :=
= в SQL - операция проверки на равенство
:= в Delphi - Операция присваивания

Да у тебя тем более ещё и наоборот =:

Автор: bas 19.1.2006, 19:07
Цитата(DemoCode @ 19.1.2006, 18:54 Найти цитируемый пост)

Это Delphi, а SQL - это язык запросов:

Это точно Delphi , а как передать запрос с параметрами то можнозаглянуть в http://forum.vingrad.ru/index.php?section=563&module=vingradfaq&act=module
Добавлено @ 19:07
Цитата(DemoCode @ 19.1.2006, 18:54 Найти цитируемый пост)

Да у тебя тем более ещё и наоборот =:

DemoCode - чтото ты спутал.

Автор: DemoCode 19.1.2006, 19:15
Цитата(bas @ 19.1.2006, 20:07 Найти цитируемый пост)

DemoCode - чтото ты спутал.


select NUPL from BANKVUP where BANKVUP.ROZ=:d1

smile 3 и 4 с конца символы

Автор: kulikoff 19.1.2006, 20:54
Не, когда хожу через BDE - там стопроцентно ставится двоеточие, а тут - немного удивлен... Тут точно просто равно ставится? Почему тогда оно понимает, что d1 - это параметр, а не ругается на неправильные символы или идентификаторы неизвестные? Код я приводил на Delphi...

Автор: Bose 19.1.2006, 21:19
DemoCode
двоеточие в этом случае не относится ни к присваиванию, ни к сравнению. Двоеточие указывает на то, что d1 - это параметр!

Цитата(kulikoff @ 19.1.2006, 17:57 Найти цитируемый пост)

Код

procedure TForm1.sBitBtn5Click(Sender: TObject);    
begin    
  ADOQuery2.Close;    
  ADOQuery2.SQL.Text:='select NUPL from BANKVUP where BANKVUP.ROZ=:d1';    
  ADOQuery2.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);    
  ADOQuery2.Parameters.ParamByName('d1').Value:='не рознесено';    
  ADOQuery2.Open;    
end;


попробуй так(не уверен):
Код

  ADOQuery2.Parameters.ParamByName(':d1').Value:='не рознесено';    


а еще может помочь отделить пробелом = от :

Автор: bas 20.1.2006, 10:44
kulikoff - поставь точку останова и посмотри что находиться в
Parameters[0].Value и если он .
В FAQ Петрович - рассматривал данную проблему весьма детально.

Автор: kulikoff 20.1.2006, 10:50
спасибо всем! Нашел ошибку у себя и устранил smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)