Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 11:53   #1
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию MS Access. Сортировка по длине строки

Здравствуйте. Есть база MS Access. Работаю через ADOQuery. В таблице есть поле типа String. Нужно сделать сортировку по этому полю, чтобы первыми были записи с короткими строками, а затем в порядке возрастания. По алфавиту не обязательно.

Можно ли это сделать запросом SQL? Цикл тут нерационален.
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru

Последний раз редактировалось grominfo; 12.12.2012 в 12:08.
grominfo вне форума Ответить с цитированием
Старый 12.12.2012, 14:54   #2
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Раскройте секрет, для чего подобная нестандартная сортировка?
superedward вне форума Ответить с цитированием
Старый 12.12.2012, 15:46   #3
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Цитата:
Сообщение от superedward Посмотреть сообщение
Раскройте секрет, для чего подобная нестандартная сортировка?
Функция выбирает из таблицы строковые значения.

То есть функции передаётся строка, она ищет:

1. точное сопадение
Код:
('SELECT * FROM tablename WHERE sskey=''key''')
2. если точных сопадений не найдено, ищёт вхождения
Код:
('SELECT * FROM tablename WHERE sskey LIKE ''%key%''')
3. Если и тут сопадений не найдено, то тогда функция ищёт вхождения наоборот, то есть проверяет, если ли в строковом значении, переданном функции, хоть один ключ из таблицы
Код:
adoquery1.first;
while not adoquery1.eof do
 begin
  if pos (adoquery1.fieldbyname('fieldname').asstring, ParamFunc)>0 then
  {source}
 adoquery1.next;
 end;
Таким образом мне нужно в третьем пункте проверять сначала короткие строки, потому что при длинном параметре, переданном функции, будут сопадать те записи, которые к этом значение не имеют, то есть функция будет находить ненужные вхождения.

Надёюсь понятно объянил
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru

Последний раз редактировалось grominfo; 12.12.2012 в 16:01.
grominfo вне форума Ответить с цитированием
Старый 12.12.2012, 16:02   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
select .... from  tablename 
where ....
order by len(sskey)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2012, 00:23   #5
grominfo
Форумчанин
 
Аватар для grominfo
 
Регистрация: 30.05.2011
Сообщений: 651
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
select .... from  tablename 
where ....
order by len(sskey)
Serge_Bliznykov, спасибо за решение. Я правда ещё не пробовал, времени нет, но думаю, что сработает.
Создание, программирование и сопровождение сайтов любой сложности.
Изготовление программ на заказ.
Список услуг и портфолио на сайте www.andreygrom.ru
grominfo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива по длине строк и по алфавиту CrOsP Общие вопросы Delphi 6 07.09.2013 12:07
Сортировка файла по длине строки Existence Помощь студентам 3 29.09.2010 23:37
сортировка в ADO Access eisenheim БД в Delphi 2 26.09.2009 12:06
Сортировка слов по длине. Артин Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.05.2009 12:01