![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтрация [D6, Paradox]
GetIt © (2004-04-06 20:29:00)Такой вопрос..
У стола сделали фильтрацию и из 30 записей, допустим, стало 10..
Так вот как узнать, что их стало 10, ведь DataSet.RecordCount возвращает количество
всех DataSet-овских "не фильтрованных" записей...
Я говорю конкретно про фильтрацию..
т.е. без использования Query, т.к. запрос слишком прост....
возможно ? как ?
GetIt (2004-04-13 10:41:00) [1]>> ЮЮ © (13.04.04 02:53) [14]
>> Закон: (после активации фильтра) + ("дойдет" <> "упрется").........
Тут я имел ввиду лишь частный случай своей задачи...
Т.е. все происходит "после активации фильтра", и EOF тут дает не то, что требуется....
>> Anatoly Podgoretsky © (13.04.04 09:05) [15]
>> Голову включить....
Head On.
>> что бы прореагировать нужно знать, что эта запись последнея, а для этого
>> cнова возвращаем тебя к Table.Last и требуем включение дополнительных мощностей.
Ну поскольку....
последний RecNo (после фильтрации) не будет равен RecordCount-у, то....
Сначало (сразу после фильтрации) встаем на последнюю строчку, запоминаем ее id и
в прогоне строчек Next-ом реагируем, когда RecNo=id.......
Одно из решений получено........
А мо еще как..........
Anatoly Podgoretsky (2004-04-13 09:05:00) [2]Голову включить, что бы прореагировать нужно знать, что эта запись последнея, а для этого снова возвращаем тебя к Table.Last и требуем включение дополнительных мощностей.
ЮЮ (2004-04-13 02:53:00) [3]>Закон: (после активации фильтра) + ("дойдет" <> "упрется")
Этот закон действует и при отсутствии фильтра.
Ну откуда, скажи, ДатаСету знать, что эта запись последняя, удовлетворяющая условию фильтра? Только просканировав до последней записи и уткнувшись в EOF он может быть в этом уверен. Либо стоит попробовать использовать индекс по полям, входящим в условия фильтра.
GetIt (2004-04-13 02:31:00) [4]Удалено модератором
Примечание: Создание пустых сообщений
GetIt (2004-04-12 14:09:00) [5]>> RDen (12.04.04 08:10) [10]
>> опс......
>> сорри, чё-то не то написал :(
8-)
>> ЮЮ © (12.04.04 08:31) [11]
>> Table.Last
Ну-у и-и-и.......
Ведь цель - не на последнюю строчку встать,
а когда до нее (последней строки) "дойдет" - сразу среагировать......
p.s.
Закон:
(после активации фильтра)
+
("дойдет" <> "упрется").........
ЮЮ (2004-04-12 08:31:00) [6]>А нужно, чтоб как только запись "дошла" до последней, сразу и......
Стол.24_бочонка_пороха,
в смысле
Table.Last
RDen (2004-04-12 08:10:00) [7]опс......
сорри, чё-то не то написал :(
RDen (2004-04-12 08:08:00) [8]var i:integer;
......
i:=Table1.Recordcount //после фильтрации
......
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Next;
if i = Table1.Recordcount - 1 then Form1.Caption:='Конец' else Form1.Caption:='Пока не Конец';
end;
з.ы. тока не понятно зачем это
GetIt (2004-04-10 22:14:00) [9]Да, но просто, еси, например
на форму ляпнуть стол, источ.данных и кнопку
Сделать стол активным (неважно на какой таблице)
а на кнопку повесить это:
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Next;
if Table1.Eof then Form1.Caption:='Конец' else Form1.Caption:='Пока не Конец';
end;
то заголовок не станет "Конец" до тех пор, пока
стол не "упрется" в последнюю запись.......
p.s.
Это оч. хорошо видно, еси еще и сетку повесить..........
А нужно, чтоб как только запись "дошла" до последней, сразу и......
RDen (2004-04-09 07:30:00) [10]>if Table1.RecNo=Table1.Recordcount then .......
А это не подойдёт что-ли? if Table1.Eof Then .....
GetIt (2004-04-09 02:49:00) [11]>> RDen (07.04.04 08:36) [5]
>> проверил, а у меня возвращает кол-во отфильтрованных записей
Действительно, бред какой то.....
Что-то не то тогда написал...
Что самое интересное, даже и не помню, чо хотел....
Во проглючило !!!...
но щас...
Суть такая:
таблица с ключевым уникальным индексом
Допустим, после после ее первого создания & заполнения в этом "уникальном" поле
все "цифорки" идут попорядку...
потом же (после фильтрации) на первом месте может оказаться строка с любым
(в зав-ти от условий выборки) значением этого поля...
так вот, после фильтрации встав на первую строку и спросив какой у нее
номер, я получу значение "уникального" поля у этой первой строки...
(не 1, а, допустим, 8)
мне же надо знать ее порядковый номер в текущем отображении
(еси смотреть на нее визуально), т.е.
порядковый номер не вообще во всей БД, а в данной фильтрации.....
номер строчки по-порядку........
Еси на примере:
сначало:
1 a
2 b
3 с
4 d
5 i
6 f
7 g
8 k
9 l
10 m
после фильтрации (Table1.Filter:='...' ):
4 d
6 f
7 g
10 m
мне надо по ним пробежаться (кол-во знаю...)
но не циклом..
при этом следить за текущей строкой (близко ли конец выборки)
где-то там Table1.Next;
и....
if Table1.RecNo=Table1.Recordcount then .......
не пойдет... т.к. (см. пример)
10(последний recNo) не будет равно 4(всего в выборке)....
может мне, наконец, надо просто поспать?!..............
или КАК???????
RDen (2004-04-07 08:36:00) [12]> DataSet.RecordCount возвращает количество
всех DataSet-овских "не фильтрованных" записей...
проверил, а у меня возвращает кол-во отфильтрованных записей
Sergey13 (2004-04-07 08:17:00) [13]>возможно ? как ?
Встать на первую и добежать циклом до последней, считая по пути следования.
Sirus (2004-04-07 07:40:00) [14]Выполни запрос с условиями фильтра для этой же таблицы...
А еще лучше, просто сделай все это на TQuery и все, тогда RecordCount будет возвращать нужное тебе количество записей.
GetIt (2004-04-06 21:04:00) [15]Как? так...
Table1.Filter:='...';
Table1.Filtered:=True;
>счетчик выбранных записей поставить
поподробнее.. в событии счетчик..?
>запрос с count
запрос с count в Table1.filter? и как?
Vlad (2004-04-06 20:54:00) [16]
> У стола сделали фильтрацию и из 30 записей, допустим, стало
> 10
А у "стола" фильтрацию как делали ? Если через событие OnFilterRecord, тогда просто можно счетчик выбранных записей поставить.
А вобще -то проще всего дать запрос с count и не мучаться.