![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу разобраться с фильтром в 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 группы пользователей (для каждой из групп заведена своя таблица)
Странная идея, если данные одного вида.
> система проверяла логин по таблице
Это вообще забота СУБД, а не твоя.
> открывала окно базы данных с набором данных, отсортированным
> по полю, в котором имеется этот логин?
Сортировка - это упорядочивание. Причем тут фильтр?
> выбирала бы записи только конкретного пользователя...
Какая СУБД? У некоторых есть встроенные средства для этого.