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

Вниз

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

 
erika ©   (2005-09-14 09:02) [0]

Здравствуйте!
Необходимо вывести порядковый  номер записи, для отображения пользователю  в  DBGrid:
1. Существует  таблица  TT с полями artpost (varchar), colorpost (varchar), kolzak (numeric 15,2), innpost (varchar)
2. Существует таблица ХХ с  полями innpost (varchar), namepost (varchar)
3. Формируется следующий  запрос
  select ТТ.artpost, ТТ.colorpost, ТТ.kolzak, ХХ.namepost
  inner join ХХ on (ТТ.innpost = ХХ.innpost) and (kolzak=5), где   5 - это любое число задаваемое пользователем.
3. Получаем набор данных отображаемый  по средством  DBGrid пользователям, в котором ДОЛЖНО ОТОБАЖАТЬСЯ В НОВОМ ПОЛЕ ПОРЯДКОВЫЙ НОМЕР СРОКИ.

Поле содержащее порядковый  номер записи не подходит. Пробовала
  select count (*),ТТ.artpost, ТТ.colorpost, ТТ.kolzak, ХХ.namepost
  inner join ХХ on (ТТ.innpost = ХХ.innpost) and (kolzak=5)
не вышло.
Подскажите пожалуйста, как выполнить поставленную задачу.
Заранее благодарна.


 
msguns ©   (2005-09-14 09:15) [1]

В датасете должно быть одно поле, которое не нужно отображать (чаще всего это ID). Помещаем его в грид слева. В обработчике OnGetText этого поля пишем

Text := IntToStr(Field.DataSet.Recno);


 
erika ©   (2005-09-14 09:25) [2]

В поле ID - gen_id - PK и  оно отображает сквозную нумерацию всех записей.
Например, можно  произвести построение запроса примерно следующего типа:

select sum(XX.zena) sum_zena, ТТ.artpost, ТТ.colorpost, ТТ.kolzak, ХХ.namepost
from TT
 inner join ХХ on (ТТ.innpost = ХХ.innpost) and (kolzak=5)
group by ТТ.artpost, ТТ.colorpost, ТТ.kolzak, ХХ.namepost

Только вместо - sum(XX.zena) sum_zena -  что-то типа recno
дело в  том, что отображение данных будет не только через D6, поэтому  енобходимо прописть в  запросе.


 
Anatoly Podgoretsky ©   (2005-09-14 09:27) [3]

erika ©   (14.09.05 09:02)  
Зачем?
Это лишняя путающая пользователя информации, не имеющая практической ценности. Обычно номера нужны только в отчетах и там они нормально делаются средсвами отчета.

msguns ©   (14.09.05 09:15) [1]
Только RecNo не обязан быть подряд и отражать порядок сортировки и фильтрации.


 
erika ©   (2005-09-14 09:38) [4]

Пользователь хочет иметь такую информацию, отговорить пыталась.


 
msguns ©   (2005-09-14 09:41) [5]

Сортировка-то как влияет на RecNo ? При любой сортировке порядок записей всегда будет возрастать от 1 до N, другое дело, что одна и та же запись получит при переупорядочении другой "порядковый" номер, но, как я понял, ей не надо, чтобы записи имели четкий № в гриде, тем более, что его не существует в природе.
Вот фильтация - это да, приводит к "дырам" в ноумерации. Можно бороться с этим, "эмулируя" фильтр через добавление в исх.запрос доп. условий и переоткрытие запроса.

Совсем другое дело - нативный номер пп. Иногда он весьма нужен. В этом случае есть ИМХО лишь 2 решения.
1. Сохранять естественный порядок записей, т.е. как они добавлялись хронологически. Для этой цели вполне можно использовать ID записи, который, как известно, гарантированно возрастает. Правда, имеем гарантированную "прерывистость".
2. Сохранять пор.№, присвоенный пользователем из каких-то своих соображений. В этом случае в таблицу добавляется спец.поле номера, куда ручами заносится значение при добавлении - правке записи. Можно прихимичить автоподставление номера при добавлении записей, однако ответственность за "достоверность" остается за пользователем, запостившем запись.


 
erika ©   (2005-09-14 09:47) [6]

Сортировки есть  и  она постоянная. Проблема  вся   в  том,  пользователь делает  выборку  и  хочет получить порядковую нумерацию.


 
msguns ©   (2005-09-14 09:48) [7]

>erika ©   (14.09.05 09:38) [4]
>Пользователь хочет иметь такую информацию, отговорить пыталась.

Все же поясните, что именно хочет видеть пользователь:
- порядковый № записи как некий атрибут объекта-записи (например, строки фактуры накладной) и, следовательно, не подлежащий самопроизвольному изменению при переоткрытиях-пересортировках

или

- порядковый номер записи в выбранном множестве.

Если второе, то в 99% случаев можно обойтись вообще без доп.колонки и "замолодить" юзера с помощью строки состояния внизу грида, куда по событию AfterScroll датасета помещать текст примерно такого содержания:

lbDSStatus.Caption := "Запись "+IntToStr(DS.RecNo)+"-я из "+IntToStr(DS.RecordCount)

Правда, для достоверности общего кол-ва записей после каждого открытия/переоткрытия НД надо давать FetchAll либо Last+First


 
erika ©   (2005-09-14 09:49) [8]

Можно как-нибудь вывести порядковую нумерацию в  наборе данных  в  принципе. Согласна добавить поле пустое  в таблицу, в  которое выводить при запросе эту порядковую нумерацию.


 
msguns ©   (2005-09-14 09:51) [9]

>erika ©   (14.09.05 09:47) [6]
>Сортировки есть  и  она постоянная. Проблема  вся   в  том,  пользователь делает  выборку  и  хочет получить порядковую нумерацию.

см. [1] и [7] вариант 2


 
msguns ©   (2005-09-14 09:51) [10]

Удалено модератором


 
erika ©   (2005-09-14 09:53) [11]

Проблема  вся   в  том, что базу пользуют не  только по средством D6, поэтому  нужно получить эту нумерацию в  запросе. Внизу  DBGrida это есть, но злостный  пользователь, хочет получить это как отображенрие в DBGridе.


 
erika ©   (2005-09-14 09:58) [12]

>- порядковый № записи как некий атрибут объекта-записи (например,
>строки фактуры накладной) и, следовательно, не подлежащий
>самопроизвольному изменению при переоткрытиях-пересортировках
если правильно  поняла, то именно этого он и хочет


 
msguns ©   (2005-09-14 10:00) [13]

>erika ©   (14.09.05 09:53) [11]
>Проблема  вся   в  том, что базу пользуют не  только по средством D6, поэтому  нужно получить эту нумерацию в  запросе.

Проблема в том, что Вы, очевидно, слабо представляете себе разницу между данными и их отображением. Пор.№ нужен исключительно для отображения, поэтому разумно и строить его чисто на клиенте, т.е. с помощью соотв.компонент. Которые есть не только в дельфи.
Полученный датасет может отображаться лишь на том клиенте, запрос от которого был получен. И только на нем. Пойимие, что запрос существует сам по себе, а данные, выбираемые каждый раз в датасет - сами по себе.
Если я с двух компов выполню один и тот же запрос (с нумерацией или без) я получу два разных датасета. Поэтому о какой нумерации, отображаемой не только делфи, но и другими программами, может итти речь ?

Кстати, когда прогамма выполняется, прогцессору и ОС глубоко фиолетово, на чем эта программа писалась, на делфи, билдере или фоксе


 
msguns ©   (2005-09-14 10:02) [14]

>erika ©   (14.09.05 09:58) [12]
>если правильно  поняла, то именно этого он и хочет

Тогда это не "порядковый № записи", а нечто совсем иное, которое пользователь захотел так назвать.
В этом случае [7] вариант 1


 
erika ©   (2005-09-14 10:06) [15]

>Тогда это не "порядковый № записи", а нечто совсем иное, которое
>пользователь захотел так назвать.
>В этом случае [7] вариант 1

Как  это сделать?


 
Anatoly Podgoretsky ©   (2005-09-14 10:09) [16]

erika ©   (14.09.05 09:38) [4]
Плохой ты отговариватель.


 
msguns ©   (2005-09-14 10:09) [17]

Аська есть ?


 
msguns ©   (2005-09-14 10:16) [18]

>Anatoly Podgoretsky ©   (14.09.05 10:09) [16]
>Плохой ты отговариватель.

Зато она прекрасная молодая спортивная мама. Да еще классно рисует ;)))


 
Anatoly Podgoretsky ©   (2005-09-14 10:16) [19]

Судя по уточнения, речь идет не о порядковом номере, а об идентификаторе записи, который не должен изменяться от выборке к выборке.
Вот тебе решение преследующее многие цели.
Делаем поле обязательное к заполнению и пусть пользователь заполняет его по своему вкусу и отвечает за свои действия.
1. Достигаем "нумерацию";
2. производим воспитание пользователя;
3. спустя некоторое время получаем просьбу от пользователя - убери ты эту гадость она не приносит никакой практической пользы;
4. защита рабочего места, всегда есть работа по переделке;
5. можно пользователя обругать, как же так, только что недавно просил сделать противоположное;
6. спустя некоторое время пользовательн уже не лезет в твои функции, если и лезет то хорошо подумав;
7. твоя квалификация, как отговаривателя вырастет до небес.


 
Виталий Панасенко   (2005-09-14 10:33) [20]

http://www.ibase.ru/devinfo/generator.htm - может сгодится


 
erika ©   (2005-09-14 10:38) [21]

> Anatoly Podgoretsky (14.09.05 10:16) [19]
мысль очень хорошая, да  и решение займет не более получаса
> Аська есть ?
Аськи нет. На работе  стоит прокси - сервер, и  возникают проблемы  по установке. Дома машину продала (не подлежит upgr), планирую купить в  октябре.
> Зато она прекрасная молодая спортивная мама. Да еще классно рисует ;)))
Это не является  моим  минусом


 
msguns ©   (2005-09-14 10:39) [22]

>Виталий Панасенко   (14.09.05 10:33) [20]

Может, и сгодится, но не в тему имхо


 
msguns ©   (2005-09-14 11:02) [23]

>erika ©   (14.09.05 10:38) [21]
>Это не является  моим  минусом

Это является Вашим громадным ПЛЮСОМ !!! ;)


 
Sergey13 ©   (2005-09-14 11:12) [24]

2[15] erika ©   (14.09.05 10:06)
>>В этом случае [7] вариант 1
>Как  это сделать?
Ну дык если это атрибут (типа номер позиции в накладной) поле нужно отдельное в таблице.


 
Anatoly Podgoretsky ©   (2005-09-14 12:15) [25]


> Зато она прекрасная молодая спортивная мама. Да еще классно
> рисует ;)))

Мы знакомы :-)


 
erika ©   (2005-09-14 12:31) [26]


> Мы знакомы :-)

Вполне  вероятно, но  не факт


 
msguns ©   (2005-09-14 12:32) [27]

>Anatoly Podgoretsky ©   (14.09.05 12:15) [25]
>Мы знакомы :-)

Шалунишка ;)


 
erika ©   (2005-09-14 12:42) [28]


> >Мы знакомы :-)


> Шалунишка ;)

Может  в  чате...


 
Виталий Панасенко   (2005-09-14 13:01) [29]


> msguns ©   (14.09.05 10:39) [22]
> >Виталий Панасенко   (14.09.05 10:33) [20]
>
> Может, и сгодится, но не в тему имхо

Как раз в тему.. статью читал ? есть там раздел использование генератора для нумерации выбранных записей


 
Sergey13 ©   (2005-09-14 13:09) [30]

2[29] Виталий Панасенко   (14.09.05 13:01)
При многопользовательской работе можно наверное иногда получать интересные результаты. Особенно если запрос неслабый.


 
Anatoly Podgoretsky ©   (2005-09-14 13:09) [31]

erika ©   (14.09.05 12:31) [26]
Волос длинный, память короткий.
Я с бородой. http://www.podgoretsky.com


 
Anatoly Podgoretsky ©   (2005-09-14 13:16) [32]


> При многопользовательской работе можно наверное иногда получать
> интересные результаты.

Однозначно, если только не ввести персональные генераторы.


 
msguns ©   (2005-09-14 13:21) [33]

>Anatoly Podgoretsky ©   (14.09.05 13:16) [32]
>Однозначно, если только не ввести персональные генераторы.

Ага ! На каждую накладную персональный генератор для нумерации строк фактуры ;))


 
erika ©   (2005-09-14 13:27) [34]


> Anatoly Podgoretsky ©   (14.09.05 13:09) [31]

Мы  в реальную не  знакомы, но неоднократно  (до рождения  сына) мы  общались на форумах.

> Я с бородой. http://www.podgoretsky.com


была  и   не раз, даже  интересную инфу  для  себя  с качивала


 
Sergey13 ©   (2005-09-14 13:29) [35]

2[34] erika ©   (14.09.05 13:27)
Неужели сын от АП с зачатием через форум? 8-)


 
erika ©   (2005-09-14 13:30) [36]


> Неужели сын от АП с зачатием через форум? 8-)

Шутка  удалась.
Но не  уместно.


 
Sergey13 ©   (2005-09-14 13:32) [37]

2[36] erika ©   (14.09.05 13:30)
Сори, если обидел.


 
erika ©   (2005-09-14 13:38) [38]


> Сори, если обидел.

Я на  такие  веще  не обижаюсь, мы   из не обдчивых. У меня  на  работе   нельзя   быть синтементальной. Все нормально.


 
Anatoly Podgoretsky ©   (2005-09-14 13:46) [39]


> >Однозначно, если только не ввести персональные генераторы.
>
>
> Ага ! На каждую накладную персональный генератор для нумерации
> строк фактуры ;))

Ты не понял, на каждого пользователя, речь то была про многопользовательскую работу, Генераторы работают вне рамок транзакции.


 
msguns ©   (2005-09-14 14:01) [40]

>Anatoly Podgoretsky ©   (14.09.05 13:46) [39]
>Ты не понял,

Это ты не понял. Как можно организовать самостоятельную независимую нумерацию для подмножеств данных таблицы, объединенных некоторыми логическими правилами (например, нумерация строк фактур документов в дочерней таблице) ? Хоть генераторами, хоть дегенераторами. Хоть в сети, хоть удочкой. Задача сама по себе не решается автоматически. О чем, кстати, ты сам же справедливо и сказал.



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

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.054 c
14-1128002509
NewWonder
2005-09-29 18:01
2005.10.23
Сайтострой


1-1128180114
NightLord
2005-10-01 19:21
2005.10.23
Текст в пикселах


4-1124289081
NikNet
2005-08-17 18:31
2005.10.23
Как правельно передать Handle иконки другому Handle иконки?


8-1117266368
MaFon
2005-05-28 11:46
2005.10.23
Здесь была тема про детектор движения.


1-1127995363
superoberon
2005-09-29 16:02
2005.10.23
Прозрачность DBGrid