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

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

как правильно задать фильтр


ЛИЯ ©   (2008-04-09 11:03:00) 

Добрый день! Подскажите, пожалуйста, как правильно задать фильтр.
Я сделала так:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, DBClient, ComCtrls,
StdCtrls;

type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
MonthCalendar1: TMonthCalendar;
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
MonthCalendar1.Date := Now;
ClientDataSet1.Filter := FormatDateTime('dd/mm/yyyy',Now);
ClientDataSet1.Filtered := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
If not ClientDataSet1.Locate('Номер',Edit1.text,[]) then
begin
MessageDlg('Номер не найден!', mtError, [mbOK], 0);
Edit1.SetFocus;
end;
If ClientDataSet1.Locate('Номер',Edit1.text,[]) then
begin
DBGrid1.SetFocus;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClientDataSet1.post;
end;

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
ClientDataSet1.edit;
ClientDataSet1.Fields[1].AsString := FormatDateTime('dd/mm/yyyy',Now);
end;

end.


При запуске выдает сообщение: "Project Project1.exe raised exception class EDatabaseError with message 'Invalid filter expression character:'.". Process stopped. Use Step or Run to continue."
А еще ругается при закрытие окна, если не внести изменения в таблицу.
Таблица простая, состоит всего из двух столбцов: номера и даты. Еще есть календарь MonthCalendar1. Хочу чтобы программа, при изменение даты в календаре, отображала в таблице только те данные, которые были внесены в базу именно в эту дату.
Все упирается в фильтр! Подскажите, если не сложно, как он пишется.
Заранее благодарнa!


Плохиш   (2008-04-09 11:08:00) [1]


> филтер

Блин, долго смотрел на слово... потом понял, что оно означает :-)))


Плохиш   (2008-04-09 11:07:00) [2]


> procedure TForm1.FormCreate(Sender: TObject);
> begin
> MonthCalendar1.Date := Now;
> ClientDataSet1.Filter := FormatDateTime('dd/mm/yyyy',Now);
>
> ClientDataSet1.Filtered := True;
> end;

Вообще-то филтер обычно задаётся в формате <поле>=<значение>

> procedure TForm1.Button1Click(Sender: TObject);
> begin
> If not ClientDataSet1.Locate('Номер',Edit1.text,[]) then
> begin
> MessageDlg('Номер не найден!', mtError, [mbOK], 0);
> Edit1.SetFocus;
> end;
> If ClientDataSet1.Locate('Номер',Edit1.text,[]) then
> begin
> DBGrid1.SetFocus;
> end;
> end;

Хм, стоит справку по if прочитать, в частности, про словo else.


Kolan   (2008-04-09 11:05:00) [3]

> ClientDataSet1.Filter := FormatDateTime('dd/mm/yyyy',Now)
> ;

Прочтите справку по этому свойству.


Наверх

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