Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];

Вниз

Интересная вещь в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.042 c
2-1419009922
AlexeyTG
2014-12-19 20:25
2017.01.15
Заново переписал Просьба оценить "корявость кода" v2


2-1420632130
enzain
2015-01-07 15:02
2017.01.15
"Image File Execution Options" и параметр debugger


15-1452693339
кгшзх
2016-01-13 16:55
2017.01.15
TClientDataSet склеить датапакеты


2-1428788906
BBC
2015-04-12 00:48
2017.01.15
Фокусировка PaintBox


2-1395094367
Лакримакристи
2014-03-18 02:12
2017.01.15
Проверка наличия последнего слеша в пути к папке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский