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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2013, 12:56   #1
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию Фильтрация на универсальный форму DBGrid 1

Здравствуйте ребята. Хочу делать универсальный форма, на это форму ест один DBgrid который будет отображать при вызове разных (таблицу или представления, вобьем один запрос)
На пример у меня 3 таблица ( Orders, Employees, и Customers ) и 3 Query
OrdersQuery , CustomersQuery, и EmployeesQuery. На главное форме компонент MainMenu , Второе форму на который есть DBGrid -его имя Spravochnik .
Для вызова каждое таблицу пишу простои запрос .

Это заказы
procedure TMain.N2Click(Sender: TObject);
begin
Module.OrdersQuery.Close;
module.OrdersQuery.SQL.Clear;
module.OrdersQuery.SQL.Add('SELECT * FROM Orders');
module.OrdersQuery.Open;
Spravochnik.DBGrid.DataSource:= Module.OrdersSource;
Spravochnik.Caption := 'Список заказов ';
Spravochnik.ShowModal;
end;

Сотрудники
Цитата:
procedure TMain.N3Click(Sender: TObject);
begin
Module.EmployeesQuery.Close;
module.EmployeesQuery.SQL.Clear;
module.EmployeesQuery.SQL.Add('SELE CT * FROM Employees');
module.EmployeesQuery.Open;
Spravochnik.DBGrid.DataSource:= Module.EmployeesSource;
Spravochnik.Caption := 'Список сотрудников';
Spravochnik.ShowModal;

end;
Клиенты

Код:
procedure TMain.N4Click(Sender: TObject);
begin
 Module.CustomersQuery.Close;
  Module.CustomersQuery.SQL.Clear;
   Module.CustomersQuery.SQL.Add('SELECT *  FROM Customers');
    Module.CustomersQuery.Open;
    spravochnik.DBGrid.DataSource:= Module.CustomersSource;
   Spravochnik.Caption := 'Список клиентов ';
  Spravochnik.ShowModal;
end;
ВОПРОС. Я хочу на второе форму= Spravochnik делать фильтрация чрез Edit вот такой фильтр

Код:
Module.Query.Close;
  Module.Query.SQL.Clear;
   Module.Query.SQL.Add('SELECT * FROM [Таблица]');
   Module.Query.SQL.Add('WHERE [Поля] LIKE '''+ Edit1.Text+ '%' +'''');
 Module.Query.Open;
КАК ЭТО РЕАЛИЗОВАТЬ ПОМОГИТЕ ПОЖАЛУЙСТА. на форму= Spravochnik DBGrid выводить разный таблица, зависит от запроса, А как реализовать на это результате фильтрация чрез Edit ?
Изображения
Тип файла: jpg 1.jpg (56.7 Кб, 119 просмотров)
Тип файла: jpg 2.jpg (73.7 Кб, 128 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 04.04.2013, 13:26   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Надо использовать параметризированные запросы
eval вне форума Ответить с цитированием
Старый 04.04.2013, 13:45   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

На пример как ? пример сможете показать ? так не получается
Код:
procedure TSpravochnik.Edit1Change(Sender: TObject);
begin
if Spravochnik.DBGrid.DataSource:= Module.OrdersSource then
 begin
 Module.OrdersQuery.Close;
  Module.OrdersQuery.SQL.Clear;
   Module.OrdersQuery.SQL.Add('SELECT * FROM orders');
   Module.OrdersQuery.SQL.Add('WHERE ShipName LIKE '''+ Edit1.Text+ '%' +'''');
 Module.OrdersQuery.Open ;
   if Spravochnik.DBGrid.DataSource := Module.EmployeesSource then
   begin
    Module.EmployeesQuery.Close;
     Module.EmployeesQuery.SQL.Clear;
      Module.EmployeesQuery.SQL.Add('SELECT * FROM Employees');
       Module.EmployeesQuery.SQL.Add('WHERE FirstName LIKE '''+ Edit1.Text+ '%' +'''');
       Module.EmployeesQuery.Open;

   end;
 end;
end;

end.
Ваши пример покажите пожалуйста как вы думаете ?
xxbesoxx вне форума Ответить с цитированием
Старый 04.04.2013, 14:04   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

не это все неправильно. запрос должен быть один
типа
SELECT * FROM Employees WHERE :FirstName IS NULL OR FirstName = :FirstName
когда в Edit1.Text пусто, то :FirstName инициализируете нулом, тогда не надо будет переделывать запрос постоянно
а в форму справочника передавать уже готовый к использованию датасет, т.к. справочник не должен ничего знать не про какие то там таблицы..

ну вот так я и думаю, и делал бы в 1 приближении(!)
eval вне форума Ответить с цитированием
Старый 04.04.2013, 14:53   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
не это все неправильно. запрос должен быть один
типа
SELECT * FROM Employees WHERE :FirstName IS NULL OR FirstName = :FirstName
когда в Edit1.Text пусто, то :FirstName инициализируете нулом, тогда не надо будет переделывать запрос постоянно
а в форму справочника передавать уже готовый к использованию датасет, т.к. справочник не должен ничего знать не про какие то там таблицы..

ну вот так я и думаю, и делал бы в 1 приближении(!)
Не получается не как , помогите пожалуйста реализовать это . Сложности здесь что разных запросе разных таблица.
Вложения
Тип файла: rar Primer.rar (565.3 Кб, 7 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 04.04.2013, 15:32   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
не это все неправильно. запрос должен быть один
типа
SELECT * FROM Employees WHERE :FirstName IS NULL OR FirstName = :FirstName
когда в Edit1.Text пусто, то :FirstName инициализируете нулом, тогда не надо будет переделывать запрос постоянно
а в форму справочника передавать уже готовый к использованию датасет, т.к. справочник не должен ничего знать не про какие то там таблицы..

ну вот так я и думаю, и делал бы в 1 приближении(!)
Вот так работает хорошо
Код:
procedure TSpravochnik.Edit1Change(Sender: TObject);
begin
if Module.OrdersQuery.Active = true then
  begin
 Module.OrdersQuery.Close;
   Module.OrdersQuery.SQL.Clear;
    Module.OrdersQuery.SQL.Add('SELECT * FROM orders');
  Module.OrdersQuery.SQL.Add('WHERE ShipName LIKE '''+ Edit1.Text+ '%' +'''');
 Module.OrdersQuery.Open ;
 end;
 if Module.EmployeesQuery.Active = true then
   begin
    Module.EmployeesQuery.Close;
      Module.EmployeesQuery.SQL.Clear;
      Module.EmployeesQuery.SQL.Add('SELECT * FROM Employees');
     Module.EmployeesQuery.SQL.Add('WHERE FirstName LIKE '''+ Edit1.Text+ '%' +'''');
  Module.EmployeesQuery.Open;
 end;
 if module.CustomersQuery.Active = true then
 begin
  Module.CustomersQuery.Close;
   Module.CustomersQuery.SQL.Clear;
    module.CustomersQuery.SQL.Add('SELECT * FROM Customers');
   module.CustomersQuery.SQL.Add('WHERE City LIKE '''+ Edit1.Text+ '%' +'''');
  Module.CustomersQuery.Open;
 end;
end;

end.
Что скажете ?
xxbesoxx вне форума Ответить с цитированием
Старый 04.04.2013, 16:36   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

так я уже сказал, хотите как у вас, дело хозяйское.
eval вне форума Ответить с цитированием
Старый 04.04.2013, 18:37   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Спасибо, так и тоже работает и ничего не нарушаю .
xxbesoxx вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация в ячейке DBGrid yaapelsinko БД в Delphi 9 04.02.2012 19:43
Фильтрация DBGrid Delphi7 MrMorozko Помощь студентам 1 22.11.2010 15:40
Сортирование и фильтрация DBGrid Stranger333 Помощь студентам 2 08.03.2010 20:49
фильтрация в DBGrid ГОСЕАН БД в Delphi 4 17.07.2007 17:05
Фильтрация по месяцу DBgrid .... khaz БД в Delphi 5 28.04.2007 14:03