Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Ошибка при открытии запроса через ADODataSet   Найти похожие ветки 

 
sergey32 ©   (2003-06-18 14:57) [0]

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

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

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

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


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

используй ADOQuery


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

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


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


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

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


 
KSergey ©   (2003-06-18 15:45) [4]

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


 
sergey32 ©   (2003-06-18 15:50) [5]

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

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


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

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


 
KSergey ©   (2003-06-18 16:05) [7]

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

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


 
sergey32 ©   (2003-06-18 16:14) [8]

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


 
KSergey ©   (2003-06-18 16:20) [9]

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


 
JibSkeart ©   (2003-06-18 16:27) [10]

group by ?


 
sergey32 ©   (2003-06-18 16:37) [11]

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


 
KSergey ©   (2003-06-18 16:37) [12]

Вот такой код отработал у меня на ура
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;


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


 
KSergey ©   (2003-06-18 16:39) [13]

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


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

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"



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

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:18) [16]

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

CursorLocatonCursorLocation:=clUseServer;

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



Страницы: 1 вся ветка

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
1-31301
Sergei Nevazhnyi
2003-06-25 18:03
2003.07.10
Работа с canvas в D7


4-31579
Still Swamp
2003-05-08 18:46
2003.07.10
Thread


1-31175
Серёга
2003-06-27 17:28
2003.07.10
Нужно ли


14-31437
Mike B.
2003-06-23 13:41
2003.07.10
Поэзия


4-31559
SerVel
2003-05-07 13:51
2003.07.10
CreateFileMapping(....) весь текст