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

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

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

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

Сообщение Smola67 » 18.04.2017 20:56:20

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

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

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

Сообщение WAYFARER » 18.04.2017 21:07:16

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

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

Сообщение Smola67 » 18.04.2017 21:20:47

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

1. СУБД: MS SQL Server
2. Знаю, что не поиск: я пример привел того, что не ищет "кириллицу". Числа и англ. слова, введенные в edit (в нем через onchange осуществляется поиск), находятся без проблем (например, если ввести "e", то выведутся данные, среди которых есть эта буква).
Только "кириллица" не ищется. Вводил запрос на прямую в Query - пустота (ошибок нет).
Smola67
новенький
 
Сообщения: 10
Зарегистрирован: 29.01.2015 13:49:19

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

Сообщение vitaly_l » 18.04.2017 21:47:12

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

Попробуйте сменить кодировку, в какой кодировке опрашиваемая таблица?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Smola67 » 18.04.2017 22:06:52

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

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

Где это можно посмотреть? В MS SQL Server Management Studio в Свойствах БД нашел только это: Параметры сортировки - Cyrillic_General_CI_AS
Smola67
новенький
 
Сообщения: 10
Зарегистрирован: 29.01.2015 13:49:19

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

Сообщение vitaly_l » 18.04.2017 22:11:34

Smola67 писал(а):Cyrillic_General_CI_AS

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

Код: Выделить всё
SQLstring := UTF8ToWinCP( select * from (название таблицы) where (название поля) = 'критерий поиска' )
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Smola67 » 18.04.2017 22:33:19

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
новенький
 
Сообщения: 10
Зарегистрирован: 29.01.2015 13:49:19

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

Сообщение vitaly_l » 18.04.2017 23:15:37

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
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Smola67 » 18.04.2017 23:28:05

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
новенький
 
Сообщения: 10
Зарегистрирован: 29.01.2015 13:49:19

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

Сообщение vitaly_l » 18.04.2017 23:39:19

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

подключите модуль LazUTF8
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Smola67 » 18.04.2017 23:44:44

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

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

Человек... Нет! Человечище!!! Огроменное СПАСИБО! Заработало. Всего тебе (да и всему этому сообществу), разумеется, хорошего. И здоровья)
P.S. несколько часов сидел мудрил (хотел уже сервак с Lazarus переустанавливать).
Smola67
новенький
 
Сообщения: 10
Зарегистрирован: 29.01.2015 13:49:19

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

Сообщение Lucifer » 19.04.2017 15:20:06

Чтобы не подключать модули... Достаточно (для MS SQL) в запросе написать WHERE Field = N'строка поиска'. Литерал N укажет серверу, что текст нужно сконвертировать в юникод. А сервер кириллицу в любом случае хранит в юникоде.
Lucifer
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 8

Рейтинг@Mail.ru