Форум: "Базы";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизОшибка при открытии запроса через 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c