подстановка Like в Sql запрос

отредактировано April 2009 Раздел: FastReport Studio
В таблице поле client_recno типа char и из-за этого сортировка при возрастании идет как 1,10,100..2, а надо как по "человечески": 1,2,3...9,10... Чтобы не делать временную таблицу в которую будет через Update вписываться переведенный в integer client_recno, делаю следующее: SELECT client_recno from clients where client_recno LIKE '_', потом еще 1 запросик: SELECT client_recno from clients where client_recno LIKE '__' и т.п. до LIKE '_____' - максимально кол-во разрядности номеров т.е. от 1 до 99999, вовремя выполнения каждого запроса проверяю строку на нужное мне условие и при необходимости уже в новую таблицу записываю ту строку которая мне нужна. Все работает, только 5 запросов делающих одно и тоже глупо: пробую делать 1-им: SELECT client_recno from clients where client_recno LIKE :) 1, где
:) 1 - это параметр от ADOQuery.params, а перед каждым новым вызовом подставлять новую маску отбора:
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT AS acc_books FROM client_recno from clients where client_recno LIKE ' + mask +' ORDER BY client_recno');
ADOQuery1.Active:=true;
ругается и не работает, тогда пишу: ...... LIKE :) 1') а предварительно Set('mask','_'); где маск указывается в параметре для :) 1, другая ругань, но результат тот-же. Где-то проскакивало, что с LIKE есть у кого-то проблемы, может кто-то сталкивался и решил успешно? помогите советом!

Комментарии

  • отредактировано 14:19
    У меня ощущение, что после подстановки параметра у Вас получается не корректный SQL-запрос.
    Поэтому попробуйте сначала протестировать этот запрос без параметра и поставить какое-то определенное значение. Если работать будет, значит проблема в корректности значения параметра.
    Еще можно попробовать вывести текст запроса в мемо и посмотреть, корректен ли он.
  • отредактировано 14:19
    ORDER BY cast(client_recno as int)
  • отредактировано 14:19
    ORDER BY cast(client_recno as int) К сожалению не сработало, написал сервер:
    SQL0420N Неверный символ в символьной строке - аргументе функции "INTEGER ".
    Объяснение:
    Функция "<имя-функции>" использует в качестве аргумента
    символьную строку, которая содержит недопустимый в числовых
    константах языка SQL символ. Эта функция могла быть вызвана в
    результате использования спецификации CAST с "имя-функции" в
    качестве целевого типа данных. Функция или тип данных,
    используемые в операторе SQL, могут быть синонимом для имени
    "имя-функции".

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.