Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.06 c
14-1127899345
Fenix
2005-09-28 13:22
2005.10.23
ТЕдит


1-1127882869
Novic
2005-09-28 08:47
2005.10.23
Организовать признак прочтения


1-1128220868
Sergey_R
2005-10-02 06:41
2005.10.23
Сортировка Stringgrid


14-1128271384
Piter
2005-10-02 20:43
2005.10.23
Прикольно блин :)


4-1124713454
Delphi_is_cool
2005-08-22 16:24
2005.10.23
Как установить интервал таймера 1 микросекунда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский