Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка через Query, БД - dBase 
:(
    Опции темы
NiJazz
  Дата 20.12.2003, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Привет!
Мне нужно сделать выборку данных, используя те критерии поиска,
которые захочет пользователь. К примеру, поиск в таблице "Люди",
может проходить по имени, фамилии, возрасту, полу, профессии и так
далее. Для выборки я сделал новую форму, нанёс на её Edit'ы, ещё
что-то и кнопку Поиск. Пользователь может заполнить любое из полей
(Edit'ов), может заполнить одно, а может и все, как ему захочется.

Вот суть вопроса: как сделать в Query запрос так, чтобы он искал именно
по выбранным характеристикам? То есть искал только по заполненным Edit'ам.
В результате все найденные записи размещаются на Grid’e.

PM MAIL   Вверх
Петрович
Дата 20.12.2003, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



WEHRE часть в запросе SELECT.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
NiJazz
Дата 20.12.2003, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Петрович, это понятно, что не без условий... smile.gif Ме надо, чтобы просто пихал во where нужные поля... smile.gif
PM MAIL   Вверх
Иван Помидоров
Дата 21.12.2003, 00:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











проверяй заполнен ли едит, если да то s:=select* from yourtable where ('FIO= '+edit1.text+' ) and'
теперь следущий едит тока селект фром не прибавляеш и тд.
Потом query1.sql.add(s);

Я щас тоже самое делаю , но такой геморой!!!
  Вверх
NiJazz
Дата 21.12.2003, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Код
if Edit1.Text <> '' then sel := sel + '(MainInfo.OrgName="'+Edit1.Text+'") ';
if Edit2.Text <> '' then sel := sel + 'and (MainInfo.LeadSur="'+Edit2.Text+'") and (MainInfo.OrgName="'+Edit1.Text+'") ';
if Edit3.Text <> '' then sel := sel + 'and (Contacts.Sur="'+Edit3.Text+'") and (Contacts.ConOrgName="'+Edit1.Text+'") ';
if Edit4.Text <> '' then sel := sel + 'and (Contacts.Nam="'+Edit4.Text+'") and (Contacts.ConOrgName="'+Edit1.Text+'") ';
if Edit5.Text <> '' then sel := sel + 'and (Contacts.Otch="'+Edit5.Text+'") and (Contacts.ConOrgName="'+Edit1.Text+'") ';


Так сделал. Сам себе ответил. smile.gif
PM MAIL   Вверх
Vit
Дата 21.12.2003, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Вот, написал универсальную функцию:

Код
Function TForm1.GetSQLStatement(Tag:Integer):String;
 var i:integer;
       Edit:TEdit;        
begin
 Result:='';
 For i:=0 to ComponentCount-1 do
   if (Components[i] is TEdit) and (Components[i].tag=tag) then
     begin
       Edit:=Components[i] as TEdit;
       if Edit.text='' then continue;
       if Result<>'' then Result:=Result+ ' and ';
       Result:=Result+Edit.name+'='+ QuotedStr(Edit.text);
     end;
 if Result<>'' then Result:='Where '+Result;
end;


Для использования:

1) На форму ставятся Edit'ы в нужном количестве.
2) Названия Edit (свойство Name) должны быть такие же как название полей в таблице
3) Свойствам tag этих Edit присваивается что-то отличное от нуля, но всем одинаковое (для того чтобы можно было сгрупировать Edit для разных кверей, и для того чтобы функция не реагировала на чужие Edit, поставленные на форму для других целей)
4) Функция вернёт готовый Where для любых комбинаций.
5) В качестве параметра функции задать значение tag для обрабатываемой группы Edit


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
December
Дата 21.12.2003, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



В FAQ похожий топик есть - динамическая генерация SQL-запросов. Там вроде тоже неплохо сделано.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.