![]() |
|
![]() ![]() ![]() |
|
x77 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
для Ib у меня сейчас получилось так. я завёл генератор (my_gen_id), в основной запрос Query1 добавил его вызов
т.е. при каждом переоткрытии таблицы он начитывает номера полей из самого запроса. безотказная фишка. есть только одно но: значение генератора каждый раз увеличивается. поэтому я завёл ещё одну TQuery с таким SQL:
и повесил обработчик на TQuery1.BeforeOpen:
т.е. перед каждым открытием Query1 генератор сбрасывается в ноль. всё классно работает ![]() Это сообщение отредактировал(а) x77 - 3.10.2003, 18:41 -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
||||||
|
|||||||
Dayana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 1 Всего: 4 |
x77, спасибо, я попробую... только в воскресенье буду на работе, тогда попробую...
и, честно говоря, я не знаю, что такое генератор и как его заводить? и можно ли в Oracle заводить генератор? Это сообщение отредактировал(а) Dayana - 3.10.2003, 18:55 |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
у меня оракла нет
![]() ![]() -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
У меня мысля такая: во-первых, выбросить dbGrid или найти нормальный. ![]() Вторая мысля - создать свой компонент наследованный от стандартного и в ключить в него свое свойство, которое уже считать самому при гулянии по квере. Так же можно попытаться контролировать номер строки в квере через событие OnScroll (кажется так), тоже через свою переменную. Пока больше идей нет. ![]() -------------------- Волны гасят ветер... |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
Ты с Oracle из дельфи работаешь через BDE?
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
Cashey |
|
||||||||||||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
... если через BDE.
Значит делаешь так (если таблица известна на этапе проектирования): 1. В св-ве Query1.DatabaseName проставляешь имя БД, зарегистрированной в BDE. 2. Создаешь в Query1.SQL, набор команд, например
3. Создаешь в TQuery набор полей, соответствующий вышеприведенному запросу (двойной щелчок мыши на компоненте Query1, далее в открывшемся окне жмешь правую кнопку мыши и выбираешь пункт Add Fields (Add All Fields), во вновь открывшемся окне, если все поля синие, жми ОК), далее создаешь еще одно поле, New Field, назови 'num', тип Integer и Field Type - Calculated. 4. В гриде создаешь колонку (практически так же как и в TQuery) и связываешь его с этип полем. 5. В обработчике событий Query1CalcFields, пишешь следующее:
6. Проверь, что б св-во Query1.AutoCalcFields было в true. Все, после
PS
Не знаю как себя введет Оракл, но можно прописать так
В общем, ты на правильном пути, только у меня все тип-топ, могу демку выслать, если не веришь ![]() Это сообщение отредактировал(а) Cashey - 3.10.2003, 23:17 -------------------- библия учит любить ближнего, а камасутра обучает как именно |
||||||||||||
|
|||||||||||||
Dayana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 1 Всего: 4 |
Cashey, все было сделано так, как ты описал, а RecNo = -1.... если у тебя все хорошо, то я даже и не знаю, где искать... И вышли демку, если не сложно. :-)
Fantasist, идеи очень хорошие, но проблема в том, что проект уже готовый, а мне приходится к нему дописывать. Соответственно делать такие вещи, как менять грид и писать свой компонент, нельзя... (нет на это времени и.... могут уволить, а я только 4 дня работаю...). Наверное придется сделать поле не fkCalculate, a fkData, и попробовать заполнить его на этапе открытия квери в цикле, проходясь по всем строчкам. Интересно получится что-нибудь или нет? Это сообщение отредактировал(а) Dayana - 3.10.2003, 23:38 |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
Точно не получится, поле fkData, может бать только привязана к конкретному полю в таблице, а св-во Value в fkCalculate доступно только для чтения. Дай мне названия и тип полей в твоей таблице, я тебе вышлю свою прожку, если в ней все будет ОК значит: не все делала как я писал. -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
Dayana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 1 Всего: 4 |
Cashey, у меня не одна таблица, квери берет данные из нескольких таблиц... Да в любом случае, пишу отдельный пример, все равно не получается... все равно -1...
|
|||
|
||||
Dayana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 1 Всего: 4 |
Cashey, ну вот например такой квери:
где сс varchar2[2] id varchar2[10] nname varchar2[15] p_name varchar2[15] вышли мне свой код, плиз... |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
Cashey, все твои варианты прокатывают только для парадокса/дэбэйз/etc. я и сам на это поймался. через RecNo работать с ib/oracle вообще нельзя (почему - я не знаю, но оно всегда равно -1 или вообще чему-то левому). самое реальное и быстрое для oracle с минимум изменений в коде - это завести генератор и добавить его вызов в select. а перед открытием таблицы - обнулять этот генератор. в оракле генераторами являются "последовательности" - sequence. вот там и надо копать.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Dayana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 352 Регистрация: 6.10.2002 Где: Тель-Авив Репутация: 1 Всего: 4 |
x77, сделала через генератор (sequence)... все хорошо... а "начальство" сказало, что это плохой стиль... :-(( короче не нравится так.... надо делать по-другому...
Есть еще такая штука RxMemoryData. Туда загружаешь весь квери и можно работать с ним как с квери, и при этом получается тот же квери, но еще и writable. Можно, например после открытия, в цикле заполнить поле для нумерации. Т.е. сделать то, что нельзя с обычным квери. Но с этим у меня тоже проблема, т.к. в этом случае надо переписать много кода. Т.е. не переписать, а заменить в коде обработку существующего квери на новый RxMemoryData. Предложу тому же "начальству". Хотя уверена, что это тоже не подойдет.... Извиняюсь за оффтоп, но просто ужасно начинать работать с готовым проектом, когда над тобой стоит кто-то, кто хочет, что бы писалось так, как он хочет... а не так, как ты считаешь нужным... В этом случае перестаешь понимать, умеешь ли программировать вообще... вот... |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
передай этим господам, что "плохой стиль" - это то, что они видят в зеркале по утрам. это было самое быстрое и корректное решение ![]() ладно, сейчас попробуем иначе, без изменений в базе и существующем коде. если что выйдет - выложу. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
сделал откровенно идиотский вариант, через закладки. работает, но... в общем, смотри сама. я завёл в квери одно левое поле, Number, типа fkCalculated. реально туда ничего не ложится, оно используется только для того, чтобы отрисовать порядковый номер записи.
вот такая фишка. подозреваю, что на больших наборах данных отрисовка будет тормозить, но больше пока ничего в голову не лезет ![]() -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
да, забыл:
это чтобы добраться до proected property BookmarkSize DataSEt'а. в проекте это можно просто выбросить, вместе с обработчиком Button1Click. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |