Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
42 / 42 / 12
Регистрация: 04.11.2010
Сообщений: 119

Недоступна фильтрация из главной формы для TTable расположенной в DataModule

21.10.2011, 21:42. Показов 1547. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь отфильтровать записи в DBGrid, у которой поле DataSource ссылается на Datasource, расположенный в другом модуле (DataModule). Причем если во время проектирования задать Filter у Table1 то при выполнении приложения записи отфильтрованы, но из главной формы программно изменить значение Filter в Datamodule у Table1 не получается, т. е. записи не фильтруются в режиме выполнения. В более ранней версии приложения, когда Table1 и DBGrid1 были на одной форме все работало.
База создана в Microsoft SQL Server 2008 R2, доступ осуществляется через ODBC.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2011, 21:42
Ответы с готовыми решениями:

Как обратиться к функции, расположенной в DataModule?
Очень часто в разных формах встречается одна и та же функция, имеющая довольно объемный код. Перенесла её в DataModule. Не пойму как её...

Фильтрация TTable
Доброго времени суток. Подскажите пожалуйста как фильтровать TTable по нескольким field-сам?

Фильтрация данных TTable
Вопрос следущий, данные из двух таблиц отоброжаютя в DBGrid, есть ли какие варианты, чтобы как в Excel сделать автофильтр, т.е. по щелчку ...

9
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
22.10.2011, 06:29
Проверьте, прописан ли модуль Datamodule в секции uses формы, на которой находится DBGrid.
0
42 / 42 / 12
Регистрация: 04.11.2010
Сообщений: 119
22.10.2011, 11:50  [ТС]
Главная форма:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
unit PersUnit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, UDataModule, StdCtrls, Spin;
 
type
  TPersForm = class(TForm)
    DBGrid: TDBGrid;
    DBNavigator: TDBNavigator;
    RGF: TRadioGroup;
    CBDep: TComboBox;
    UpdateFilter: TButton;
    SEmin: TSpinEdit;
    SEmax: TSpinEdit;
    RGIndex: TRadioGroup;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure RGFClick(Sender: TObject);
    procedure RGIndexClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  PersForm: TPersForm;
 
implementation
 
{$R *.dfm}
 
procedure TPersForm.FormCreate(Sender: TObject);
begin
    DataModule:= TDataModule2.Create(DBGrid); //создаем объект и открываем таблицу
end;
 
procedure TPersForm.FormDestroy(Sender: TObject);
begin
      DataModule.CloseDBExecute(Sender);  //закрываем таблицу
end;
 
procedure TPersForm.RGFClick(Sender: TObject);
begin
    DataModule.DoFilter(RGF.ItemIndex);
end;
 
procedure TPersForm.RGIndexClick(Sender: TObject);
begin
    case RGIndex.ItemIndex of                            //упорядочивание, тоже не работает
    0: DataModule.TablePers.IndexName:= 'depfio' ;
    1: DataModule.TablePers.IndexName:= 'fio';
    2: DataModule.TablePers.IndexName:= 'Year';
    end;
end;
 
end.
Модуль данных:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
unit UDataModule;
 
interface
 
uses
  SysUtils, Classes, DB, DBTables, DateUtils, ActnList;
 
type
  TDataModule2 = class(TDataModule)
    TablePers: TTable;
    DSPers: TDataSource;
    ActionList1: TActionList;
    OpenDB: TAction;
    CloseDB: TAction;
    TablePersDep: TStringField;
    TablePersFam: TStringField;
    TablePersNam: TStringField;
    TablePersPar: TStringField;
    TablePersYear_b: TSmallintField;
    TablePersSex: TStringField;
    TablePersCharact: TMemoField;
    TablePersPhoto: TBlobField;
    TablePersAge: TSmallintField;
    procedure OpenDBExecute(Sender: TObject);
    procedure CloseDBExecute(Sender: TObject);
    procedure DataModuleCreate(Sender: TObject);
    procedure TablePersCalcFields(DataSet: TDataSet);
  private
    { Private declarations }
  public
    { Public declarations }
    Year: word;
    procedure DoFilter(i: integer);
  end;
 
var
  DataModule: TDataModule2;
 
implementation
 
uses PersUnit;
 
{$R *.dfm}
 
procedure TDataModule2.CloseDBExecute(Sender: TObject);
begin
     TablePers.Close;
end;
 
procedure TDataModule2.DataModuleCreate(Sender: TObject);
begin
    Year:= YearOf(Date);
    OpenDB.Execute;
end;
 
 
procedure TDataModule2.OpenDBExecute(Sender: TObject);
begin
     TablePers.Open;
end;
 
procedure TDataModule2.TablePersCalcFields(DataSet: TDataSet);
begin
    TablePersAge.Value:= Year -  TablePersYear_b.Value; //вычисляемое поле
end;
 
 procedure TDataModule2.DoFilter(i: integer);  //та самая фильтрация, что не работает
 begin
   case i of
    0: TablePers.Filtered:= false;
    1:TablePers.Filter:= 'Dep= '''+PersForm.CBDep.Text+'''';
    2: TablePers.Filter:= '(Year_b<= '+
    IntToStr(DataModule.Year-PersForm.SEmin.Value) +') and ( Year_b>= '+IntToStr(DataModule.Year-PersForm.SEmax.Value)+')';
    end;
 end;
 
end.
Если задать, какой-то фильтр в режиме проектирования, он сработает, но в режиме выполнения таблица не фильтруется
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
22.10.2011, 15:53
Попробуйте перенести ссылку на UDataModule в модуле PersUnit из интерфейсной части в секцию implementation
Хотя, признаться, не очень понимаю, почему не работает!
0
42 / 42 / 12
Регистрация: 04.11.2010
Сообщений: 119
22.10.2011, 19:40  [ТС]
Перенес ссылку на UDataModule в implementation из interface. Работает также. В следующий раз попробую сделать тоже самое приложения для базы на Paradox с такой же структурой, что и в MS SQL. Отпишусь, какой результат будет.
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
23.10.2011, 07:08
Цитата Сообщение от Evgen88 Посмотреть сообщение
следующий раз попробую сделать тоже самое приложения для базы на Paradox
Только не Paradox, это - "издыхающая" технология. Попробуйте FireBird, всячески рекомендую!
0
42 / 42 / 12
Регистрация: 04.11.2010
Сообщений: 119
23.10.2011, 11:03  [ТС]
Я знаю, что парадокс почти мертв. Просто учебная база данных в нем сделана (не мной). Я сделал подобную ей в MS SQL Server, а потом вот эту прогу для нее. А Interbase буду изучать чуть позже.
0
42 / 42 / 12
Регистрация: 04.11.2010
Сообщений: 119
24.10.2011, 11:24  [ТС]
В общем, для базы на Paradox проблемы те же самые. Я вот думаю, кого объявлять владельцем DataModule при выделении под него памяти в методе создания главной формы:
Delphi
1
DataModule:= TDataModule2.Create(DBGrid);
Добавлено через 24 секунды
В общем, для базы на Paradox проблемы те же самые. Я вот думаю, кого объявлять владельцем DataModule при выделении под него памяти в методе создания главной формы:
Delphi
1
DataModule:= TDataModule2.Create(DBGrid);
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
24.10.2011, 11:44
Вот так
Цитата Сообщение от Evgen88 Посмотреть сообщение
DataModule:= TDataModule2.Create(DBGrid);
нельзя. Где это вы видели, чтобы владельцем TDataModule был DBGrid. Владельцем DataModule является Application и строка создания модуля
Delphi
1
Application.CreateForm(TDataModule2, DataModule2);
при правильном проектировании приложения эта строчка в файле проекта появляется автоматически. Как вариант можно создавать модуль данных динамически и делать владельцем форму (например, главную), но только не DBGrid
1
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
25.10.2011, 00:06
Похоже, из автосоздаваемых датамодуль не выброшен (иначе не было бы "в дизайне фильтр работает"), поэтому у него создается два экземпляра TDataModule2, - отсюда и "чудеса".
А вообще так датамодули не создают, SAMZ Вам правильно указал на инвалидность Вашей методы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2011, 00:06
Помогаю со студенческими работами здесь

Определение координат для окружности, расположенной в центре формы
У меня есть форма я вычислил координаты её центра и мне нужно нарисовать окружность по этим центральным координатам,но тут проблема задаём...

Транспонировать матрицу и вывести на печать элементы главной диагонали и диагонали, расположенной под главной
Всем привет, помогите с этим примером:Транспортировать матрицу и вывести на печать элементы главной диагонали и диагонали, расположенной...

Транспонируйте массив, и выведите элементы главной диагонали и диагонали, расположенной под главной
Сформируйте двумерный массив K(8,8) по правилу: Kij=8∙(i - j)+j. Транспонируйте массив (поменяйте местами строки и столбцы), и выведите...

Обращение к компонентам DataModule из формы
Доброго времени суток. Интересует один вопрос: можно ли через форму как-то обратиться к свойствам компонента, расположенного в DataModule?...

Вывести на печать элементы главной диагонали и диагонали, расположенной под главной
Помогите мне сделать программу. Нужно ранспонировать матрицу и вывести на печать элементы главной диагонали и диагонали, расположенной под...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru