Форум: "Базы";
Текущий архив: 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