Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2015, 11:16   #1
MarcusAurelius
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 12
Вопрос Не исполняются поля информации для фильтров

Добрый день! Прошу помощи в следующем вопросе:

Есть таблица, выведенная путем TBGrid в Delphi. Необходимо создать фильтр по одному из параметров. В моём случае это столбцы FIRM_NAME и FIRM_ID.
Мною создано два поля: Edit1 и Edit2, а так же кнопка Button1.


Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOFirm_Name.SQL.Clear;
ADOFirm_Name.SQL.Add('SELECT NAME as FIRMNAME, FIRM_ID FROM firm f, WHERE NAME=:FIRM_NAME and FIRM_ID=:FIRM_ID');
ADOFirm_Name.Parameters.ParamByName('FIRM_NAME').Value:=Edit1.Text;
ADOFirm_Name.Parameters.ParamByName('FIRM_ID').Value:=Edit2.Text;
ADOFirm_Name.Active:=True;
end;

end.
Прошу указать на допущенную мной ошибку.
Спасибо!
MarcusAurelius вне форума Ответить с цитированием
Старый 13.09.2015, 11:21   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
FROM firm f,
запятая не нужна, да и f тоже (даже если это псевдоним таблицы, то далее его не используешь)
GreenWizard вне форума Ответить с цитированием
Старый 13.09.2015, 11:28   #3
MarcusAurelius
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
Код:
FROM firm f,
запятая не нужна, да и f тоже (даже если это псевдоним таблицы, то далее его не используешь)
Исправлено. Фильтрация по прежнему не выполняется.
MarcusAurelius вне форума Ответить с цитированием
Старый 13.09.2015, 11:33   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

и нет сообщений об ошибках?
GreenWizard вне форума Ответить с цитированием
Старый 13.09.2015, 11:36   #5
MarcusAurelius
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
и нет сообщений об ошибках?
Запускается без ошибок. При нажатии кнопки Button1 таблица один раз мерцает.
MarcusAurelius вне форума Ответить с цитированием
Старый 13.09.2015, 11:38   #6
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
ADOFirm_Name.Active:=False;
в самое начало (с БД давно не работал, чуть торможу тоже )
GreenWizard вне форума Ответить с цитированием
Старый 13.09.2015, 14:21   #7
MarcusAurelius
Пользователь
 
Регистрация: 11.09.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
Код:
ADOFirm_Name.Active:=False;
в самое начало (с БД давно не работал, чуть торможу тоже )
Спасибо!
Каким должен быть запрос в том случае, если фильтрация происходит не в двух, а в одном из полей? На данном моменте вылезает следующая ошибка: "Несоответствие типов данных в выражении условия отбора"
MarcusAurelius вне форума Ответить с цитированием
Старый 13.09.2015, 14:40   #8
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
	whereExpr := '';

	if Edit1.Text <> '' then
		whereExpr := '(NAME like :FIRM_NAME)';
		
	if Edit2.Text <> '' then
	begin
		if whereExpr <> '' then
			whereExpr := whereExpr + ' AND ';
		whereExpr := whereExpr + '(FIRM_ID=:FIRM_ID)';
	end;
		
	if whereExpr <> '' then
		whereExpr := ' WHERE ('  + whereExpr + ')';
	
	ADOFirm_Name.SQL.Add('SELECT NAME as FIRMNAME, FIRM_ID FROM firm' + whereExpr);
	
	if Edit1.Text <> '' then
		ADOFirm_Name.Parameters.ParamByName('FIRM_NAME').Value:=Edit1.Text;
		
	if Edit2.Text <> '' then
		ADOFirm_Name.Parameters.ParamByName('FIRM_ID').Value:=Edit2.Text;
такой костыль позволит искать либо по названию, либо по айди, либо одновременно по обеим параметрам, либо выводит список без фильтрации
одно НО: я заменил = на like, чтоб искало по части названия, но я не уверен в корректности такого шаблона поиска.... может понадобиться замена ".Value:=Edit1.Text;" на ".Value:={'*' + если должно искать вхождение части}Edit1.Text + '*';"

Последний раз редактировалось GreenWizard; 13.09.2015 в 14:43.
GreenWizard вне форума Ответить с цитированием
Старый 13.09.2015, 14:47   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Необходимо создать фильтр по одному из параметров.
Наверное нужно так:

Код:
begin

with ADOFirm_Name
 SQL.Text:=('SELECT NAME as FIRMNAME, FIRM_ID FROM firm f WHERE (NAME=:FIRM_NAME or :FIRM_NAME='''') and (FIRM_ID=:FIRM_ID or :FIRM_ID=0)');
 Parameters.ParamByName('FIRM_NAME').Value:=Edit1.Text;
 Parameters.ParamByName('FIRM_ID').Value:=StrToIntDef(Edit2.Text,0);
 Active:=True;
end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.09.2015, 14:55   #10
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
WHERE (NAME=:FIRM_NAME or :FIRM_NAME='''') and (FIRM_ID=:FIRM_ID or :FIRM_ID=0)
кстати да, забыл что оно может подставлять параметры так)) намного проще и понятнее моего костыля)
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите создать макрос для копирования данных из одной таблицы в другую с учетом выбранных фильтров Себастьян Microsoft Office Excel 0 04.10.2013 13:59
Книги/статьи по обработке изображений(применение фильтров) WebbMan Обсуждение статей 0 23.10.2012 22:22
Не исполняются команды командной строки ramzes777 Общие вопросы Delphi 3 27.10.2011 01:44
Моделирование фильтров с использованием MatLab Damer Помощь студентам 1 22.06.2011 21:07
exel: использование мастеров, фильтров и надстроек MR_Andrew Microsoft Office Excel 3 16.04.2010 08:58