Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.018 c
3-31087
ss300
2003-06-16 08:31
2003.07.10
помогите с sql запросом


14-31484
Влад
2003-06-20 10:44
2003.07.10
телефония


1-31210
Ilg
2003-06-28 18:09
2003.07.10
Перерисовка родительского компонента


14-31497
aves
2003-06-24 01:44
2003.07.10
Как программно изм-ть RUS версию Windows на ENG и наоборот


3-31141
EndDie
2003-06-18 14:34
2003.07.10
Как выбрать нужную запись через CommandText TADODataSet-a?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский