Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Фильтрация   Найти похожие ветки 

 
GetIt   (2004-04-06 20:29) [0]

Такой вопрос..
У стола сделали фильтрацию и из 30 записей, допустим, стало 10..
Так вот как узнать, что их стало 10, ведь DataSet.RecordCount возвращает количество
всех DataSet-овских "не фильтрованных" записей...
Я говорю конкретно про фильтрацию..

т.е. без использования Query, т.к. запрос слишком прост....
возможно ? как ?


 
Vlad ©   (2004-04-06 20:54) [1]


> У стола сделали фильтрацию и из 30 записей, допустим, стало
> 10

А у "стола" фильтрацию как делали ? Если через событие OnFilterRecord, тогда просто можно счетчик выбранных записей поставить.
А вобще -то проще всего дать запрос с count и не мучаться.


 
GetIt   (2004-04-06 21:04) [2]

Как? так...
Table1.Filter:="...";
Table1.Filtered:=True;

>счетчик выбранных записей поставить
поподробнее.. в событии счетчик..?

>запрос с count
запрос с count в Table1.filter? и как?


 
Sirus ©   (2004-04-07 07:40) [3]

Выполни запрос с условиями фильтра для этой же таблицы...
А еще лучше, просто сделай все это на TQuery и все, тогда RecordCount будет возвращать нужное тебе количество записей.


 
Sergey13 ©   (2004-04-07 08:17) [4]

>возможно ? как ?
Встать на первую и добежать циклом до последней, считая по пути следования.


 
RDen   (2004-04-07 08:36) [5]

> DataSet.RecordCount возвращает количество
всех DataSet-овских "не фильтрованных" записей...

проверил, а у меня возвращает кол-во отфильтрованных записей


 
GetIt   (2004-04-09 02:49) [6]

>> 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-09 07:30) [7]

>if Table1.RecNo=Table1.Recordcount then .......

А это не подойдёт что-ли? if Table1.Eof Then .....


 
GetIt   (2004-04-10 22:14) [8]

Да, но просто, еси, например
на форму ляпнуть стол, источ.данных и кнопку

Сделать стол активным (неважно на какой таблице)

а на кнопку повесить это:

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Next;
if Table1.Eof then Form1.Caption:="Конец" else Form1.Caption:="Пока не Конец";
end;


то заголовок не станет "Конец" до тех пор, пока
стол не "упрется" в последнюю запись.......

p.s.
Это оч. хорошо видно, еси еще и сетку повесить..........

А нужно, чтоб как только запись "дошла" до последней, сразу и......


 
RDen   (2004-04-12 08:08) [9]

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;

з.ы. тока не понятно зачем это


 
RDen   (2004-04-12 08:10) [10]

опс......
сорри, чё-то не то написал :(


 
ЮЮ ©   (2004-04-12 08:31) [11]

>А нужно, чтоб как только запись "дошла" до последней, сразу и......
Стол.24_бочонка_пороха,

в смысле

Table.Last


 
GetIt   (2004-04-12 14:09) [12]

>> RDen   (12.04.04 08:10) [10]
>> опс......
>> сорри, чё-то не то написал :(

8-)

>> ЮЮ ©   (12.04.04 08:31) [11]

>> Table.Last

Ну-у и-и-и.......
Ведь цель - не на последнюю строчку встать,

а когда до нее (последней строки) "дойдет" - сразу среагировать......

p.s.
Закон:
(после активации фильтра)
+
("дойдет" <> "упрется").........


 
GetIt   (2004-04-13 02:31) [13]

Удалено модератором
Примечание: Создание пустых сообщений


 
ЮЮ ©   (2004-04-13 02:53) [14]

>Закон: (после активации фильтра) + ("дойдет" <> "упрется")

Этот закон действует и при отсутствии фильтра.

Ну откуда, скажи, ДатаСету знать, что эта запись последняя, удовлетворяющая условию фильтра? Только просканировав до последней записи и уткнувшись в EOF он может быть в этом уверен. Либо стоит попробовать использовать индекс по полям, входящим в условия фильтра.


 
Anatoly Podgoretsky ©   (2004-04-13 09:05) [15]

Голову включить, что бы прореагировать нужно знать, что эта запись последнея, а для этого снова возвращаем тебя к Table.Last и требуем включение дополнительных мощностей.


 
GetIt   (2004-04-13 10:41) [16]

>> ЮЮ ©   (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.......

Одно из решений получено........
А мо еще как..........



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
8-1076518876
Larry
2004-02-11 20:01
2004.04.11
Заливка многогранника


4-1079599813
b0bi
2004-03-18 11:50
2004.04.11
Как получить Handle


1-1080199485
Larry
2004-03-25 10:24
2004.04.11
StatusBar


6-1075611081
@ac
2004-02-01 07:51
2004.04.11
Разрыв соединения с инетом


7-1076071597
Davey
2004-02-06 15:46
2004.04.11
Имя пользователя, запустившего процесс, как в Task Manager e в ХР