SQL (запрос): поиск

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Smola67
новенький
Сообщения: 10
Зарегистрирован: 29.01.2015 12:49:19

SQL (запрос): поиск

Сообщение Smola67 »

Здравствуйте!
Пытаюсь заставить SQLQuery искать "русские" данные. Например: select * from (название таблицы) where (название поля) = 'критерий поиска'.
English, например, ищет, а вот Русский - нет.
Помогите!

Спасибо!
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

1. СУБД какая используется?
2. Приведенный запрос - это далеко не поиск.
where (название поля) = 'критерий поиска' - результат запроса вы получите только если содержимое поля действиельно будет РАВНО 'критерий поиска'
Smola67
новенький
Сообщения: 10
Зарегистрирован: 29.01.2015 12:49:19

Сообщение Smola67 »

WAYFARER писал(а):1. СУБД какая используется?
2. Приведенный запрос - это далеко не поиск.
where (название поля) = 'критерий поиска' - результат запроса вы получите только если содержимое поля действиельно будет РАВНО 'критерий поиска'

1. СУБД: MS SQL Server
2. Знаю, что не поиск: я пример привел того, что не ищет "кириллицу". Числа и англ. слова, введенные в edit (в нем через onchange осуществляется поиск), находятся без проблем (например, если ввести "e", то выведутся данные, среди которых есть эта буква).
Только "кириллица" не ищется. Вводил запрос на прямую в Query - пустота (ошибок нет).
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Smola67 писал(а):пустота (ошибок нет)

Попробуйте сменить кодировку, в какой кодировке опрашиваемая таблица?
Smola67
новенький
Сообщения: 10
Зарегистрирован: 29.01.2015 12:49:19

Сообщение Smola67 »

vitaly_l писал(а):
Smola67 писал(а):пустота (ошибок нет)

Попробуйте сменить кодировку, в какой кодировке опрашиваемая таблица?

Где это можно посмотреть? В MS SQL Server Management Studio в Свойствах БД нашел только это: Параметры сортировки - Cyrillic_General_CI_AS
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Smola67 писал(а):Cyrillic_General_CI_AS

Можете сменить кодировку всей таблицы на UTF8_General_CI_AS (или около того) и тогда будут работать прямые запросы. Либо кодировку данной колонки на UTF8_General_CI_AS. Либо в запрос отправляйте в кодировке

Код: Выделить всё

SQLstring := UTF8ToWinCP( select * from (название таблицы) where (название поля) = 'критерий поиска' )
Smola67
новенький
Сообщения: 10
Зарегистрирован: 29.01.2015 12:49:19

Сообщение Smola67 »

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? В его компонентах?
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение 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+'%'+'''') );
Smola67
новенький
Сообщения: 10
Зарегистрирован: 29.01.2015 12:49:19

Сообщение Smola67 »

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 ничего не дает (ошибок нет, но поиск по кириллице не работает).
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Smola67 писал(а):UTF8ToWinCP - не распознает Лазарус

подключите модуль LazUTF8
Smola67
новенький
Сообщения: 10
Зарегистрирован: 29.01.2015 12:49:19

Сообщение Smola67 »

vitaly_l писал(а):
Smola67 писал(а):UTF8ToWinCP - не распознает Лазарус

подключите модуль LazUTF8

Человек... Нет! Человечище!!! Огроменное СПАСИБО! Заработало. Всего тебе (да и всему этому сообществу), разумеется, хорошего. И здоровья)
P.S. несколько часов сидел мудрил (хотел уже сервак с Lazarus переустанавливать).
Lucifer
постоялец
Сообщения: 133
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Сообщение Lucifer »

Чтобы не подключать модули... Достаточно (для MS SQL) в запросе написать WHERE Field = N'строка поиска'. Литерал N укажет серверу, что текст нужно сконвертировать в юникод. А сервер кириллицу в любом случае хранит в юникоде.
Ответить