![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск любого слова в базе [D7, XP]
Viktop © (2005-10-07 13:05:00)Помогите составить запрос
Имеется база с полями (ФИО, Статья, Ключевые слова). Надо, чтобы искалось хотябы отдно слово (а не вся фраза) из указанного поля.
Делаю так:
SELECT * FROM base WHERE FIO='Айзенберг Б.И.'
Находит только те записи, где значение поля равно Айзенберг Б.И., а если в поле значение Айзенберг Б.И., Белопольская Н.Л., то не находит
P.S.: в примере указана * т.к. если пишу название любого поля (FIO, Article и др.), то выдаётся сообщение quFind: Field 'Key' not found.. Названия указавыл, которые задавал в Database Desktop
0bsid (2005-10-14 21:55:00) [1]>И ещё вопрос: Как сделать запрос не чуствительным к регистру?
"Предикат CONTAINING аналогичен предикату LIKE, за исключением того,
что он не чувствителен к регистру букв. Разрешено также использовать
конструкцию NOT CONTAINING."
Viktop (2005-10-11 16:23:00) [2]
> нет. это для любых русских букв
Странно. Есть в записи строка Кочунас, если искать кочунас, то находит
Drakosha (2005-10-11 10:48:00) [3]нет. это для любых русских букв
Viktop (2005-10-09 21:25:00) [4]
> теперь проверь LOWER('ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ')
Блин. Это только если вся строка в верхнем регистре?
Anatoly Podgoretsky (2005-10-09 18:48:00) [5]теперь проверь LOWER('ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ')
Viktop (2005-10-09 16:40:00) [6]Решение нашёл. Вот кусок
...
str := LowerCase('%' + cbFind.Text + '%');
...
// f - имя поля
quFind.SQL.Add('WHERE LOWER (' + f + ') LIKE ''' + str + '''');
...
Anatoly Podgoretsky (2005-10-09 13:40:00) [7]Попробую предположить - Архангелького читал при выборе базы.
Anatoly Podgoretsky (2005-10-09 13:39:00) [8]Запрос к регистру не чуствителен, чуствительны базы данных и индексы. Для Парадокса решения не знаю, но всегда можно привести к одному регистру, но Парадокс не сможет это сделать правильно для русских букв. Переходи на другую базу, если хочешь остаться на десктопный, то на dBase там реализуемо. Можно на Акцесс, но не проверял по этой части, но думаю что порядок, а с Парадоксом просто забудь про это.
Viktop (2005-10-09 09:09:00) [9]И ещё вопрос: Как сделать запрос не чуствительным к регистру?
Viktop (2005-10-08 06:56:00) [10]Спасибо. Помогло.
Anatoly Podgoretsky (2005-10-07 19:32:00) [11]Во первых двойной щелчок по таблице и удалить все поля из списка
Во вторых слово YEAR резервированое имя
Viktop (2005-10-07 17:08:00) [12]Если вставить в запрос
select FIO,Article,KeyWords,Nomber,Str,Year FROM sobsno\base WHERE fio LIKE "%Кочунас%", то пишет
Invalid use of keyword
Token: Year
Line Number: 1
А если так:select Nomber FROM sobsno\base WHERE fio LIKE "%Кочунас%", то
quFind: Field 'Key' not found.
Drakosha (2005-10-07 16:18:00) [13]оно ругается только на поле 'key'?
всмысле:
select FIO,Article,KeyWords,Nomber,Str,Year FROM sobsno\base WHERE fio LIKE "%Кочунас%"
проходит нормально?
если так то возможно key это какое нить ключевое слово и его нельзя использовать в имени поля, если не так....то даж не знаю...
Viktop (2005-10-07 15:28:00) [14]БД-Paradox
Наверное этот список полей:
object TableKey: TAutoIncField
FieldName = 'Key'
ReadOnly = True
end
object TableFIO: TStringField
FieldName = 'FIO'
Size = 255
end
object TableArticle: TStringField
FieldName = 'Article'
Size = 255
end
object TableKeyWords: TStringField
FieldName = 'KeyWords'
Size = 255
end
object TableNomber: TSmallintField
FieldName = 'Nomber'
end
object TableStr: TSmallintField
FieldName = 'Str'
end
object TableYear: TSmallintField
FieldName = 'Year'
end
msguns (2005-10-07 15:24:00) [15]>Viktop (07.10.05 14:57) [7]
>SELECT * FROM sobsno\base WHERE fio LIKE "%Кочунас%"
Не все сервера одинаково трактуют символ "%" как "что угодно". Укажи Сервер (тип) БД
msguns (2005-10-07 15:21:00) [16]>Viktop (07.10.05 14:57) [7]
>SELECT * FROM sobsno\base WHERE fio LIKE "%Кочунас%"
>Что имеется ввиду под скриптом?
Дракоша хотел от тебя список полей таблицы БД, чтобы проверить имеется ли там поле с именем "KEY", ты же ему сунул свой запрос, где вообще нетути нифига, кроме *, типа вывести все поля.
SQL-текст, создающий таблицы БД (и не только), называется скриптом. Из такого "креативного" скрипта можно: во-первых быстро создать БД на "чистом" компе, во-вторых, "прочитать" всю информацию (бизнес-правила), заложенную в БД. В том числе и о такуй "мелочи", как структуры таблиц.
Некоторые серверы имеют такую фичу - выгрузку всей бизнес-логики или указанных частей в скрипты.
Viktop (2005-10-07 14:57:00) [17]
SELECT * FROM sobsno\base WHERE fio LIKE "%Кочунас%"
Что имеется ввиду под скриптом?
Drakosha (2005-10-07 14:51:00) [18]сбрось скрипт по созданию таблицы и селект неработающий
Viktop (2005-10-07 13:43:00) [19]Как нет. В самой базе точно есть (оно ключевое) и причём тут оно?
Drakosha (2005-10-07 13:36:00) [20]Ну какие тут могут быть идеи... нету у тя поля key и всё тут