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

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

Ошибка при открытии запроса через ADODataSet [D7]


sergey32 ©   (2003-06-18 14:57:00) 

Пишу запрос с параметром в CommandText, затем присваиваю
значение параметру, запрос выдает ошибку.
Но если значение параметра занести сразу в CommandText, то
запрос работает. Пример:

CommandText:="select sum(price) from docs where id_doc=:id_doc"
и затем присваиваю значение параметру выдает ошибку "одногрупповая функция не является одногрупной"

Но если
CommandText:="select sum(price) from docs where id_doc=66"

то все работает


sergey32   (2003-06-18 17:18:00) [1]

спасибо всем за советы. Я разобрался в чем дело.
Надо установить свойство

CursorLocatonCursorLocation:=clUseServer;

и все заработало.
Спасибо


SaS13   (2003-06-18 17:07:00) [2]

DataSet.CommandText:="select sum(dd.price), dd.id_docs from docs_det dd where dd.id_docs=:id_doc group by dd.id_docs";
Чем не устраивает TADOQuery, зачем TADODataSet?
DataSet.Close; - необязательно.
Зачем возвращать dd.id_docs если он передается параметром?
нужно задать псевдоним для sum(dd.price), например
select sum(dd.price) AS sum, ...
ну и группировка здесь не нужна

DataSet:=TADOQuery.Create(self);
DataSet.Name:="LabelQuery"+inttostr(DocBrowse.CDSComponent.RecNo);
DataSet.Connection:=DM.ADOConnection1;
DataSet.Sql.Add("select sum(price) AS sum from docs_det where id_docs=:id_doc");
DataSet.Parameters.ParamByName("id_doc").Value:=DocBrowse.DocQuery.Fields[0].Value;
DataSet.Open;


sergey32   (2003-06-18 17:00:00) [3]

DataSet:=TADODataSet.Create(self);
DataSet.Name:="LabelQuery"+inttostr(DocBrowse.CDSComponent.RecNo);
DataSet.Close;
DataSet.Connection:=DM.ADOConnection1;
DataSet.CommandText:="select sum(dd.price), dd.id_docs from docs_det dd where dd.id_docs=:id_doc group by dd.id_docs";

DataSet.Parameters.ParseSQL(DataSet.CommandText,true);
DataSet.Parameters.ParamByName("id_doc").Value:=DocBrowse.DocQuery.Fields[0].Value;
DataSet.CommandType:=cmdText;
DataSet.Open;

выдает ошибку "Выражение не является GROUP by"


KSergey   (2003-06-18 16:39:00) [4]

Ааа, так еще и оракловый сервер.... Я на MS SQL проверял.
Да, свойство CommandType у меня в cmdText


sergey32   (2003-06-18 16:37:00) [5]

пишу group by выдает ошибку, что выражение не является group by,
хотя в PL/SQL developere запрос работает и с group by и без него.
Короче говоря запрос через компоненту передается некорректно.


KSergey   (2003-06-18 16:37:00) [6]

Вот такой код отработал у меня на ура
D5, SQL7, MDAC2.6

procedure TForm1.Button1Click(Sender: TObject);
begin
ADODataSet1.CommandText := "select sum(price) from table1 where id_doc=:id_doc";
ADODataSet1.Parameters.ParseSQL (ADODataSet1.CommandText, TRUE);
ADODataSet1.Parameters.ParamByName("id_doc").Value := 2;
ADODataSet1.Open;
end;


И, к стати, напрасно вы свой код таки зажали... Может что-то бы по нему подсказали.


JibSkeart   (2003-06-18 16:27:00) [7]

group by ?


KSergey   (2003-06-18 16:20:00) [8]

Ну я прям не знаю.. Экспериментировать лень... Попробовать написать select sum(price) as S from ...


sergey32   (2003-06-18 16:14:00) [9]

Вся проблемма в функции sum. Если ее убрать из запроса, то
запрос работает.


KSergey   (2003-06-18 16:05:00) [10]

Ну как как. А справку отменили, да?
Порядок действий такой:
ADODataSet.SQL := ...
ADODataSet.Parameters.ParseSQL (ADODataSet.SQL, TRUE);
и только теперь присваиваем значения параметрам

Синтаксис мог и приврать, а также возможны описки.


sniknik   (2003-06-18 16:00:00) [11]

sergey32 © (18.06.03 15:50)
> То же самое через BDE работает.
не может то же самоев BDE работать, там даже компонент списка параметров по разному называется.


sergey32   (2003-06-18 15:50:00) [12]

тект SQL в есть вопросе. значение параметру присвоено.
То же самое через BDE работает.

А как использовать ParseSQL?


KSergey   (2003-06-18 15:45:00) [13]

Это пирсваивание делается в run-time?
Тогда, вероятно, поможет Parameters.ParseSQL.
И, к стати, значение параметру-то не забыли присвоить? ;)


Соловьев   (2003-06-18 15:27:00) [14]


> и затем присваиваю значение параметру выдает ошибку "одногрупповая
> функция не является одногрупной"

код?
что написано в SQL?


sergey32   (2003-06-18 15:25:00) [15]

В ADOQuery точно такая же ситуация


Соловьев   (2003-06-18 14:58:00) [16]

используй ADOQuery


Наверх

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