Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизНе могу разобраться с фильтром в delphi Найти похожие ветки
← →
delphino (2007-05-07 12:09) [0]Мне нужна создать сложный фильтр. У меня есть база данных, пользоваться ей будут 2 группы пользователей (для каждой из групп заведена своя таблица), у каждого есть свой логин и пароль. при старте появляется окно ввода логина и пароля. Как сделать так чтобы система проверяла логин по таблице и открывала окно базы данных с набором данных, отсортированным по полю, в котором имеется этот логин???
То есть выбирала бы записи только конкретного пользователя...
← →
Desdechado © (2007-05-07 12:16) [1]> 2 группы пользователей (для каждой из групп заведена своя таблица)
Странная идея, если данные одного вида.
> система проверяла логин по таблице
Это вообще забота СУБД, а не твоя.
> открывала окно базы данных с набором данных, отсортированным
> по полю, в котором имеется этот логин?
Сортировка - это упорядочивание. Причем тут фильтр?
> выбирала бы записи только конкретного пользователя...
Какая СУБД? У некоторых есть встроенные средства для этого.
← →
delphino (2007-05-08 03:09) [2]Извини я неправильно сформировала вопрос. Объясню по другому. Есть таблица клиентов, у этой таблицы имеются два поля C_Manager и C_Inzhener. Есть также две таблице которые содержат фамилии и логины менеджеров и инженеров. Менеджеров всего 4, а инженеров 40 и каждый клиент принадлежит одному инженеру и одному менеджеру. Мне нужно чтобы при входе система определяла кто из менеджеров или инженеров вошел и отбирала в таблицу только его клиентов, вот для этого нужен фильтр.
← →
ЮЮ © (2007-05-08 03:29) [3]Для этого есть WHERE в SQL, ибо незачем тянуь в НД записи, которые в этом клиенте никогда не будут показаны
← →
Германн © (2007-05-08 03:34) [4]
> вот для этого нужен фильтр.
>
А что в твоём понимании есть "фильтр"?
← →
delphino (2007-05-08 04:40) [5]не хочу использовать SQL. Нашла одну функцию OnFilterRecord для задания сложного фильтра, но не знаю как ее использовать...
← →
Wind © (2007-05-08 04:49) [6]Под словом "фильтр", Вы скорее всего подразумевали запрос.
Как мне кажется, подобные запросы удобней делать при помощи языка 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 про них написано много умных страниц в хелпе.
← →
Wind © (2007-05-08 05:29) [7]Прошу прощения не вовремя обновил страничку.
Вот данные по вашему вопросу.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1
← →
Wind © (2007-05-08 05:49) [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.
← →
delphino (2007-05-08 05:56) [9]Но для запроса SQL мне придется использовать элемент Query, а не Table? А хотелось бы все таки фильтровать записи в Table. Может я туплю, но я с этим вопросом вожусь уже неделю:-(
← →
Wind © (2007-05-08 05:58) [10]Смотрите выше на сообщение [8] :)
← →
delphino (2007-05-08 07:56) [11]Не фильтрует...Вообще не реагирует на нажатие кнопки.:-(
← →
delphino (2007-05-08 07:57) [12]procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := (DataSet["C_Manager"] = "Иванов") and (DataSet["C_Inzhener"] = Петров"); //условие фильтрации
end;
Эту процедуру надо вручную прописывать или есть невизуальный компонент который за нее отвечает?
← →
ЮЮ © (2007-05-08 08:06) [13]> Table1FilterRecord
Этот метод должен быть назначен в качестве обработчика OnFilterRecord у компонента Table1.
с procedure TForm1.Button1Click(Sender: TObject); следует поступить аналогично
← →
delphino (2007-05-08 08:24) [14]Огромное спасибо ЮЮ!!! Ты меня спас!!!
← →
Правильный Вася (2007-05-08 11:06) [15]
> Ты меня спас!!!
блажен, кто верует
ЗЫ легкий путь - большие грабли
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c