Консультация № 188620
09.01.2016, 09:26
0.00 руб.
0 13 1
Здравствуйте! Прошу помощи в следующем вопросе:
у меня в программе есть радиогрупп. И через него осуществляется фильтрация.
procedure TForm5.SpeedButton5Click(Sender: TObject);
begin
case RadioGroup2.ItemIndex of
0: datamodule24.posmotr.Filter := 'ФИО';
1: datamodule24.posmotr.Filter := 'ИИН';
2: datamodule24.posmotr.Filter := 'тЕЛЕФОН';
3: datamodule24.posmotr.Filter := 'Адрес';

Но при введении значении в едит там фильтрация не осуществляется. Там нужно точь в точь указать ФИо или ИИН. А мне нужно чтобы при введении любых значении в едит соответствующий выбранной категории в радиогруп только отфильтрованныеданные отображались в таблице. Можно и без баттона обойтись.
Спасибо

Обсуждение

давно
Посетитель
399390
30
09.01.2016, 09:28
общий
давно
Профессионал
153662
1070
09.01.2016, 10:24
общий
09.01.2016, 10:27
Адресаты:
Здравствуйте. Можно при помощи запроса сделать поиск по введённым буквам, причём с каждой новой буквой список будет уменьшаться.
Код:
 ADOQuery2.Close; // Закрыть запрос 
ADOQuery2.SQL.Clear; // Отчистить запрос
ADOQuery2.SQL.Add('select DISTINCT seans from zur '); // 'seans' название нужного поля по которому идёт поиск, 'zur' название нужной таблицы
ADOQuery2.SQL.Add('where seans>=sen and seans like '''+c+'%''ORDER BY seans'); // Добавление новых значений в запрос
ADOQuery2.Parameters.ParamByName('sen').Value:= c; // 'с' как раз вводимое значение в поле edit
ADOQuery2.Open; // Открыть запрос
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
399390
30
09.01.2016, 10:36
общий
а с радиогрупп
у меня там разные параметры
например кто-то может делать поиск с помощью фио
а кто-то иин
давно
Профессионал
153662
1070
09.01.2016, 10:43
общий
09.01.2016, 12:22
Адресаты:
А что прячется в datamodule24.posmotr.Filter под posmotr? А в радиогруп выбираем
Код:
case RadioGroup2.ItemIndex of
0: seans := 'ФИО';
1: seans := 'ИИН';
2: seans := 'тЕЛЕФОН';
3: seans := 'Адрес';
то есть по радиогрупп выбираем название поля по которому будем искать, ну и строку
Код:
ADOQuery2.SQL.Add('select DISTINCT seans from zur ');  // 'seans' название нужного поля по которому идёт поиск, 'zur' название нужной таблицы
ADOQuery2.SQL.Add('where seans>=sen and seans like '''+c+'%''ORDER BY seans'); // Добавление новых значений в запрос
изменить на
Код:
ADOQuery2.SQL.Add('select DISTINCT '+seans+' from zur ');  // 'seans' название нужного поля по которому идёт поиск, 'zur' название нужной таблицы
ADOQuery2.SQL.Add('where '+seans+'>=sen and seans like '''+c+'%''ORDER BY '+seans+''); // Добавление новых значений в запрос
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
399390
30
09.01.2016, 10:45
общий
а куда этот код писать в событие едит или баттон
давно
Посетитель
399390
30
09.01.2016, 10:46
общий
seans это что
давно
Профессионал
153662
1070
09.01.2016, 10:54
общий
Цитата: arujan.nurlankul23
а куда этот код писать в событие едит или баттон
Код:
    case RadioGroup2.ItemIndex of
0: seans := 'ФИО';
1: seans := 'ИИН';
2: seans := 'тЕЛЕФОН';
3: seans := 'Адрес';
пишем в баттон, а остальное в едит, seans это переменная типа строка.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
399390
30
09.01.2016, 11:00
общий
СПАСИБО
давно
Профессионал
153662
1070
09.01.2016, 11:05
общий
Адресаты:
можно оформлять ответом?
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
399390
30
09.01.2016, 11:06
общий
ну там про seans and zur немного не понятно
давно
Профессионал
153662
1070
09.01.2016, 11:18
общий
Цитата: arujan.nurlankul23
ну там про seans and zur немного не понятно
seans здесь переменная типа строка указывает на поле поиска в таблице, а zur название Вашей таблицы для поиска, это код из работающем программы.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
399390
30
09.01.2016, 11:25
общий
можно оформлять ответом?
да
давно
Профессионал
153662
1070
09.01.2016, 12:51
общий
это ответ
Здравствуйте, arujan.nurlankul23!
Предлагаю такой способ, при помощи запроса, по мере введения очередного символа будет сокращаться список значений поиска. В событие edit пишем:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var id: string;
begin
case RadioGroup2.ItemIndex of // где id будет строка с названием поля по которому идёт поиск
0: id := 'ФИО';
1: id := 'ИИН';
2: id := 'тЕЛЕФОН';
3: id := 'Адрес';
end;
ADOQuery2.Close; // Закрыть запрос
ADOQuery2.SQL.Clear; // Отчистить запрос
ADOQuery2.SQL.Add('select DISTINCT '+id+' from table_name'); // 'table_name' название нужной таблицы
ADOQuery2.SQL.Add(' where '+id+'>=par and '+id+' like '''+edit1.Text+'%''ORDER BY '+id+''); // Добавление новых значений в запрос
ADOQuery2.Parameters.Clear;
ADOQuery2.parameters.addParameter.name:='par';
ADOQuery2.Parameters.ParamByName('par').DataType:= ftString;
ADOQuery2.Parameters.ParamByName('par').Attributes:= [paNullable];
ADOQuery2.Parameters.ParamByName('par').Value:= edit1.Text; // как раз вводимое значение в поле edit
ADOQuery2.Open; // Открыть запрос
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа