Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не могу разобраться с фильтром в delphi [D7, XP]


delphino ©   (2007-05-07 12:09:00) 

Мне нужна создать сложный фильтр. У меня есть база данных, пользоваться ей будут 2 группы пользователей (для каждой из групп заведена своя таблица), у каждого есть свой логин и пароль. при старте появляется окно ввода логина и пароля. Как сделать так чтобы  система проверяла логин по таблице и открывала окно базы данных с  набором данных, отсортированным по полю, в котором имеется этот логин???
То есть выбирала бы записи только конкретного пользователя...


Правильный Вася   (2007-05-08 11:06:00) [1]


> Ты меня спас!!!

блажен, кто верует

ЗЫ легкий путь - большие грабли


delphino   (2007-05-08 08:24:00) [2]

Огромное спасибо ЮЮ!!! Ты меня спас!!!


ЮЮ   (2007-05-08 08:06:00) [3]

> Table1 FilterRecord

Этот метод должен быть назначен в качестве обработчика OnFilterRecord у компонента Table1.

с procedure TForm1.Button1Click(Sender: TObject); следует поступить аналогично


delphino   (2007-05-08 07:57:00) [4]

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := (DataSet['C_Manager'] = 'Иванов') and  (DataSet['C_Inzhener'] = Петров");       //условие фильтрации
end;

Эту процедуру надо вручную прописывать или есть невизуальный компонент который за нее отвечает?


delphino   (2007-05-08 07:56:00) [5]

Не фильтрует...Вообще не реагирует на нажатие кнопки.:-(


Wind   (2007-05-08 05:58:00) [6]

Смотрите выше на сообщение [8] :)


delphino   (2007-05-08 05:56:00) [7]

Но для запроса SQL мне придется использовать элемент Query, а не Table? А хотелось бы все таки фильтровать записи в Table. Может я туплю, но я с этим вопросом вожусь уже неделю:-(


Wind   (2007-05-08 05:49:00) [8]

Примерно так:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Grids, DBGrids, DB,  DBTables;

type
 TForm1 = class(TForm)
   DataSource1: TDataSource;
   f: TDBGrid;
   Button1: TButton;
   Table1: TTable;
   procedure Button1Click(Sender: TObject);
   procedure Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var B :boolean;
begin
Table1.Filtered:=True; //отфильтровать
end;

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
 var Accept: Boolean);
begin
Accept := (DataSet['C_Manager'] = 'Иванов') and  (DataSet['C_Inzhener'] = Петров");       //условие фильтрации
end;

end.


Wind   (2007-05-08 05:29:00) [9]

Прошу прощения не вовремя обновил страничку.
Вот данные по вашему вопросу.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1


Wind   (2007-05-08 04:49:00) [10]

Под словом "фильтр", Вы скорее всего подразумевали запрос.
Как мне кажется, подобные запросы удобней делать при помощи языка SQL (для этого он и был создан).

К примеру у вас  таблица с названием "Clients" в которой присутствуют поля :

C_Manager , C_Inzhener и ClientName

SQL запрос может выглядеть примерно так :

SELECT ClientName
FROM Clients
Where (C_Manager = "Иванов") and (C_Inzhener = "Петров")
ORDER BY ClientName


После обработки такого запроса Будут выбраны только те записи клиентов, в которых поля C_Manager и C_Inzhener будут соответствовать значениям Иванов и Петров.
Есть много способов в Delphi, реализации подобных SQL запросов.
Удобнее всего для начинающего программера использовать компоненты
TQuery или TADOQuery  про них написано много умных страниц в хелпе.


delphino   (2007-05-08 04:40:00) [11]

не хочу использовать SQL. Нашла одну функцию OnFilterRecord для задания сложного фильтра, но не знаю как ее использовать...


Германн   (2007-05-08 03:34:00) [12]


> вот для этого нужен фильтр.
>

А что в твоём понимании есть "фильтр"?


ЮЮ   (2007-05-08 03:29:00) [13]

Для этого есть WHERE в SQL, ибо незачем тянуь в НД записи, которые в этом клиенте никогда не будут показаны


delphino   (2007-05-08 03:09:00) [14]

Извини я неправильно сформировала вопрос. Объясню по другому. Есть таблица клиентов, у этой таблицы имеются два поля C_Manager и C_Inzhener. Есть также две таблице которые содержат фамилии и логины менеджеров и инженеров. Менеджеров всего 4, а инженеров 40 и каждый клиент принадлежит одному инженеру и одному менеджеру. Мне нужно чтобы при входе система определяла кто из менеджеров или инженеров вошел и отбирала в таблицу только его клиентов, вот для этого нужен фильтр.


Desdechado   (2007-05-07 12:16:00) [15]

> 2 группы пользователей (для каждой из групп заведена своя таблица)
Странная идея, если данные одного вида.

> система проверяла логин по таблице
Это вообще забота СУБД, а не твоя.

> открывала окно базы данных с  набором данных, отсортированным
> по полю, в котором имеется этот логин?
Сортировка - это упорядочивание. Причем тут фильтр?

> выбирала бы записи только конкретного пользователя...
Какая СУБД? У некоторых есть встроенные средства для этого.


Наверх

Титульная страница Поиск, карта сайта Написать письмо