Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

Номер записи   Найти похожие ветки 

 
13-ый   (2004-01-27 12:17) [0]

Есть таблица(Table Не Query-это принципиально) необходимо после фильтрации данных в этой таблице вычислить номер каждой записи.
Т.е. если было 6 записей ,а после фильтрации осталось 3,то и соответственно номера должны идти по-порядку (в первом случае от 1 к 6,а во втором от 1 к 3 не смотря  ни на что)


 
Sandman25 ©   (2004-01-27 12:23) [1]

Зачем это нужно?
Добиться этого довольно сложно, особенно с учетом фильтрации.


 
13-ый   (2004-01-27 12:26) [2]

Это необходимо для отображения номера учащегося в таблице студентов.
Делаю это при помощи вычисляемового поля в котором Value:=Table1.RecNo;


 
Sandman25 ©   (2004-01-27 12:28) [3]

Я так и думал. Но при фильтрации номера остаются прежними...
И все-таки, зачем это нужно? Зачем номер студента отображать? Общее количество недостаточно?


 
13-ый   (2004-01-27 12:32) [4]

Да нет это необходимо.Должо быть поле в котором отображение должно быть номера каждой записию


 
Sandman25 ©   (2004-01-27 12:37) [5]

Для Query можно добавить поле:

select cast(0 as integer) nomer, T.*
 from table T

А затем каждый раз после фильтрации пробегаться по DataSet и присваивать новое значение nomer-у. Только надо будет использовать CashedUpdates = true.


 
VAleksey ©   (2004-01-27 12:47) [6]


> 13-ый   (27.01.04 12:32) [4]

Так ты объяснишь ЗАЧЕМ это нужно иным образом, кроме "необходимо"?

> Это необходимо для отображения номера учащегося в таблице
> студентов.

Это - не номер учащегося.


 
div ©   (2004-01-28 10:19) [7]

Напиши обработчик события OnCalcFields примерно так (предполагая, что твое калькулироемре поле называется "RowNo"):

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
{$J+} // - в D7 разрешает изменять типизированные константы
const
 RowNo: integer = 0;
begin
 if DataSet.RecNo = 1 then
   RowNo := 0;
 RowNo := RowNo + 1;
 DataSet.FieldBayName("RowNo").AsInteger := RowNo;
end;


 
Плохиш_   (2004-01-28 10:35) [8]

>div ©   (28.01.04 10:19) [7]

Сам-то пробовал?


 
div ©   (2004-01-28 10:42) [9]

2 Плохиш_
пробовал...


 
jack128 ©   (2004-01-28 10:48) [10]

и что  получилось?
ЗЫ
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
 Dataset.FieldByName("RowNo").AsInteger := DataSet.RecNo;
end;


 
Некто   (2004-01-28 11:26) [11]

В обработчике прорисовки Грида выводить номер текущей записи.


 
Anatoly Podgoretsky ©   (2004-01-28 11:59) [12]

Забыть об этом, как о не нужной вещи и из за отсутствия реализации этого в базе данных.


 
Некто   (2004-01-28 12:03) [13]

2 Anatoly Podgoretsky
 "Если звезды зажигаются, значит, это кому-то нужно..." (С)


 
Anatoly Podgoretsky ©   (2004-01-28 12:13) [14]

О нужности/ненужности можно много говорить, но данный номер за собой ничего не несет.


 
Volodya_   (2004-01-28 12:13) [15]

2 Некто   (28.01.04 11:26) [11]
На какой точно обработчик вешать?


 
div ©   (2004-01-28 12:15) [16]

мда уж... чушь написал и сам не понял... если кто скажет как это можно сделать поставлю пиво :)))

2 jack128 ©   (28.01.04 10:48) [10] - это тож не то что он хочет...


 
Некто   (2004-01-28 12:22) [17]

OnDrawColumnCell


 
Некто   (2004-01-28 12:26) [18]

2 Anatoly Podgoretsky
 Существует единственный критерий нужности: если человек задал вопрос - значит, ему это нужно.


 
Anatoly Podgoretsky ©   (2004-01-28 12:36) [19]

Некто   (28.01.04 12:26) [18]
Это уже не первый человек. Следующий вопрос от пользователя, почему у этого человек поменялся номер.


 
Sandman25 ©   (2004-01-28 12:36) [20]

[18] Некто   (28.01.04 12:26)

Вы не будете предлагать человеку другое решение, если он уже какое-то выбрал, причем выбрал, не зная всех возможных решений? Если человек пытается уменьшить размер файла на 1 байт, считывая весь файл в TStringList, изменяет один Strings, и записывает в тот же файл, но наткнулся на ограничение размера, Вы ему посоветуете уйти с Win95 или добавить памяти? Вместо того, чтобы предложить Truncate?


 
Некто   (2004-01-28 12:49) [21]

О!... Церберы накинулись! :)... Спровоцировал таки!... ;)

2 Anatoly Podgoretsky
 То, о чем идет речь - не номер человека. Это - номер записи в отфильтрованном DataSet. Порядковый номер записи в результирующем наборе данных. (Перефразировать по-другому?).

>>из за отсутствия реализации этого в базе данных
Во-первых, то, о чем идет речь - не уровень данных, а уровень представления. Поэтому о базе данных говорить поздно. Хотя, если Вас послушать, тогда давайте вообще откажемся от нумерации! Начнем с номеров страниц в книгах, потому что номер страницы никак не связан с информацией, представленной в книге. Согласны?
Во-вторых, в DataSet"e есть свойство RecNo. Интересно, зачем оно нужно? Не объясните?

2 Sandman25
 Вопрос стоял не "что сделать", а "как сделать". Вот когда он спросит "как сделать лучше" - тогда и советовать будете. А до тех пор - или отвечайте на поставленный вопрос, или молчите. Потому что советов можно надавать сколько угодно. Только нужны ли они вопрошающему?


 
Sandman25 ©   (2004-01-28 12:58) [22]

[21] Некто   (28.01.04 12:49)

В данном случае согласен, мне следовало молчать. Только потом не жалуйтесь, если какая-то программа будет становиться в автозагрузку, гадить в реестре и запрашивать по 3 подтверждения на каждую операцию. Ведь Вы запретили мне советовать, что следует делать, а что не следует :)


 
Некто   (2004-01-28 13:07) [23]

2 Sandman25
 Это рассудит рынок. Плохую программу никто не купит. :)
 Но я все же думаю, что в нумерации строк таблицы нет ничего крамольного. Ведь пользователи не жалуются на нумерацию строк и столбцов в том же Excel"е. Ведь удобно сказать, сидя с собеседником перед монитором: "обратите внимание на строку 238". А большего, поди, от такой нумерации и не требуется.


 
Sandman25 ©   (2004-01-28 13:09) [24]

[23] Некто   (28.01.04 13:07)

Согласен.
Но опять-таки с оговорками. Если из-за этого не будет замедления, которое для пользователя более неудобно, чем ему номера удобны. Надеюсь, эта конструкция понимаема :)


 
Anatoly Podgoretsky ©   (2004-01-28 13:15) [25]

Некто   (28.01.04 12:49) [21]
Давай не будем отказываться от номеров в накладных, отчетов.
Речь же идет об RecNo, который совсем не RecNo, и который оставлен для совместимости с древними временами, в большинстве случаев ты получишь номер -1

Ему же по уточнению в [2] нужен не RecNo, "Это необходимо для отображения номера учащегося в таблице студентов"


 
Volodya_   (2004-01-28 13:16) [26]

2 Некто   (28.01.04 12:22) [17]
Проц грузится на 100%


 
Некто   (2004-01-28 13:16) [27]

Замедления в работе программы или в работе с программой?...

Если программы, то вряд ли это вызовет замедление:

procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 if (DataCol = 0) then
   DBGrid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, IntToStr(Table.RecNo));
end;

P.S. Ух... о чем мы спорим? 13-й давно уже ушел... :о)


 
Некто   (2004-01-28 13:19) [28]

2 Sandman25
 У Володи-С-Подчерком от этого процессор грузится на 100%. Вот это уже проблема...


 
Sandman25 ©   (2004-01-28 13:19) [29]

[27] Некто   (28.01.04 13:16)

Можно еще попробовать OnGetText, для этого TField.
Все, прекращаю "спорить". Вроде мы друг друга поняли :)


 
Плохиш   (2004-01-28 13:21) [30]

>Некто   (28.01.04 13:16) [27]
>    DBGrid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top
> + 2, IntToStr(Table.RecNo));

А что, если к таблице применить фильтр, RecNo то же измениться?


 
Некто   (2004-01-28 13:26) [31]

2 Anatoly Podgoretsky
 >>номера учащегося
 "Я бывают разные!" (С) Заяц :)

Вариант 1: Для распечатки списка студентов по группам. Вас в данном случае интересует номер студента в базе данных, или просто порядковый номер студента в списке студентов группы, отсортированном в алфавитном порядке?

Вариант 2: Регистрационный номер студента в базе данных. В общем случае такое номер используется в качестве первичного ключа. Если этот номер присутствует в базе данных, то у вопрошающего вряд ли бы возник (заданный) вопрос.

P.S. С радостью рассмотрю другие варианты...


 
Некто   (2004-01-28 13:27) [32]

2 Sandman25
 :)


 
Некто   (2004-01-28 13:32) [33]

2 Плохиш
 Не буду говорить о таблицах Paradox (13-ый   (27.01.04 12:26) [2]), но в ADO меняется...


 
Anatoly Podgoretsky ©   (2004-01-28 13:39) [34]

Некто   (28.01.04 13:26) [31]
Вроде я уже сказал про отчеты, или мне почуилось, в отчетах это святое, но там и не RecNo, а чистый порядковы, вычисляемый номер, никак проблем ни с номером ни с ненужностью.


 
Плохиш   (2004-01-28 13:39) [35]

>Некто   (28.01.04 13:26) [31]

>Вариант 1
Делается средствами подготовки отчёта

>Вариант 2
Никакого отношения к заданному вопросу (порядковый номер) не имеет


 
Некто   (2004-01-28 13:57) [36]

2 Плохиш

> >Вариант 1
> Делается средствами подготовки отчёта

Да, извините, опечатался. Перефразирую: "Для выборки списков студентов по группам"
Какой смысл использовать генераторы отчетов, если конечному пользователю достаточно простого представления в виде электронной таблицы? Просто чтобы посмотреть, обсудить, сидя перед монитором, и закрыть окно. Не больше, но и не меньше.


> >Вариант 2
> Никакого отношения к заданному вопросу (порядковый номер)
> не имеет

см. [31] "...у вопрошающего вряд ли бы возник (заданный) вопрос.". Попрошу меня не цитировать! :)

2 Anatoly Podgoretsky

> а чистый порядковы, вычисляемый номер

см. Вопрос, "вычислить номер каждой записи"

И давайте прекращать спорить! Ведь все уже давно всё поняли. Идет только отстаивание собственной правоты. Не более!


 
Anatoly Podgoretsky ©   (2004-01-28 14:01) [37]

Подай пример, там посмотрим.


 
Некто   (2004-01-28 14:13) [38]

http://cards.yandex.ru/cards/c604adfd6fa97e4ab0513f11fea42bd5.gif


 
13-ый   (2004-02-01 14:08) [39]

И так давайте снова:
1)ТАблица TTable-без обсуждений
2)RecNo при фильтрации даёт номер записи не в отображаемых данных,а во всей таблице(основная проблема)
3)Задача - выводить в вычесляемом поле номер отображаемой в Гриде записи
Т.е. Без фильтрации в Гриде (при 10-ти записях) в выч.поле отображаются все номера от 1 до 10 при фильтрации ,если остаётся отображаться 3 записи, от 1 до 3
вот так!!!


 
Sergei!   (2004-02-01 14:18) [40]

Я кажется понял. Можно ввести поле вычисляемое. При фильтрации данному полю задавать номер по порядку. Т.е.

var
GlobalCounter:longint;

...

procedure TTable1.OnFilterRecord...
begin
if <условие фильтра> then
begin
 GlobalCounter+=1;
 TTable1MyCalcNumField.Value:=GlobalCounter;
end
else ...
end;


вроде, то что нужно.



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

Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.039 c
1-1079013910
sherminator
2004-03-11 17:05
2004.03.28
ComboBox и исходное состояние...


7-1072779417
Davey
2003-12-30 13:16
2004.03.28
!!!!!!!!!!!!!!!!!!<NtQuerySystemInformation>!!!!!!!!!!!!!!!


14-1078421430
Rouse_
2004-03-04 20:30
2004.03.28
С Днем Рождения 1 - 2 Марта (Наверстывая упущенное :)


3-1078051449
Lisa
2004-02-29 13:44
2004.03.28
Печать результата запроса в QuickReport


8-1069105502
oens
2003-11-18 00:45
2004.03.28
Как, сделать, спектроанализатор ,как в winamp e ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский