подстановка Like в Sql запрос
В таблице поле 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 есть у кого-то проблемы, может кто-то сталкивался и решил успешно? помогите советом!
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 есть у кого-то проблемы, может кто-то сталкивался и решил успешно? помогите советом!
Комментарии
Поэтому попробуйте сначала протестировать этот запрос без параметра и поставить какое-то определенное значение. Если работать будет, значит проблема в корректности значения параметра.
Еще можно попробовать вывести текст запроса в мемо и посмотреть, корректен ли он.
SQL0420N Неверный символ в символьной строке - аргументе функции "INTEGER ".
Объяснение:
Функция "<имя-функции>" использует в качестве аргумента
символьную строку, которая содержит недопустимый в числовых
константах языка SQL символ. Эта функция могла быть вызвана в
результате использования спецификации CAST с "имя-функции" в
качестве целевого типа данных. Функция или тип данных,
используемые в операторе SQL, могут быть синонимом для имени
"имя-функции".