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

Вниз

Порядковый номер записи   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
3-47070
maxon
2002-06-20 16:41
2002.07.15
подсчёт значений


3-47081
федя
2002-06-21 04:34
2002.07.15
Простой вопрос


14-47671
lipskiy
2002-06-13 19:56
2002.07.15
UBPFD - бесплатная база готовых решений для Delphi


4-47866
Maybe
2002-05-12 16:52
2002.07.15
Рисование API , WM_INITDIALOG, WM_PAINT


14-47798
Tahion
2002-06-15 18:52
2002.07.15
Страшные наказания!!!!!!!!!!!