Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2015, 21:32   #1
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию Количество строк по условию из результата выборки хранимой процедуры

Помогите, пожалуйста, советом... Не знаю в каком направлении копать...

Есть хранимая процедура FireBird
Код:
create or alter procedure COUNT_CALLS (
    PHONE_A char(10),
    PHONE_B char(10),
    DATE_S timestamp,
    DATE_PO timestamp)
returns (
    ID integer,
    IDA char(10),
    IDB char(10),
    CALL_DATE timestamp,
    PRIZNAK char(10),
    DLINA integer)
as
begin
for select ID, IDA, IDB,Call_Date, Priznak, Dlina
  from Calls
  where IDa = :Phone_A and IDb=:phone_b
  AND  (call_date>:Date_s AND call_date<:Date_po)
  into :ID, :IDA, :IDB, :Call_Date, :Priznak, :Dlina
do suspend;

end
Как вывести какое количество строк в результате ее работы, да еще и по условию?
yulia вне форума Ответить с цитированием
Старый 28.05.2015, 21:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А FIRST ... SKIP не работают в таком запросе?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.05.2015, 21:54   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А как ты ее вызываешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2015, 06:33   #4
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А как ты ее вызываешь?
через IBQuery

Цитата:
Сообщение от Аватар Посмотреть сообщение
А FIRST ... SKIP не работают в таком запросе?
скорей всего работают, но как они могут помочь? Ведь если я правильно понимаю, то First берет указанное количество записей сначала, а Skip выбрасывает записи с конца. А у меня такая история, например, в результате выполнения процедуры получается

Абонент1 Абонент2 Звонок
7777777777 6666666666 входящий
7777777777 6666666666 исходящий

И надо посчитать сколько входящих и сколько исходящих

Если бы это была такая таблица, то все понятно COUNT и поехали. Но можно ли прилепить COUNT к этой процедуре? Или надо как-то физически сохранить этот результат выборки и к нему делать отдельный запрос?

Последний раз редактировалось Stilet; 29.05.2015 в 08:37.
yulia вне форума Ответить с цитированием
Старый 29.05.2015, 06:51   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
скорей всего работают, но как они могут помочь?
Ни как, это вопрос так понял
Цитата:
Если бы это была такая таблица, то все понятно COUNT и поехали
так таблица есть, примерно в этом направлении
Код:
select С1.*,(SELECT COUNT(*) FROM Calls С2 WHERE C2.id=C1.id AND ...) AS CountЧегоТо
  from Calls С1
  where ...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.05.2015, 08:38   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
через IBQuery
А IBQuery.RecordCount не дает результата?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2015, 12:03   #7
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А IBQuery.RecordCount не дает результата?
Кажется вопрос не полный получился.. вот как у меня это все обрабатывается:
Код:
s:=DateTimePicker1.DateTime;
po:=DateTimePicker2.DateTime;
for k := 0 to Memo1.Lines.Count do
A[k]:=Memo1.Lines[k];
k:=Memo1.Lines.Count;
for j:=0 to k do
begin
  IBQuery2.sql.text:='select * from COUNT_CALLS(:Phone_A, :Phone_B, :Date_s, :Date_po )';
  IBQuery2.ParamByName('Phone_A').asString:=Edit1.text;
  IBQuery2.ParamByName('Phone_B').asString:=A[j];
  IBQuery2.ParamByName('Date_s').asDateTime:=s;
  IBQuery2.ParamByName('Date_po').asDateTime:=po;
  IBQuery2.Open;
  IBQuery2.first;
  while not IBQuery2.eof do
  begin
    memo1.lines[j]:= IBQuery2.FieldByName('IDA').AsString +' '+
    IBQuery2.FieldByName('IDB').AsString +' '+ IBQuery2.FieldByName('Priznak').AsString;
    IBQuery2.next;
  end;
end;

А разве IBQuery.RecordCount может считать по условию?

Последний раз редактировалось yulia; 29.05.2015 в 12:06.
yulia вне форума Ответить с цитированием
Старый 29.05.2015, 12:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А разве IBQuery.RecordCount может считать по условию?
Должен по идее.
И почему ты в цикл не вставишь некую переменку, которая будет увеличиваться на единицу, чтоб после цикла дать кол-во записей, что вернул запрос?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2015, 12:27   #9
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Должен по идее.
И почему ты в цикл не вставишь некую переменку, которая будет увеличиваться на единицу, чтоб после цикла дать кол-во записей, что вернул запрос?
не совсем так надо.. мне как раз надо считать количество записей не после всего цикла, а в каждом круге (по каждому параметру).

Ну, например,
после одного круга процедура вернула
Абонент1 Абонент2 Звонок
7777777777 6666666666 входящий
7777777777 6666666666 исходящий

При RecordCount мне выдаст 2, а мне надо входящие - 1, исходящие - 1.
yulia вне форума Ответить с цитированием
Старый 29.05.2015, 12:59   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А-а-а... Так это тогда либо как Аватар показал, либо указать Group BY и Count() в списке полей запроса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка результата выборки TemaMadest SQL, базы данных 2 23.03.2015 11:47
Вызов хранимой процедуры Swatch PHP 0 02.08.2013 13:18
Сканирования строк. Зная количество строк и первый элемент, это количество символов с троке. dimon9 Общие вопросы C/C++ 8 02.11.2012 22:40
Параметры хранимой процедуры yasic БД в Delphi 4 26.01.2012 18:10
Вызов хранимой процедуры welcomeTo Помощь студентам 0 04.08.2011 20:26