Поиск Locate в БД

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

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

Поиск Locate в БД

Сообщение AkANz » 30.06.2010 12:52:09

Есть база данных на PostgreSQL к которой подключаюсь с помощью ZeosDBO 6.6.6.
Таблица с полями:
kodxiop (varchar(6)) naimxiop (varchar(150))
15002 Лапароскопия ......
30000 Операция на мягких ....

На форме в Edit вводится код. По выходу из Edit:
zqSprXirOper.Locate('kodxiop', edKodXirOper.Text, [loPartialKey,loCaseInsensitive])
и ничего не происходит. Если заменить на:
zqSprXirOper.Locate('naimxiop', edKodXirOper.Text, [loPartialKey,loCaseInsensitive])
то поиск осуществляется.

Подскажите, пожалуйста, почему в первом случае не осуществляется поиск.
AkANz
новенький
 
Сообщения: 26
Зарегистрирован: 16.03.2010 13:59:02
Откуда: Алтайский край

Re: Поиск Locate в БД

Сообщение Vadim » 30.06.2010 15:31:00

AkANz писал(а):Подскажите, пожалуйста, почему в первом случае не осуществляется поиск.

Стопудово из-за того, что в edKodXirOper впереди пробел стоял, который Вы не заметили. ;)
Либо в столбце с кодом впереди пробел присутствует.

Добавлено спустя 2 минуты 26 секунд:
Для проверки, попробуйте введите "15" и поиск у Вас переместится на Лапароскопию, если, конечно, поиск по части слова вообще работает (у меня Постгри нету, проверить не могу).
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Поиск Locate в БД

Сообщение AkANz » 01.07.2010 06:43:54

Vadim писал(а):Либо в столбце с кодом впереди пробел присутствует.

Так и есть. Недосмотрел. Базу конвертировал из dbf, конвертер и поставил ведущий пробел в этом поле.

Подскажите, пожалуйста, еще по поиску. У меня не работает регистро-независимый поиск (параметр loCaseInsensitive)
В базе присутствует Иванов, если набрать иванов поиск не осуществляется, а если Иванов, то переходит на запись.

Спасибо.
AkANz
новенький
 
Сообщения: 26
Зарегистрирован: 16.03.2010 13:59:02
Откуда: Алтайский край

Re: Поиск Locate в БД

Сообщение Vadim » 01.07.2010 07:19:17

А Вы зря в качестве кодов оставили:
AkANz писал(а):kodxiop (varchar(6))

лучше бы этот столбец преобразовать в целочисленный. По целочисленному полю поиск осуществляется не в пример быстрее, чем по varchar.
AkANz писал(а):Подскажите, пожалуйста, еще по поиску. У меня не работает регистро-независимый поиск (параметр loCaseInsensitive)

У меня есть подозрение, что в этом виноват Postgre. Но не уверен, т.к. я с ним не работаю.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Поиск Locate в БД

Сообщение grigoreo » 01.07.2010 10:06:11

AkANz писал(а):Подскажите, пожалуйста, еще по поиску. У меня не работает регистро-независимый поиск (параметр loCaseInsensitive)


скорее недоработки Zeos, (а почему бы не возвращать выборку с фильтрацией на уровне самого языка SQL)
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: Поиск Locate в БД

Сообщение AkANz » 01.07.2010 13:27:06

grigoreo писал(а):(а почему бы не возвращать выборку с фильтрацией на уровне самого языка SQL)


В данной задаче в этом нет необходимости.

Vadim писал(а):лучше бы этот столбец преобразовать в целочисленный.


Да. Я сейчас так и сделал.

Спасибо.
AkANz
новенький
 
Сообщения: 26
Зарегистрирован: 16.03.2010 13:59:02
Откуда: Алтайский край


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

Рейтинг@Mail.ru