Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Как получить значение следующее за текущим... (число прочтений - 4754 )
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Как получить значение следующее за текущим...
05. Февраля 2009 :: 18:02
Печать  
Есть необходимость в осуществить запрос, а результат получить с конкретной позиции.
Например есть элемент А, который удовлетворяет условиям запроса, соответственно он попадает в результат (Элементы А-Я), но мне надо получить элемент, следующий за элементом А.
Речь идет о справочнике... т.е. в запросе мне надо как то протащить условие что SELECT TOP 1 * FROM ..... WHERE ID > :ВыбID, понимаю что при условии что ID - текстовое поле данное сравнение не катит.
Но ведь должен быть какой нибудь выход?
Отвечу на любые вопросы если таковые есть

Пы.Сы. Вариант выгрузить результат в ТЗ (ИТЗ, СЗ) и найдя нужный элемент получить следующий я понимаю, но использовать не хочу ибо понимаю что при большом количестве это откровенно тормознутый путь.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #1 - 05. Февраля 2009 :: 18:36
Печать  
Так... думаю пока сам...
Поскольку номера строки как такового в выборке не существует если она не ORDER BY, но строка упорядочивания у меня есть, а значит таки это возможно.
Только вот среди тех методов что я нашел, я либо нихрена не понял, либо просто надо попробовать.

вот неплохая статья про эту тему
http://www.osp.ru/pcworld/2008/09/5644110/
но я слаб в SQL, поэтому многое мне тут кажется неизведанным.
Особенно понравился последний способ с использованием SET ROWCOUNT.
Но только как это применить.... блин  Нерешительный
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #2 - 05. Февраля 2009 :: 18:53
Печать  
Получить следующий ДЛЯ КАЖДОГО из выборки?
Или у тебя запрос должен вернуть один элемент следующий за заданным? (ну тогда все просто, можно попробовать левое соединение если не туплю)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #3 - 05. Февраля 2009 :: 19:08
Печать  
Вадимко писал(а) 05. Февраля 2009 :: 18:53:
Получить следующий ДЛЯ КАЖДОГО из выборки?
Или у тебя запрос должен вернуть один элемент следующий за заданным? (ну тогда все просто, можно попробовать левое соединение если не туплю)


Ну чтобы было понятно
вот запрос, возвращает скажем 100 записей

SELECT
ID
FROM $Справочник.Контрагенты AS ТекСправочник
WHERE
$ТекСправочник.Префикс = 'AA'
ORDER BY
DESCR

1 из них я выбрал в качестве отправной точки... так вот, допустим что в результирующей таблице он был 51-м (но номер я не знаю), так вот как мне получить 52-й элемент, при условии что я могу запросу только дать ID того элемента следующий за которым мне нужен. Ну вроде понятнее постарался объяснить
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #4 - 05. Февраля 2009 :: 19:09
Печать  
2 Вадимко
Покажи запрос как ты думаешь
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #5 - 05. Февраля 2009 :: 21:48
Печать  
Поищи на sql.ru способы нумерации строк запроса
Один из простых: складывание упорядоченных данных во временную таблицу и update

     ТекстЗапроса = "
     |declare @i int
     |set @i=0
     |update #tempo set myid = @i, @i=@i+1
     |";


Ну а далее дело техники, они уже и так все по порядку
Бери хоть третий слева
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #6 - 05. Февраля 2009 :: 21:52
Печать  
Т.е. нечто такое

//удаляем если есть и создаем таблицу с полями Myid, id

insert into #tempo
SELECT
0, ID
FROM $Справочник.Контрагенты AS ТекСправочник
WHERE
$ТекСправочник.Префикс = 'AA'
ORDER BY
DESCR
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #7 - 06. Февраля 2009 :: 05:31
Печать  
Код
Выбрать все
SELECT TOP 1 * FROM sc31 as a1
WHERE ID = ( SELECT MIN(a2.ID) FROM sc31 as a2 WHERE a2.ID > :ВыбID ) 


Такой запрос будет всегда правильным так как ID уникальный по всему справочнику
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #8 - 06. Февраля 2009 :: 07:52
Печать  
Z1 писал(а) 06. Февраля 2009 :: 05:31:
Код
Выбрать все
SELECT TOP 1 * FROM sc31 as a1
WHERE ID = ( SELECT MIN(a2.ID) FROM sc31 as a2 WHERE a2.ID > :ВыбID ) 


Такой запрос будет всегда правильным так как ID уникальный по всему справочнику


Спасибо за подсказку, записал на заметку, но в итоге я пока иначе сделал... чуть позже попробую по твоему методу. Большое спасибо заранее.  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #9 - 06. Февраля 2009 :: 08:04
Печать  
На подходе очередной поставщик?  Подмигивание
А трассировка запросов от ТП с поставщиком ОДБЦ не поможет?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #10 - 06. Февраля 2009 :: 09:09
Печать  
Сорри, я тупанул
Надо create table ... (myid int identity, id)
И нумерации не нужно Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #11 - 06. Февраля 2009 :: 12:37
Печать  
JohnyDeath писал(а) 06. Февраля 2009 :: 08:04:
На подходе очередной поставщик? Подмигивание


Прикалываешься?  Смех А вот у меня получиться, вот увидишь Улыбка

JohnyDeath писал(а) 06. Февраля 2009 :: 08:04:
А трассировка запросов от ТП с поставщиком ОДБЦ не поможет?


Вот тут я не понял... я это... до таких терминов еще не дорос Улыбка
Можно разжевать?  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #12 - 06. Февраля 2009 :: 12:45
Печать  
JohnyDeath писал(а) 06. Февраля 2009 :: 08:04:
На подходе очередной поставщик?  Подмигивание


Кстати я даже больше чем уверен что у тебя в "загашнике" наверняка есть какой нить класс который делает "как бы форму списка"??? А?? Сознавайся...  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #13 - 06. Февраля 2009 :: 13:38
Печать  
vandalsvq писал(а) 06. Февраля 2009 :: 12:37:
JohnyDeath писал(а) 06. Февраля 2009 :: 08:04:
На подходе очередной поставщик? Подмигивание


Прикалываешься?  Смех А вот у меня получиться, вот увидишь Улыбка

JohnyDeath писал(а) 06. Февраля 2009 :: 08:04:
А трассировка запросов от ТП с поставщиком ОДБЦ не поможет?


Вот тут я не понял... я это... до таких терминов еще не дорос Улыбка
Можно разжевать?  Подмигивание

Сань, да я ж не против. Завидно просто. Я никак до логического конца ничего сделать не могу. Вот вроде бы уже всё доделал, и тут же начинаются новые хотелки. Всё это в быстром темпе. Потом появляется время, смотришь на класс и думаешь: "мля, надо было не так делать". В итоге появляется либо новый класс, либо в старом уже трудно разбираться  Улыбка и так по кругу...

Про трассировку запросов. Если я тебя правильно понял, то метод Отладка объекта SQLiteDataProvider в 1sqlite тебе не поможет?
Цитата:
Синтаксис: Отладка(ТипыЗапросов, [ФлагОтладки])

Параметры:
ТипыЗапросов - тип: Число. Задает запросы, для которых вызывается метод Отладка. Задается суммой следующих чисел:

1 - запрос получения первой порции данных сверху.
2 - запрос получения первой порции данных снизу.
4 - запрос получения следующей порции данных.
8 - запрос получения предыдущей порции данных.
16 - запрос обновления текущей строки.
32 - запрос нахождения значения ключевого поля по заданному ид-полю.
ФлагОтладки - тип: Число. 0 - выключить отладку, 1 - включить. Необязательный параметр. По умолчанию - 1.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #14 - 06. Февраля 2009 :: 13:43
Печать  
vandalsvq писал(а) 06. Февраля 2009 :: 12:45:
JohnyDeath писал(а) 06. Февраля 2009 :: 08:04:
На подходе очередной поставщик?  Подмигивание


Кстати я даже больше чем уверен что у тебя в "загашнике" наверняка есть какой нить класс который делает "как бы форму списка"??? А?? Сознавайся...  Подмигивание

Без такого класса щас никуда. "ТпЗапросЛайтТЗ" называется. Подмигивание Раньше при написании отчета и его отладки постоянно мучался: как бы выводить промежуточные данные - в моксель как-то геморно и много всяких неприятностей; ИТЗ.Показать() - сам понимаешь. А тут Объект.ЗагрузитьТЗ(ТЗИсточник) или Объект.ВыполнитьИОтобразить(ТекстЗапроса) - и вот оно, практически всё что надо. Никак руки не дойдут, чтоб прикрутить печать этой самой ТП - вроде б ничего сложного, но, млин, сейчас вообще не до этого.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #15 - 06. Февраля 2009 :: 13:52
Печать  
JohnyDeath писал(а) 06. Февраля 2009 :: 13:38:
Сань, да я ж не против. Завидно просто. Я никак до логического конца ничего сделать не могу. Вот вроде бы уже всё доделал, и тут же начинаются новые хотелки. Всё это в быстром темпе. Потом появляется время, смотришь на класс и думаешь: "мля, надо было не так делать". В итоге появляется либо новый класс, либо в старом уже трудно разбираться  Улыбка и так по кругу...


Абсолютно аналогично.
На счет трассировки, я счас до 1sqlite дойду (надо ведь и DBF-никах подумать) и внимательно посмотрю.  Подмигивание

Кстати на счет метода "выполнить и отобразить"... вот эта идея... я как то недопер до нее... Улыбка

Пы.сы.... вообще идей столько что ужас тихий, но головы то не хватает... увы родился я бухгалтером, а программистом стал Улыбка
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #16 - 06. Февраля 2009 :: 14:00
Печать  
vandalsvq писал(а) 06. Февраля 2009 :: 13:52:
На счет трассировки, я счас до 1sqlite дойду (надо ведь и DBF-никах подумать) и внимательно посмотрю.  Подмигивание

Кстати на счет метода "выполнить и отобразить"... вот эта идея... я как то недопер до нее... Улыбка

Пы.сы.... вообще идей столько что ужас тихий, но головы то не хватает... увы родился я бухгалтером, а программистом стал Улыбка

А ты сразу посмотри как 1sqlite раскладывает запросы на получение очередной порции данных и по аналогии делай и для ОДБЦ, думаю, что разница там будет небольшая. Если же хочешь видеть как ведёт себя поставщикОДБЦ, то открывай профайлер и вперёд Подмигивание

На счет идей. Я вот часто думаю, как же хорошо живётся 1Сникам, которые не используют ВК и 1С++ в частности - у них никаких проблем - "в 1С это не реализуемо и точка!". Мы же вынуждены "мучаться"  Очень довольный
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Как получить значение следующее за текущим...
Ответ #17 - 06. Февраля 2009 :: 14:29
Печать  
JohnyDeath писал(а) 06. Февраля 2009 :: 14:00:
На счет идей. Я вот часто думаю, как же хорошо живётся 1Сникам, которые не используют ВК и 1С++ в частности - у них никаких проблем - "в 1С это не реализуемо и точка!". Мы же вынуждены "мучаться"  Очень довольный

+100
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Как получить значение следующее за текущим...
Ответ #18 - 06. Февраля 2009 :: 14:36
Печать  
JohnyDeath писал(а) 06. Февраля 2009 :: 14:00:
А ты сразу посмотри как 1sqlite раскладывает запросы на получение очередной порции данных и по аналогии делай и для ОДБЦ, думаю, что разница там будет небольшая. Если же хочешь видеть как ведёт себя поставщикОДБЦ, то открывай профайлер и вперёд Подмигивание

На счет идей. Я вот часто думаю, как же хорошо живётся 1Сникам, которые не используют ВК и 1С++ в частности - у них никаких проблем - "в 1С это не реализуемо и точка!". Мы же вынуждены "мучаться"  Очень довольный


Ну профайлер мой друг уже давно.
А на счет "счастливых 1С-ников" Улыбка да уж... прямо в точку  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать