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

Вниз

Интересная вещь в ADO   Найти похожие ветки 

 
Patrick1968 ©   (2011-07-26 16:27) [0]

Не пойму в чем причина, написал запрос
select count(*)  from mytable where article="100" and propid="40"
при открытии ADOQuery, выходит сообщение, что "групповая функция не является одногруппной", хотя в SQL Plus"e всё проходит на "ура". Что-то непонятно? Может кто сталкивался?


 
MsGuns ©   (2011-07-26 16:35) [1]

select article, propid, count(*)
 from mytable
 where article="100" and propid="40"
 group by article, propid


 
b z   (2011-07-26 16:40) [2]

Никто не сталкивался.
Кстати а что за субд?


 
Patrick1968 ©   (2011-07-26 16:45) [3]

Понял,спасибо


 
Patrick1968 ©   (2011-07-26 16:50) [4]

А в этом случае ошибка, что выражение не является выражением GROUP BY


 
Игорь Шевченко ©   (2011-07-26 17:01) [5]


> при открытии ADOQuery, выходит сообщение, что "групповая
> функция не является одногруппной",


так прямо и выходит ?

подробности для вопроизведения будут ?


>  хотя в SQL Plus"e всё проходит на "ура".


везде должно проходить на ура


 
SQLEXPRESS   (2011-07-26 17:03) [6]


> Кстати а что за субд?

+1

такие простые агрегатные штуки должны работать

в oracle, работает
select
count(*)
from t_users U
where U.NAME like "МЕЛ%" and U.STREET_ID = 0

в MSSQL, работает
SELECT count(*)
 FROM [InterStart].[dbo].[vCTVConstSVCDeactivate]
where [INFO] = "NotActive" and ID_SVC = 55

в Access, работает
SELECT
count(*)
FROM Answert
where Answert.[IdQuest] = 10 and Answert.[Value] = 0


 
Patrick1968 ©   (2011-07-26 17:03) [7]

про это и речь, поэтому и интересные вещи а какие подробности?


 
Patrick1968 ©   (2011-07-26 17:08) [8]

может свойства query какие-то на это влияют?


 
SQLEXPRESS   (2011-07-26 17:27) [9]

параметры есть? parse их?


 
MsGuns ©   (2011-07-26 17:32) [10]

Есть подозрение что в этой СУБД (клиенте ?) нет такой функции "count" или не допускается выражение "count(*)"


 
Patrick1968 ©   (2011-07-26 17:32) [11]

Все параметры по дефолту


 
MsGuns ©   (2011-07-26 17:32) [12]

Вот тольуо адо тут совершенно сбоку


 
MsGuns ©   (2011-07-26 17:34) [13]

А так ?
select count(A.*) from
 (select article,propid from mytable where article="100" and propid="40") A


 
Patrick1968 ©   (2011-07-26 17:35) [14]

Это как-так в оракле нет count?


 
Игорь Шевченко ©   (2011-07-26 17:40) [15]


> Это как-так в оракле нет count?


ну вот нет


 
SQLEXPRESS   (2011-07-26 17:41) [16]

Ну а парсишь их?
Query.Parameters.ParseSQL ?


 
SQLEXPRESS   (2011-07-26 18:03) [17]

да, не работает, так и пишет
не сингл группа функция, к Ораклу

select count(*) from debtor
where REG_ID = :RI

с параметрами надо играть.
Cheked, Prepare, PARse
у меня заработало, короче

А к MSSQL это не обязательно, и так работает :)


 
Игорь Шевченко ©   (2011-07-26 18:35) [18]

У вас ADO кривое (или что-то еще)

object Form1: TForm1
 Left = 0
 Top = 0
 Caption = "Form1"
 ClientHeight = 293
 ClientWidth = 426
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "Tahoma"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 332
   Top = 252
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 0
   OnClick = Button1Click
 end
 object db: TADOConnection
   ConnectionString =
     "Provider=OraOLEDB.Oracle.1;Password=bar;Persist Security I" +
     "nfo=True;User ID=foo;Data Source=sles10"
   Provider = "OraOLEDB.Oracle.1"
   Left = 32
   Top = 24
 end
 object ds: TADODataSet
   Connection = db
   CommandText = "SELECT COUNT(*) FROM arg_city WHERE country_code = "#39"RU"#39
   Parameters = <>
   Left = 128
   Top = 24
 end
end


procedure TForm1.Button1Click(Sender: TObject);
begin
 db.Connected := true;
 ds.Open;
 try
   ShowMessageFmt("count = %s", [ds.Fields[0].AsString]);
 finally
   ds.Close;
 end;
end;


результат вполне адекватен


 
SQLEXPRESS   (2011-07-26 19:05) [19]


> Parameters = <>

а глючит, когда они есть


 
Игорь Шевченко ©   (2011-07-26 20:54) [20]


> а глючит, когда они есть


object Form1: TForm1
 Left = 0
 Top = 0
 Caption = "Form1"
 ClientHeight = 293
 ClientWidth = 426
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "Tahoma"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 332
   Top = 252
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 0
   OnClick = Button1Click
 end
 object db: TADOConnection
   Connected = True
   ConnectionString =
     "Provider=OraOLEDB.Oracle.1;Password=bar;Persist Security I" +
     "nfo=True;User ID=foo;Data Source=sles10"
   Provider = "OraOLEDB.Oracle.1"
   Left = 32
   Top = 24
 end
 object ds: TADODataSet
   Connection = db
   CommandText = "SELECT COUNT(*) FROM arg_city WHERE country_code = :CC"
   Parameters = <
     item
       Name = "CC"
       DataType = ftString
       Size = -1
       Value = Null
     end>
   Left = 128
   Top = 24
 end
end


procedure TForm1.Button1Click(Sender: TObject);
begin
 db.Connected := true;
 ds.Parameters.ParamByName("CC").Value := "RU";
 ds.Open;
 try
   ShowMessageFmt("count = %s", [ds.Fields[0].AsString]);
 finally
   ds.Close;
 end;
end;


И с параметрами не глючит. Это у тебя ADO кривое (или еще что)


 
SQLEXPRESS   (2011-07-26 20:59) [21]

теперь ты их в дизайне определил, а глючит, когда не до определишь в рантайме
да и не глючит, а аккуратнее надо быть просто.
У нас изначально какой вопрос был? Как автор такого добился. Я нашел как - именно если параметры в where не до определены.


 
Игорь Шевченко ©   (2011-07-26 21:42) [22]


> У нас изначально какой вопрос был?


У автора параметров изначально не было вообще. Ву компрене ?


>  Как автор такого добился.


автору давно пофиг, на вопрос в [5] ответа нет и не будет.

Но, включив телепатор, могу предположить, что у автора кривой/не тот провайдер, кривое ADO или кривое то, что у программистов обычно из задницы растет.

Более того, изменив пример на ADOQuery (вдруг местные последователи ислама правы в своих нападках на TADOQuery? )
я получил точно такой же результат, как с ADODataSet

object Form1: TForm1
 Left = 0
 Top = 0
 Caption = "Form1"
 ClientHeight = 293
 ClientWidth = 426
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "Tahoma"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 340
   Top = 224
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 0
   OnClick = Button1Click
 end
 object Button2: TButton
   Left = 340
   Top = 260
   Width = 75
   Height = 25
   Caption = "Button2"
   TabOrder = 1
   OnClick = Button2Click
 end
 object db: TADOConnection
   ConnectionString =
     "Provider=OraOLEDB.Oracle.1;Password=bar;Persist Security I" +
     "nfo=True;User ID=foo;Data Source=sles10"
   Provider = "OraOLEDB.Oracle.1"
   Left = 32
   Top = 24
 end
 object ds: TADODataSet
   Connection = db
   CommandText = "SELECT COUNT(*) FROM arg_city WHERE country_code = :CC"
   Parameters = <
     item
       Name = "CC"
       DataType = ftString
       Size = -1
       Value = Null
     end>
   Left = 128
   Top = 24
 end
 object q: TADOQuery
   Connection = db
   Parameters = <>
   SQL.Strings = (
     "SELECT COUNT(*) FROM arg_city WHERE country_code = "#39"RU"#39)
   Left = 204
   Top = 24
 end
end


unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DB, ADODB, StdCtrls;

type
 TForm1 = class(TForm)
   db: TADOConnection;
   ds: TADODataSet;
   Button1: TButton;
   q: TADOQuery;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 db.Connected := true;
 ds.Parameters.ParamByName("CC").Value := "RU";
 ds.Open;
 try
   ShowMessageFmt("count = %s", [ds.Fields[0].AsString]);
 finally
   ds.Close;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 db.Connected := true;
 q.Open;
 try
   ShowMessageFmt("count = %s", [q.Fields[0].AsString]);
 finally
   q.Close;
 end;
end;

end.


число записей одинаковое.



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

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

Наверх




Память: 0.53 MB
Время: 0.019 c
15-1453983731
K-1000
2016-01-28 15:22
2017.01.15
Тернарный оператор в Delphi


2-1425902713
KBO78
2015-03-09 15:05
2017.01.15
Как правильно быстрее найти элемент с ошибкой List index out of b


1-1346594556
Earl_Vadim
2012-09-02 18:02
2017.01.15
Библиотека LibUSB и DelphiXE2


2-1428448138
Дмитрий
2015-04-08 02:08
2017.01.15
Закладки в Word


15-1448881398
Анна
2015-11-30 14:03
2017.01.15
имеет ли право начальство поставить программу считывания информ