Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 100

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
На форме лежит DBGrid связанный через компоненты ADO с БД Access в которой есть таблица со следующими полями: фамилия,имя,отчество,год рождения и т.д, так же на форме лежат Edit-ы соответствующие полям см.выше. Проблема такая,у edit-ов есть похожие процедуры выборки, например:

 
procedure TStudentForm.FilterFamEditChange(Sender: TObject);
begin
If Length(FilterFamEdit.Text)>0 then
  DataModule1.StudentTable.Filtered:=True
else DataModule1.StudentTable.Filtered:=False;
DataModule1.StudentTable.Filter:='Фамилия>'''+FilterFamEdit.Text+'''';
end;

так вот в DBGrid отображается процесс выборки, пока не набирается последняя буква фамилии, после этого фамилия(и) попросту пропадает. Объясните пожалуйста почему так происходит и что нужно сделать, что бы этого избежать. В общем мне нужно добиться, что бы если будут однофамильцы, выборка бы продолжилась при вводе имени в соседний Edit(FilterImEdit) и т.д., пока в DBGrid не отобразиться единственный мне нужный вариант.

GAZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 19 марта 2011, 07:04
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Чернышев

Здравствуйте, GAZ!
попробу вот так
поставь DataModule1.StudentTable.Filtered:=True навсегда
напишу пример для фамилии и имени, для большего колическва Editов по аналогии

Приложение:
  1. procedure TStudentForm.FilterFamEditChange(Sender: TObject);
  2. begin
  3.  
  4. FilterFamEdit.clear;
  5.  
  6. If Length(FilterFamEdit.Text)>0 then
  7.  
  8. else
  9. DataModule1.StudentTable.Filter:='';
  10. end;
  11.  
  12. procedure TStudentForm.FilterNamEditChange(Sender: TObject);
  13. begin
  14.  
  15.  
  16. If Length(FilterNamEdit.Text)>0 then
  17.  
  18. else
  19.  
  20. end;
  21.  
  22.  
  23.  


Ответ отправил: Чернышев (статус: 1-ый класс)
Время отправки: 19 марта 2011, 15:01
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 19 марта 2011, 15:16; участников в обсуждении: 3.
bugmenot

bugmenot (статус: 3-ий класс), 19 марта 2011, 07:23 [#1]:

сравнение строк же!
b := 'фердыщенко' > 'фердыщенко'
чему будет равна b?
виконання програми розпочинається з того самого мiсця, де призупинилося.

GAZ

GAZ (статус: Посетитель), 19 марта 2011, 07:36 [#2]:

bugmenot
Я это понял,а как тогда по другому сделать?
Чернышев

Чернышев (статус: 1-ый класс), 19 марта 2011, 15:16 [#3]:

можно конечно попробовать еще так:
создать такую вот процедуру и запускать ее при изменении любого Editа
procedure TStudentForm.Filt();
begin
//отчищаем фильтр
DataModule1.StudentTable.Filter:='';
 
//добавляем фильтр по фамилии
If Length(FilterFamEdit.Text)>0 then
begin
  if DataModule1.StudentTable.Filter<>'' then
    DataModule1.StudentTable.Filter:=DataModule1.StudentTable.Filter    +' and Фамилия like '''+FilterFamEdit.Text+'%'''
  else 
    DataModule1.StudentTable.Filter:='Фамилия like '''+FilterFamEdit.Text+'%''';
end;
 
//добавляем фильтр по имени
If Length(FilterImEdit.Text)>0 then
begin
  if DataModule1.StudentTable.Filter<>'' then
    DataModule1.StudentTable.Filter:=DataModule1.StudentTable.Filter    +' and Имя like '''+FilterImEdit.Text+'%'''
  else 
    DataModule1.StudentTable.Filter:='Имя like '''+FilterImEdit.Text+'%''';
end;
 
//добавляем фильтр по остальным Editам по аналогии
 
end;

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:50
Выполнено за 0.03 сек.