![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Номер записи [D6, Paradox]
13-ый © (2004-01-27 12:17:00)Есть таблица(Table Не Query-это принципиально) необходимо после фильтрации данных в этой таблице вычислить номер каждой записи.
Т.е. если было 6 записей ,а после фильтрации осталось 3,то и соответственно номера должны идти по-порядку (в первом случае от 1 к 6,а во втором от 1 к 3 не смотря ни на что)
Petr V. Abramov (2004-02-29 01:43:00) [1]Ну и про BeforeOpen не забыть
Petr V. Abramov (2004-02-29 01:41:00) [2]Наталия © (23.02.04 07:36) [55] дело говорит. На экране, как правило, места мало - во-первых, колонка "№ п/п" - в 90% случаев - информация лишняя, это - во-вторых. А в отчете ей (такой колонке) - самое место, бумажке умного вида прибавляет. Если действительно надоили ну очень хочется - я б использовал поле формы (не глобальную переменную!) + OnCalcFields
MyCounter := 0
Filtered := true;
В OnCalcFields:
inc(MyCounter);
FiledByName('Nomer_PP').Value := MyCounter
13-ый (2004-02-28 22:14:00) [3]Какие отчёты млин....
Не только для печати ,но и чтоб красиво на экране было
Наталия (2004-02-23 07:36:00) [4]А если это нужно для печати - причём здесь Grid? Используй отчёты - или тебе религия не позволяет?
13-ый (2004-02-22 16:00:00) [5]Вы поймите что номера не должны быть прилеены к записи,а постоянно идти по порядку .Такое нужно для распечатки данных. Просто представьте как красиво!!!!
Sergey13 (2004-02-22 15:46:00) [6]Боже мой. Ты целый месяц думаешь над проблемой, которую сам придумал.
>Но при фильтрации и при пересортировке номера путаются.
Ну и кому нужны такие номера. Если они даже не будут путаться. То Иванов был 12, то после фильтрации стал 3. И что? Кому это надо?
13-ый (2004-02-22 15:25:00) [7]Блин вы поймите,что нужно делать записи в калк фиелд.
Я ето делаю так:
procedure TForm1.T1CalcFields(DataSet: TDataSet);
begin
if yu=false then
begin
if DbGridEh1.VisibleRowCount<=No then no:=0;
inc(no);
T1Nom.Value:=no;
end;
end;
где No- глобальная переменная
Так вот её нужно обнавлять при всех изменениях .
Вроде обнавляю.
Но при фильтрации и при пересортировке номера путаются.
ЮЮ (2004-02-09 06:36:00) [8]>13-ый (08.02.04 19:04) [50]
Достаточно 1 раз, после изменения фильтра, пробежав от начала(First) до конца (EOF) Таблицы, т.к. при этом будем попадать только в записи, удовлетворяющие фильтру
13-ый (2004-02-08 19:04:00) [9]Deniz
ты правильно понял,но варианты выхода мне не подходят.
Я сделал калк фиелд в котором идёт начисление глобальной переменной.
Мне нужен список событий после которых идёт просчёт полей.
Anatoly Podgoretsky (2004-02-03 09:46:00) [10]Именно это не база, а разграфленный лист бумаги, от того, что несколько строк заклены нумерация не измения и нумерация нужна для работы формул, такая уж там технология.
Ссылка на строку 238 возможно только при налиции инентичных наборов и фильтрации, больше пользы от ключа, там возникает одназначность. А при искуственном создании номеров часто возникают сильные проблемы, это известно тому, кто работает с клиентом удалено. Отчеты, типа накладные совсем другое дело, во первых там это поддержано самим принципом и отпечатаный отчет не изменится, но и там номер нужен не для идентификации, а просто так, для счета позиций.
Все это было бы возможно и для баз, если бы речь шла о таблицах полностью закаченых в память, но о какой закачке может идти речь например для нескольких десятках миллионах записей. Но если такое нужно, то есть TClientDataset, но результаты будут отличаться в разных сеансах работы.
Deniz (2004-02-03 09:20:00) [11]Можно и мне пару слов вставить :)
> Некто (28.01.04 13:07) [23]
>Это рассудит рынок. Плохую программу никто не купит. :)
Согласен, если только есть выбор, а программа не директива сверху :) Видели ли Вы персонифицированный учет во время его начала? (2000 г. если память не изменяет). Это ...
Но я все же думаю, что в нумерации строк таблицы нет ничего крамольного. Ведь пользователи не жалуются на нумерацию строк и столбцов в том же Excel'е. Ведь удобно сказать, сидя с собеседником перед монитором: "обратите внимание на строку 238". А большего, поди, от такой нумерации и не требуется.
Так вроде в Excel'е при автофильтре строки не перенумируются, а вопрос автора именно про это(перенумирование).
Для автора можно предложить сл-щее:
1. Использовать не DBGrid а StringGrid, ListView и т.д. и самому выводить информацию!
2. Написать своего наследника от DBGrid с необходимыми св-вами.
3. Написать письмо разработчикам (EhLib, Quantum и т.д.) с предложением внести дополнительную функцианальность.
Sergei! (2004-02-03 05:12:00) [12]Я имею ввиду, что как только изменились условия фильтра его необходимо сбросить. Иначе у тебя все номера будут идти по возрастающей. Например, установил ты фильтр на первую букву фамилий "С". То делаешь примерно так:
...
TTable.Filtered:=False;
GlobalCounter:=0;
TTable.Filtered:=True;
...
13-ый (2004-02-01 15:19:00) [13]Sergei!
как збрасывать GlobalCounter? при всех изменениях?
Sergei! (2004-02-01 15:09:00) [14]Не в таком виде, но подобный код у меня работает. Даже если данный код в чем то не верен - ход мыслей уже понятен. Человеку нужен был ответ на его вопрос, я дал ему один из возможных путей куда копать.
Anatoly Podgoretsky (2004-02-01 15:01:00) [15]Sergei! (01.02.04 14:18) [40]
И ты конечно попробовал, потестировал?
13-ый (2004-02-01 14:51:00) [16]Последнее не пройдёт оно при каждом обновлении будет у каждой записи значение прибавлять на 1.
я имею в виду как збрасывать GlobalCounter? при всех изменениях?
Sergei! (2004-02-01 14:46:00) [17]Так он и обнавляется
GlobalCounter+=1
тоже самое что и
GlobalCounter:=GlobalCounter+1;
Но вот сейчас только пришла в голову мысль. Каждый раз как менятеются условия фильтра и еще что-то необходимо счетчик т.е. GlobalCounter приравнивать 0.
А можно вообще без него обойтись, т.е. напрямую TTable1MyCalcNumField.Value:=TTable1MyCalcNumField.Value+1
13-ый (2004-02-01 14:33:00) [18]Да да да да и ещё раз да!!!! Но GlobolCounter Как-то нужно обнавлять? как?
Sergei! (2004-02-01 14:18:00) [19]Я кажется понял. Можно ввести поле вычисляемое. При фильтрации данному полю задавать номер по порядку. Т.е.
var
GlobalCounter:longint;
...
procedure TTable1.OnFilterRecord...
begin
if <условие фильтра> then
begin
GlobalCounter+=1;
TTable1MyCalcNumField.Value:=GlobalCounter;
end
else ...
end;
вроде, то что нужно.
13-ый (2004-02-01 14:08:00) [20]И так давайте снова:
1)ТАблица TTable-без обсуждений
2)RecNo при фильтрации даёт номер записи не в отображаемых данных,а во всей таблице(основная проблема)
3)Задача - выводить в вычесляемом поле номер отображаемой в Гриде записи
Т.е. Без фильтрации в Гриде (при 10-ти записях) в выч.поле отображаются все номера от 1 до 10 при фильтрации ,если остаётся отображаться 3 записи, от 1 до 3
вот так!!!