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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2014, 16:00   #1
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию Подсчитать кол-во различных элементов в "сложных" условиях

вопрос в конце...

Последний раз редактировалось ayPinki; 31.01.2014 в 18:21.
ayPinki вне форума Ответить с цитированием
Старый 31.01.2014, 16:07   #2
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

вот что вылетает при событии - нажатии на кнопку.
Изображения
Тип файла: jpg Безымянный.jpg (14.5 Кб, 127 просмотров)
ayPinki вне форума Ответить с цитированием
Старый 31.01.2014, 16:17   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Ну правильно, массив объявили, а размер не установили.
Код:
while  not  ReportQuery.Eof do
begin
SetLength(A, i);    
A[i]:=ReportQuery.FieldValues['kod'];
    i:=i+1;
   ReportQuery.Next;
end;
Это вам не JavaScript, где переменная сама себя объявит, расширит, если надо, и тип данных сменит.

Код:
ReportQuery.ParamByName('StartDate').Value:=StartdatatimePicker.Datetime;
ReportQuery.ParamByName('EndDate').Value:=EnddatatimePicker.Datetime;
Зачем так прямо?
Можно просто:
.AsDate := StartdatatimePicker.Date;
.AsDate := StartdatatimePicker.Date;

Последний раз редактировалось Человек_Борща; 31.01.2014 в 16:21.
Человек_Борща вне форума Ответить с цитированием
Старый 31.01.2014, 16:21   #4
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

вопрос в конце топика.
Изображения
Тип файла: jpg ре.jpg (21.0 Кб, 120 просмотров)

Последний раз редактировалось ayPinki; 31.01.2014 в 18:21.
ayPinki вне форума Ответить с цитированием
Старый 31.01.2014, 16:24   #5
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

I:= 0. Вот и вся инициализация.
doktor255 вне форума Ответить с цитированием
Старый 31.01.2014, 16:33   #6
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
I:= 0. Вот и вся инициализация.
убираю его, тогда у A получаются в итоге страшные индексы 44к++
а если так оставить(I:= 0) то ошибка- в после выше(
ayPinki вне форума Ответить с цитированием
Старый 31.01.2014, 17:30   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Не проще задать размер массива вне цикла ?
Код:
SetLength(A, ReportQuery.RecordCount);
i:=0;
while  not  ReportQuery.Eof do
begin
   A[i]:=ReportQuery.FieldValues['kod'];
   i:=i+1;
   ReportQuery.Next;
end;
ADD
Цитата:
Сообщение от ayPinki
кол-во РАЗЛИЧНЫХ значений поля 'kod' этой таблицы.
Код:
SELECT COUNT(kod) AS kod_count FROM (SELECT DISTINCT kod FROM Table) AS MyTable
Тогда оба цикла по сути не понадобятся, получите сразу число в единственной записи

Последний раз редактировалось phomm; 31.01.2014 в 17:37.
phomm вне форума Ответить с цитированием
Старый 31.01.2014, 17:35   #8
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

всё! массив получил, как мне подсчитать количество его различных элементов, подскажите пожалуйста !)
ayPinki вне форума Ответить с цитированием
Старый 31.01.2014, 18:03   #9
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

помогите пожалуйста! подсчитать кол-во разных чисел в A[i];
не работает (
Код:
kol:=0;
  for i:=1 to Lenght(A) do
   flag:=true;
   for j:=1 to Lenght(A) do
   if (A[j]=A[i]) and (j<>i) then
   flag:=false;
   if flag then
   kol:=kol+1;

Последний раз редактировалось ayPinki; 31.01.2014 в 18:07.
ayPinki вне форума Ответить с цитированием
Старый 31.01.2014, 18:21   #10
ayPinki
Пользователь
 
Регистрация: 11.12.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Не проще задать размер массива вне цикла ?
Код:
SetLength(A, ReportQuery.RecordCount);
i:=0;
while  not  ReportQuery.Eof do
begin
   A[i]:=ReportQuery.FieldValues['kod'];
   i:=i+1;
   ReportQuery.Next;
end;
ADD

Код:
SELECT COUNT(kod) AS kod_count FROM (SELECT DISTINCT kod FROM Table) AS MyTable
Тогда оба цикла по сути не понадобятся, получите сразу число в единственной записи
эмм, простите, куда этот SELECT вписывать?
ayPinki вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Excel как "калькулятор" сложных вычислений для других приложений Office denismix Microsoft Office Excel 10 21.03.2013 14:33
Подсчитать количество букв "й", "ы" и "я", содержащихся в заданной строке. VoltZZZ Помощь студентам 2 01.03.2012 23:39
Что означает "!" в условиях ? TrueMethod Общие вопросы C/C++ 7 02.10.2009 20:04
Excel выдает ошибку "слишком много различных форматов ячеек" Рогачева Татьяна Microsoft Office Excel 2 14.04.2009 08:50