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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2015, 23:13   #1
kucher69
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

Работал в DELPHI 7
создал 2 базы в Database Desktop
потом подключил их в BDE Administrator
получилась вот такая база
2015-09-15_235338.jpg
вот сам файл
фильтрация.rar
в поле edit ввёл этот код для фильтрации данных в дувух таблицах DBgrid
Код:
if Edit1.Text<>'' then
begin
Table1.Filtered:=true;
Table1.Filter:=DBGrid1.SelectedField.FieldName+'='''+Edit1.Text+'*''';
end
else
Table1.Filtered:=false;
end;
но почему то всё равно не работает фильтрация

Последний раз редактировалось Stilet; 17.09.2015 в 08:59.
kucher69 вне форума Ответить с цитированием
Старый 17.09.2015, 07:01   #2
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от kucher69 Посмотреть сообщение
но почему то всё равно не работает фильтрация
Это что ? '''+Edit1.Text+'*''';
так будет работать
Код:
var
  s: string;
begin
 if (Trim(Edit1.Text)<>'') then
  begin
    s := ' Имя_поля like ';
    Table1.Filter := s + '''' + Trim(Edit1.Text) + '%''';
    Table1.Filtered := True;
  end
  else
    Table1.Filtered := False;
end;
xxbesoxx вне форума Ответить с цитированием
Старый 17.09.2015, 13:08   #3
kucher69
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

вот такая вот ошибка выходит
Код:
Build
  [Error] Unit1.pas(40): Undeclared identifier: 'Edit1'
  [Error] Unit1.pas(43): Undeclared identifier: 'Table1'
  [Error] Unit1.pas(43): There is no overloaded version of 'Trim' that can be called with these arguments
  [Error] Unit1.pas(43): Incompatible types: 'String' and 'Text'
  [Error] Unit1.pas(44): Missing operator or semicolon
  [Error] Unit1.pas(47): Missing operator or semicolon
  [Error] Unit1.pas(48): '.' expected but ';' found
  [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
вот мой весь код
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    Table1: TTable;
    Table2: TTable;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    Table2Key1: TAutoIncField;
    Table2FIO: TStringField;
    Table2Adres: TStringField;
    Table1Key1: TAutoIncField;
    Table1Key2: TIntegerField;
    Table1Data: TDateField;
    Table1Name: TStringField;
    Table1Kol: TIntegerField;
    ToolBar1: TToolBar;
    Edit1: TEdit;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
    s: string;
implementation

{$R *.dfm}
begin
 if (Trim(Edit1.Text)<>'') then
  begin
    s := ' Имя_поля like ';
    Table1.Filter := s + '''' + Trim(Edit1.Text) + '%''';
    Table1.Filtered := True;
  end
  else
    Table1.Filtered := False;
end;
end.
в чём может быть моя ошибка

Последний раз редактировалось Stilet; 17.09.2015 в 13:28.
kucher69 вне форума Ответить с цитированием
Старый 17.09.2015, 13:29   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

имя_поля надо не копировать, а подставлять вместо него НУЖНОЕ имя поля.
возможно и так
Код:
///s := ' Имя_поля like ';
s:=selectedField.FieldName + ' like ';
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 17.09.2015, 13:33   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы на твоем месте описал событие
Код:
procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

begin
  Accept := pos(Trim(Edit1.Text),DataSet[DBGrid1.SelectedField.FieldName])<>0;
end;
и тогда код
Код:
begin
 if (Trim(Edit1.Text)<>'') then
  begin
    Table1.Filtered := false;
    Table1.Filtered := True;
  end;
end;
сработает на этом событии, которое и будет фильтровать.

НО! Ты этот код должен поместить в нужное место, а не так как у тебя представлено. Ибо то, что ты написал будет выполнено только один раз при запуске (Если конечно вообще выполнится).
Где он у тебя должен выполняться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2015, 13:39   #6
kucher69
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 21
По умолчанию

у меня он должен выполняться в edit1

извиняюсь за возможно глупый вопрос но как описать событие
Код:
procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);

begin
  Accept := pos(Trim(Edit1.Text),DataSet[DBGrid1.SelectedField.FieldName])<>0;
end;
нужно какой ещё компонент на форму выкидывать?

нужное место в смысле edit1? то поле в которое буду вводить запросы для поиска

2015-09-17_144904.jpg
вот моя задача для наглядности

Последний раз редактировалось Stilet; 17.09.2015 в 14:03.
kucher69 вне форума Ответить с цитированием
Старый 17.09.2015, 14:04   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но как описать событие
Хе )
А почему ты взялся за задание по базам, если не знаком с основами Делфи?
Описать событие как обычно - в инспекторе объектов на вкладке событий - это тебе о чем-нибудь говорит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтрация prod Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 16.01.2013 14:56
Фильтрация в БД M@riy@ БД в Delphi 5 27.09.2010 13:37
Фильтрация в D7 rombler69 БД в Delphi 4 30.10.2009 11:40
Фильтрация Screame Microsoft Office Excel 7 01.07.2009 22:37
Фильтрация Felonalex БД в Delphi 4 24.10.2008 20:09