On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
администратор




Пост N: 757
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.16 17:02. Заголовок: Вопрос на засыпку по ADS


Как в курсоре ADS поймать логический номер записи если используется ORDER BY
К примеру есть запрос вида :
SELECT * FROM Table_1 ODRER BY Field_1

Полученный курсор выдаст отсортированную таблицу по полю Field_1 , физические номера записей ( RecNo() ) будут вперемешку,
RowNum тоже не помогает т.к. Field_1 есть в полях вывода - SELECT *

Это я пытаюсь вертикальный скроллер в TsBrowse вылечить , он понимает или Recno() или KeyNo() , т.к. индекс не всегда совпадает с выражением сортировки , а Recno() вперемешку - скроллер скачет вверх-вниз беспорядочно при навигации.
В исходниках RDDADS не нашел к чему прицепиться. Если нужен самодостаточный - могу написать )



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]


постоянный участник




Пост N: 843
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.01.16 17:17. Заголовок: В MySql можно задать..


В MySql можно задать SELECT a,b,c,count(*) from tabl1 order by c
можкт в ADS похожее есть

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 758
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.16 17:23. Заголовок: SergKis пишет: SEL..


SergKis пишет:

 цитата:
SELECT a,b,c,count(*)


Тогда курсор в ADS получается НЕ РЕДАКТИРУЕМЫЙ , не совсем удобно получается
и Count() агрегатная функция , ADS ругается типа на остальные поля GROUP BY или HAVING сделай ( но главное это НЕ РЕДАКТИРУЕМЫЙ курсор )

Пока тупо отключаю скроллер чтоб не нервировал
В идеале еслиб была функция в RDD возвращающая логический номер записи в курсоре.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 844
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.01.16 17:37. Заголовок: А через др. таблицу:..


А через др. таблицу:
INSERT INTO tbl_temp SELECT * FROM tab1 ORDER BY ...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 759
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.16 17:58. Заголовок: SergKis пишет: А че..


SergKis пишет:

 цитата:
А через др. таблицу


так пойдет. т.к. Recno() совпадет с номером логической записи. Не красиво как то при каждой сортировке копировать в базу или массив , а потом кормить это бровсу , да еще думать как в оригинале отражать изменения клона .

ADS ведь должен где то у себя держать логическую нумерацию записей курсора.
Ведь курсор это обыкновенная рабочая область и показывается она в нужной сортировке

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 845
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.01.16 18:23. Заголовок: Haz пишет:ADS ведь д..


Haz пишет:
 цитата:
ADS ведь должен где то у себя держать ...


С ADS не работал. Если в отборе ~10000 записей можно в Memio и нужные индексы строить на нем, при модификации записи повторный запрос на эту запись к ads. Если в ads есть сообщение (извещение) о изменении таблицы, ее можно перечитать (только изменения). Похожее у меня было (отбор даже не в memio) ~ 2-4 сек. уходило на запрос с индексацией.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 760
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.01.16 11:36. Заголовок: Можно сразу запрос в..


Можно сразу запрос выводить во временную таблицу , а потом дропать ее , или в массив.
Можно пробежаться по курсору и хеш массив создать из физического и логического номеров (это быстрее чем базу копировать )
Работать будет но как то на костыль похоже )
Хотелось бы без плясок с бубнами получить порядковый ( логический ) номер записи. непосредственно из курсора который возвращает запрос.
ADS при выполнении запроса вида SELECT * FROM ... ODRER BY A,B,C выполняет его в две итерации
1 Сначала сама выборка SELECT и создание рабочей области ( курсора )
2 Сортировка курсора по критерию A,B,C
По сути это или временный индекс строится , или нечто подобное, где каждой записи курсора соответствует логический номер сортировки.
Пытался поймать этот номер и через AdsGetRecordNum() и через AdsGetKeyNum() используя в качестве usFilterOption значения ADS_RESPECTFILTERS и ADS_IGNOREFILTERS
выдает разные значения ..... но не порядковый номер.
В общем пока в очередной раз бросил это занятие )



Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 88
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет