![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Порядковый номер в наборе данных [D6, IB6.x]
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. Сохранять пор.№, присвоенный пользователем из каких-то своих соображений. В этом случае в таблицу добавляется спец.поле номера, куда ручами заносится значение при добавлении - правке записи. Можно прихимичить автоподставление номера при добавлении записей, однако ответственность за "достоверность" остается за пользователем, запостившем запись.