Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизПорядковый номер записи Найти похожие ветки
← →
stalexo (2002-06-18 21:19) [0]Уважаемые мастера!
Каким образом, работая с таблицами InterBase,
создать в DBGrid поле, показывающее номер
записи по порядку. RecNo,работающий
в Paradox здесь не работает.
Спасибо!
← →
Praco (2002-06-19 09:11) [1]1.При помощи хранимой процедуры. В For Select вставляешь счетчик и возвращаешь его значение.
2.Можно поизвращаться с вычисляемыми полями, но там все непонятно.
← →
Praco (2002-06-19 09:13) [2]3. Написать свой грид или поискать готовый.
← →
stalexo (2002-06-19 16:23) [3]Praco, буду очень признателен за
твой грид!
Спасибо!
С уважением, stalexo.
← →
koks (2002-06-19 16:33) [4]из 3-х вариантов 2-ой очень сложный, 3-й просто убийственный...
остается 1-й.
Это хорошо, что у тебя IB. На этом форуме пару раз обсуждали тоже самое, только для DBase/Paradox... такого там нагородили - я понял тогда, что это мне не надо. А вот если есть возможность использовать хранимую процедуру то все выглядит просто и красиво...
← →
Praco (2002-06-19 17:39) [5]stalexo © (19.06.02 16:23)
Дык нет у меня такого грида. В DBGridEh не нашел. Другие навороченные гриды не изучал.
Я действовал при помощи процедур. Конечно, каждый раз писать процедуры для простых запросов напряжно. С другой стороны все запросы к базе делать только через процедуры - хороший тон.
← →
MishGan` (2002-06-19 17:46) [6]Могу предолжить такой вариант:
В тексте запроса добавляешь дополнительное псевдополе,
например так:
SELECT 1 as "N",t.* FROM ALL_TABLES t
У грида делаешь обработчик события OnDrawDataCell или OnDrawColumnCell, и в нем отрисовываешь нужный номер:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Field.FullName="N" then
begin
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+1,IntToStr(DBGrid1.DataSource.DataSet.RecNo));
end;
end;
При желании можно добавить FixedCol и в нем отображать номер строки.
← →
stalexo (2002-06-19 18:04) [7]Спасибо всем, что не бросаете в беде!
Mishgan"у - персонально.За текст!
Сейчас буду пробовать.
← →
Val (2002-06-19 18:10) [8]>stalexo © (19.06.02 18:04)
RecNo,работающий
в Paradox здесь не работает.
MishGan` (19.06.02 17:46)
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+1,IntToStr(DBGrid1.DataSource.DataSet.RecNo));
???
← →
MishGan` (2002-06-19 18:21) [9]2 val
>>DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+1,IntToStr
>>(DBGrid1.DataSource.DataSet.RecNo));
Что здесь не понятно? Готов объяснить.
Зы:
И еще - если RecNo не работает (или работает не так как нужно), то можно его и не использовать. А использовать что-нибудь другое, например какой-нибудь свой счетчик.
← →
Val (2002-06-19 18:24) [10]>MishGan` (19.06.02 18:21)
спасибо, объяснять не нужно, я лишь обращаю внимание на использование RecNo, из-за которого, собственно, проблема и возникла.
← →
Леха_ (2002-06-19 18:47) [11]ответ с форума королевства примерно плутора годовой давности:
Задачка классическая!!!
Имеем исходный запрос (без нумерации):
SELECT MY_COLUMN FROM MY_TABLE ORDER BY 1
ORDER BY важен, без него не получится. MY_COLUMN предполагаем сортируемым
и уникальным, т.е. нет двух записей с повторяющимися MY_COLUMN. Далее делаем
финт ушами:
SELECT COUNT(*), t1.MY_COLUMN
FROM MY_TABLE t1, MY_TABLE t2
WHERE t1.MY_COLUMN >= t2.MY_COLUMN
GROUP BY t1.MY_COLUMN
ORDER BY t1.MY_COLUMN
Т.е. просто подсчитываем количество записей, стоящих согласно порядку сортировки
ранее текущей. Я не уверен, что вариант оптимален :)) Но работает. Проверил
только что.
Peter Taran
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c