Форум: "Базы";
Текущий архив: 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.034 c