Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите составить запрос [D7, dBase, FoxPro]


Страницы:   1 2

Dell3r ©   (2005-05-17 11:57:00) 

В сомбобоксе вводится слово. в процессе ввода нужно оставлять записи соответствующие вводимым символам без учета регистра
Я пишу:

procedure TForm.CBNameKeyPress(Sender: TObject; var Key: Char);
Memo1.Lines.Strings[1]:='Where Name like "%'+CBName.Text+'%"';
QueryTMC.SQL.Assign(Memo1.lines);
QueryTMC.Open;

Вроде всё работает но если ввожу слово "лада", то среди записей есть "Влад"


Sergey13   (2005-05-17 12:21:00) [21]

2[10] ANB ©   (17.05.05 12:18)
Так вроде можно индекс по функции сделать. Я правда не пробовал - у меня стандарт эдишн был.


ANB   (2005-05-17 12:20:00) [22]


> А почему нельзя просто
- потому что в поле у него может быть в нижнем. Тоже самое, если написать '%ЛАДА%'. А ошибка будет прежней. Без словарика тут не обойтись.
Кстати, а зачем здесь посредник Memo1 ???


msguns   (2005-05-17 12:18:00) [23]

Да, только приведенный мною пример будет выбирать записи, у которых строки начинаются на текст комбобокса. Если надо начхать на регистр, то слева и справа предиката добавить LOWER или UPPER

Однако, как я понял из [4], это не устроит. В этом случае ничего лучше, чем сканировать НД на предмет вхождения подстроки в строку для лок.БД я не знаю.


ANB   (2005-05-17 12:18:00) [24]


> А причем здесь скала с оруклом ?
- да это для примера. Local SQL тоже не умеет регистр игнорить. В Oracle я завожу доп поле. В триггере заношу в него строку в верхнем регистре из основного и цепляю на него индекс. Как он будет так с локальными БД изгалятся - не знаю. Особенно, если нужен поиск по словам. В принципе, у FoxPro есть индексы с формулами и можно применить функцию типа Upper (забыл как в фоксе она называется), но, кажись в DOS кодировке она не работала.


Sergey13   (2005-05-17 12:16:00) [25]

А почему нельзя просто
Memo1.Lines.Strings[1]:='Where UPPER(Name) like "%'+AnsiUpperCase(CBName.Text)+'%"';
?


Dell3r   (2005-05-17 12:14:00) [26]

Я в sql не силён он ругается на From.
Насколько я понимаю нужно писать

Select * from base
where SUBSTRINR(Name FROM 1 FOR '+IntToStr(Length('лада'))+')='+QuotedStr('лада')


msguns   (2005-05-17 12:12:00) [27]

>ANB ©   (17.05.05 12:09) [6]
>SQL так не умеет. MS SQL, кажись, умеет регистр игнорить, а Oracle уже нет.

А причем здесь скала с оруклом ?


ANB   (2005-05-17 12:09:00) [28]

SQL так не умеет. MS SQL, кажись, умеет регистр игнорить, а Oracle уже нет. Придется тебе заводить служебное поле в верхнем регистре, а для поиска слов - отдельную таблицу-словарик.


msguns   (2005-05-17 12:07:00) [29]

SQL.ADD('.. WHERE SUBSTRINR(<Имя_поля> FROM 1 FOR '+IntToStr(Length(Combo.Text))+')='+QuotedStr(Combo.Text));

(Help+LocalSQL)


Dell3r   (2005-05-17 12:06:00) [30]

Если убрать в начале %, то поиск производится с начала записи.
А мне нужны так же записи "Экспо-лада"


Dell3r   (2005-05-17 12:03:00) [31]

А как без учета регистра Записей типа "Лада" там нету там только "лада"


ANB   (2005-05-17 12:00:00) [32]

И почитай про LIKE в хэлпе.


ANB   (2005-05-17 11:59:00) [33]

Так и должно быть. %лада% - все строки, содержащие лада. Убери % в начале.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо