SQL (запрос): поиск
Модератор: Модераторы
SQL (запрос): поиск
Здравствуйте!
Пытаюсь заставить SQLQuery искать "русские" данные. Например: select * from (название таблицы) where (название поля) = 'критерий поиска'.
English, например, ищет, а вот Русский - нет.
Помогите!
Спасибо!
Пытаюсь заставить SQLQuery искать "русские" данные. Например: select * from (название таблицы) where (название поля) = 'критерий поиска'.
English, например, ищет, а вот Русский - нет.
Помогите!
Спасибо!
1. СУБД какая используется?
2. Приведенный запрос - это далеко не поиск.
where (название поля) = 'критерий поиска' - результат запроса вы получите только если содержимое поля действиельно будет РАВНО 'критерий поиска'
2. Приведенный запрос - это далеко не поиск.
where (название поля) = 'критерий поиска' - результат запроса вы получите только если содержимое поля действиельно будет РАВНО 'критерий поиска'
WAYFARER писал(а):1. СУБД какая используется?
2. Приведенный запрос - это далеко не поиск.
where (название поля) = 'критерий поиска' - результат запроса вы получите только если содержимое поля действиельно будет РАВНО 'критерий поиска'
1. СУБД: MS SQL Server
2. Знаю, что не поиск: я пример привел того, что не ищет "кириллицу". Числа и англ. слова, введенные в edit (в нем через onchange осуществляется поиск), находятся без проблем (например, если ввести "e", то выведутся данные, среди которых есть эта буква).
Только "кириллица" не ищется. Вводил запрос на прямую в Query - пустота (ошибок нет).
Smola67 писал(а):пустота (ошибок нет)
Попробуйте сменить кодировку, в какой кодировке опрашиваемая таблица?
vitaly_l писал(а):Smola67 писал(а):пустота (ошибок нет)
Попробуйте сменить кодировку, в какой кодировке опрашиваемая таблица?
Где это можно посмотреть? В MS SQL Server Management Studio в Свойствах БД нашел только это: Параметры сортировки - Cyrillic_General_CI_AS
Smola67 писал(а):Cyrillic_General_CI_AS
Можете сменить кодировку всей таблицы на UTF8_General_CI_AS (или около того) и тогда будут работать прямые запросы. Либо кодировку данной колонки на UTF8_General_CI_AS. Либо в запрос отправляйте в кодировке
Код: Выделить всё
SQLstring := UTF8ToWinCP( select * from (название таблицы) where (название поля) = 'критерий поиска' )vitaly_l писал(а):Smola67 писал(а):Cyrillic_General_CI_AS
Можете сменить кодировку всей таблицы на UTF8_General_CI_AS (или около того) и тогда будут работать прямые запросы. Либо кодировку данной колонки на UTF8_General_CI_AS. Либо в запрос отправляйте в кодировкеКод: Выделить всё
SQLstring := UTF8ToWinCP( select * from (название таблицы) where (название поля) = 'критерий поиска' )
Про UTF8_General_CI_AS: подобного нет.
Если такое: datamodule.DataModule1.RabotiQuery.SQL.Add('select * from raboti where rabota like '''+'%'+edit1.Text+'%'+'''');
то как прописать туда UTF8ToWinCP?
Добавлено спустя 36 минут 19 секунд:
vitaly_l писал(а):Smola67 писал(а):Cyrillic_General_CI_AS
Можете сменить кодировку всей таблицы на UTF8_General_CI_AS (или около того) и тогда будут работать прямые запросы. Либо кодировку данной колонки на UTF8_General_CI_AS. Либо в запрос отправляйте в кодировкеКод: Выделить всё
SQLstring := UTF8ToWinCP( select * from (название таблицы) where (название поля) = 'критерий поиска' )
Проверил запрос (select * from Raboti where Rabota = 'Геодезия') в MS SQL Server Management Studio - все работает. Значит, проблема в Lazarus? В его компонентах?
Smola67 писал(а):Проверил запрос (select * from Raboti where Rabota = 'Геодезия') в MS SQL Server Management Studio - все работает. Значит, проблема в Lazarus? В его компонентах?
проблема в кодировке. лазарус в UTF8 а база данных в другой кодировке. Либо UTF8ToWinCP() либо UTF8ToAnsi()
Smola67 писал(а):Если такое: datamodule.DataModule1.RabotiQuery.SQL.Add('select * from raboti where rabota like '''+'%'+edit1.Text+'%'+'''');
то как прописать туда ?
Код: Выделить всё
datamodule.DataModule1.RabotiQuery.SQL.Add(UTF8ToWinCP( 'select * from raboti where rabota like '''+'%'+edit1.Text+'%'+'''') );
либо
Код: Выделить всё
datamodule.DataModule1.RabotiQuery.SQL.Add(UTF8ToAnsi( 'select * from raboti where rabota like '''+'%'+edit1.Text+'%'+'''') );
vitaly_l писал(а):Smola67 писал(а):Проверил запрос (select * from Raboti where Rabota = 'Геодезия') в MS SQL Server Management Studio - все работает. Значит, проблема в Lazarus? В его компонентах?
проблема в кодировке. лазарус в UTF8 а база данных в другой кодировке. Либо UTF8ToWinCP() либо UTF8ToAnsi()Smola67 писал(а):Если такое: datamodule.DataModule1.RabotiQuery.SQL.Add('select * from raboti where rabota like '''+'%'+edit1.Text+'%'+'''');
то как прописать туда ?Код: Выделить всё
datamodule.DataModule1.RabotiQuery.SQL.Add(UTF8ToWinCP( 'select * from raboti where rabota like '''+'%'+edit1.Text+'%'+'''') );
либоКод: Выделить всё
datamodule.DataModule1.RabotiQuery.SQL.Add(UTF8ToAnsi( 'select * from raboti where rabota like '''+'%'+edit1.Text+'%'+'''') );
UTF8ToWinCP - не распознает Лазарус (не знает, что это), а UTF8ToAnsi ничего не дает (ошибок нет, но поиск по кириллице не работает).
Smola67 писал(а):UTF8ToWinCP - не распознает Лазарус
подключите модуль LazUTF8
vitaly_l писал(а):Smola67 писал(а):UTF8ToWinCP - не распознает Лазарус
подключите модуль LazUTF8
Человек... Нет! Человечище!!! Огроменное СПАСИБО! Заработало. Всего тебе (да и всему этому сообществу), разумеется, хорошего. И здоровья)
P.S. несколько часов сидел мудрил (хотел уже сервак с Lazarus переустанавливать).
Чтобы не подключать модули... Достаточно (для MS SQL) в запросе написать WHERE Field = N'строка поиска'. Литерал N укажет серверу, что текст нужно сконвертировать в юникод. А сервер кириллицу в любом случае хранит в юникоде.
