определение количества уникальных записей
Такая задача:
У меня есть фаил базы данных FoxPro - file.dbf
в нем есть поле счет, допустим:
2620
2620
2621
2620
2621
2623
2623
мне надо найти колличество уникальных (неповторяющихся)счетов, тоесть прога должна выдать - 3, так как всего 3 вида счета
пытался делать так:
схемма приблизительная (может че другое посоветуете)
while (!Table->Eof)
{
if (Table1->fieldByName ("schet")==Memo->lines) //сдесь не понятно как сравнивать с каждой существующей записью в Memo
{
Table1->Next();
}
else
{
Memo->lines=Table1->fieldByName ("schet");
Table1->Next();
}
}
далее количество строк в Memo соответствует количеству уникальных счетов.
Такая задача:
У меня есть фаил базы данных FoxPro - file.dbf
в нем есть поле счет, допустим:
2620
2620
2621
2620
2621
2623
2623
мне надо найти колличество уникальных (неповторяющихся)счетов, тоесть прога должна выдать - 3, так как всего 3 вида счета
пытался делать так:
схемма приблизительная (может че другое посоветуете)
while (!Table->Eof)
{
if (Table1->fieldByName ("schet")==Memo->lines) //сдесь не понятно как сравнивать с каждой существующей записью в Memo
{
Table1->Next();
}
else
{
Memo->lines=Table1->fieldByName ("schet");
Table1->Next();
}
}
далее количество строк в Memo соответствует количеству уникальных счетов.
Сделай запрос, в запросе сгруппируй это поле, и готово...
запрос мне не подходит, в этом файле куча другой фигни, которая сортируется и отберается по многим параметрам с помощью фильтров, вот осталось последний штрих...
Я так понял, что тебе нужно узнать чисто количество, так?
Кинь на форму Query его привяжи к файлу(dbf), и сделай выборку с группировкой, оно тебе от группирует, вытягиваешь Count по этому полю, и готово.
Пару минут роботы, мне кажется проще не получится, да и намного быстрее чем цыкли…
`счет`
) )
FROM `mytable`
и нет проблем
`счет`
) )
FROM `mytable`
и нет проблем
пробовал вот так:
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Select count (distinct rs_vklad)");
Query1->SQL->Add("From svod_all.dbf");
Query1->Open();
int iKolZap=Query1->RecordCount;
Label8->Caption=iKolZap;
Query1->Close();
и в сам компонент прописывать:
Select count(distinct rs_vklad)
From "svod_all.dbf"
но в любом случае выдает 1, не пойму почему (((((
а если написать запрос так: Query1->SQL->Text= "Select distinct rs_vklad From svod_all.dbf where kod_otd='102' and vid_prg='ZP'"; - то он работает. Правильно ли я думаю - что запрос с фильтром не работает? Или тут какой то подводный камень?
Работает, просто фильтрация происходит уже после выполнения запроса.
Фильтры предназначены для простых действий, работают локально, что снижает нагрузку на сервер, но тормозят с большим объёмом записей. Выборка уникальных записей однозначно должна делаться запросом.
Фильтры предназначены для простых действий, работают локально, что снижает нагрузку на сервер, но тормозят с большим объёмом записей. Выборка уникальных записей однозначно должна делаться запросом.
тоесьт схемма запрос, фильтр - работает, а схемма фильтр запрос - не работает?
я ведь сначало фильтрую а потом уже применяю запрос.
Может ли запрос сделать все то что делают фильтры? Можно от их использования отказаться?
Фильтры предназначены для простых действий, работают локально, что снижает нагрузку на сервер, но тормозят с большим объёмом записей. Выборка уникальных записей однозначно должна делаться запросом.
Query1->SQL->Add("From svod_all.dbf");
Query1->SQL->Add("Where vid_prg='ZP' and open and kod_otd='"+Edit2->Text+"'");
Query1->Open();
int iKolZap=Query1->RecordCount;
Label8->Caption=iKolZap;
Query1->Close();
Всем спасибо, все работает, по вышенаписанным методам, ухитрился мспользовать и фильтр и запрос паралельно.
Темма закрыта!!!