Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Sql запрос

13K
25 апреля 2006 года
batvin1
16 / / 21.03.2006
Добрый день.
Есть запрос следующего вида:
DataModule2.ADOQuery1.Active:=false;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('SELECT *');
DataModule2.ADOQuery1.SQL.Add('FROM fiziologiya');
DataModule2.ADOQuery1.SQL.Add('WHERE Problema LIKE '''+FindEdit.Text+'''');
DataModule2.ADOQuery1.Active:=true;

Как сделать чтобы искалось не строгое совпадение, а например, при введении "олок" находилось и "молоко".

Зараннее всем спасибо
286
25 апреля 2006 года
misha_turist
572 / / 28.11.2005
Цитата:
Originally posted by batvin1
Добрый день.
Есть запрос следующего вида:
DataModule2.ADOQuery1.Active:=false;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('SELECT *');
DataModule2.ADOQuery1.SQL.Add('FROM fiziologiya');
DataModule2.ADOQuery1.SQL.Add('WHERE Problema LIKE '''+FindEdit.Text+'''');
DataModule2.ADOQuery1.Active:=true;

Как сделать чтобы искалось не строгое совпадение, а например, при введении "олок" находилось и "молоко".

Зараннее всем спасибо


Ты лучше это в разделе базы данных спроси, только ты не Pascal код, а голый sql код представь... и укажи под какой сервер делаеш...

286
25 апреля 2006 года
misha_turist
572 / / 28.11.2005
Цитата:
Originally posted by batvin1
Добрый день.
Есть запрос следующего вида:
DataModule2.ADOQuery1.Active:=false;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('SELECT *');
DataModule2.ADOQuery1.SQL.Add('FROM fiziologiya');
DataModule2.ADOQuery1.SQL.Add('WHERE Problema LIKE '''+FindEdit.Text+'''');
DataModule2.ADOQuery1.Active:=true;

Как сделать чтобы искалось не строгое совпадение, а например, при введении "олок" находилось и "молоко".

Зараннее всем спасибо



Ты с ADO или ODAC работал...?
Если работал, то загляни сюда пожалуйста...
http://forum.codenet.ru/showthread.php?s=&threadid=31317

929
25 апреля 2006 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by batvin1
Добрый день.
Есть запрос следующего вида:
DataModule2.ADOQuery1.Active:=false;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('SELECT *');
DataModule2.ADOQuery1.SQL.Add('FROM fiziologiya');
DataModule2.ADOQuery1.SQL.Add('WHERE Problema LIKE '''+FindEdit.Text+'''');
DataModule2.ADOQuery1.Active:=true;

Как сделать чтобы искалось не строгое совпадение, а например, при введении "олок" находилось и "молоко".

Зараннее всем спасибо


Использовать маски типа %олок% или _олок_

385
26 апреля 2006 года
SomewherSomehow
477 / / 25.07.2004
Поставь символ % перед параметром, если хочешь чтобы искались строки у которых совпадает концовка, соответсвенно символ % после параметра, если ищешь строки которые совпадают по началу. Ну а если и так и там то будет искаться любое вхождения подстроки. В этом случае:

 
Код:
DataModule2.ADOQuery1.SQL.Add('WHERE Problema LIKE %'+FindEdit.Text+'%');
13K
28 апреля 2006 года
batvin1
16 / / 21.03.2006
Спасибо, все работает.
Хотелось бы немножко усложнить поиск.

Идея: пользователь выбирает из списка (ComboBox) поле, по которому будет осуществляться поиск.

Как это реализовать?
385
28 апреля 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by batvin1
Спасибо, все работает.
Хотелось бы немножко усложнить поиск.

Идея: пользователь выбирает из списка (ComboBox) поле, по которому будет осуществляться поиск.

Как это реализовать?



Ответ очевиден:

 
Код:
DataModule2.ADOQuery1.SQL.Add('WHERE '+ComboBoxSearch.SelectedItem.Text+' LIKE %'+FindEdit.Text+'%');


Не знаю на чем пишешь, может там не так свойства комбобокса называются, но принцип, думаю, понятен...
13K
28 апреля 2006 года
batvin1
16 / / 21.03.2006
Цитата:
Originally posted by SomewherSomehow
Ответ очевиден:

 
Код:
DataModule2.ADOQuery1.SQL.Add('WHERE '+ComboBoxSearch.SelectedItem.Text+' LIKE %'+FindEdit.Text+'%');


Не знаю на чем пишешь, может там не так свойства комбобокса называются, но принцип, думаю, понятен...



А если текст в ComboBox'е не совпадает с названием поля?

929
28 апреля 2006 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by batvin1
А если текст в ComboBox'е не совпадает с названием поля?


Заведи массив с именами полей, в котором индексы будут соответствовать индексам в комбобоксе, и подставляй значение элемента массива с индексом, равным номеру выбранного элемента комбобокса.

13K
28 апреля 2006 года
batvin1
16 / / 21.03.2006
Цитата:
Originally posted by sp999
Заведи массив с именами полей, в котором индексы будут соответствовать индексам в комбобоксе, и подставляй значение элемента массива с индексом, равным номеру выбранного элемента комбобокса.


А объясните, плиз, на каком нибудь примере.
А то в книжке, которая у меня есть такого не нашел :-(

929
28 апреля 2006 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by batvin1
А объясните, плиз, на каком нибудь примере.
А то в книжке, которая у меня есть такого не нашел :-(


Ну вот допустим, у тебя в таблице есть 4 поля: ID, SURNAME, NAME, PATRONYMIC.
И в комбобоксе следущие варианты:
Фамилия (SURNAME)
Имя (NAME)
Отчество (PATRONYMIC)
Идентификатор (ID)
Ты заводишь массив ArrayFields из 4 строк:

 
Код:
var ArrayFields[0..3] of string=('SURNAME','NAME','PATRONYMIC','ID');

Порядок должен совпадать с порядком в комбобоксе.
Далее, выбрал, допустим юзер в комбобоксе отчество - ComboBox1.ItemIndex = 2 (нумерация от 0).
Значит, ты формируешь следующую строку SQL:
 
Код:
DataModule2.ADOQuery1.SQL.Add('WHERE '+ArrayFields[ComboBox1.ItemIndex]+' LIKE %'+FindEdit.Text+'%');

Надеюсь, теперь более понятно объяснил.
385
28 апреля 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by batvin1
А если текст в ComboBox'е не совпадает с названием поля?



Тогда не нужно писать в вопросе: "пользователь выбирает из списка (ComboBox) поле" =)

Кроме массивов, можно использовать свойства Item-а в комбобоксе. Правда не везде. В некоторых компонентах Итемы представлены просто в виде строк, но в других в виде отдельных классов, у которых есть куча полей типа Value,DisplayText,Tag и т.д. куда можно записать инф-ию...если таких нет, то конечно используй массивы, как грамотно посоветовал sp999, только всегда помни о синхронизации, добавляешь в комбобокс новый Итем - добавляй в массив новое значение для него...

А вообще тема уже плавно начинает выходить за рамки SQL, так что такие вопросы надо задавать уже в, соттветсвующем твоей среде разработке, разделе форума, иначе придется закрывать.

13K
28 апреля 2006 года
batvin1
16 / / 21.03.2006
Спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог