Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Порядковый номер в наборе данных [D6, IB6.x]


Страницы:   1 2 3

erika ©   (2005-09-14 09:02:00) 

Здравствуйте!
Необходимо вывести порядковый  номер записи, для отображения пользователю  в  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)
не вышло.
Подскажите пожалуйста, как выполнить поставленную задачу.
Заранее благодарна.


Sergey13   (2005-09-14 11:12:00) [21]

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


msguns   (2005-09-14 11:02:00) [22]

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

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


msguns   (2005-09-14 10:39:00) [23]

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

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


erika   (2005-09-14 10:38:00) [24]

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


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

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


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

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


msguns   (2005-09-14 10:16:00) [27]

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

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


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

Аська есть ?


Anatoly Podgoretsky   (2005-09-14 10:09:00) [29]

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


erika   (2005-09-14 10:06:00) [30]

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

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


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

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

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


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

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

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

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


erika   (2005-09-14 09:58:00) [33]

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


erika   (2005-09-14 09:53:00) [34]

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


msguns   (2005-09-14 09:51:00) [35]

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


msguns   (2005-09-14 09:51:00) [36]

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

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


erika   (2005-09-14 09:49:00) [37]

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


msguns   (2005-09-14 09:48:00) [38]

>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:47:00) [39]

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


msguns   (2005-09-14 09:41:00) [40]

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

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо