|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 19 марта 2011, 07:04
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Чернышев
Здравствуйте, GAZ!
попробу вот так
поставь DataModule1.StudentTable.Filtered:=True навсегда
напишу пример для фамилии и имени, для большего колическва Editов по аналогии
Приложение: Переключить в обычный режим- procedure TStudentForm.FilterFamEditChange(Sender: TObject);
- begin
-
- FilterFamEdit.clear;
-
- If Length(FilterFamEdit.Text)>0 then
-
- else
- DataModule1.StudentTable.Filter:='';
- end;
-
- procedure TStudentForm.FilterNamEditChange(Sender: TObject);
- begin
-
-
- If Length(FilterNamEdit.Text)>0 then
-
- else
-
- end;
-
-
-
 |
Ответ отправил: Чернышев (статус: 1-ый класс)
Время отправки: 19 марта 2011, 15:01
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 19 марта 2011, 15:16; участников в обсуждении: 3.
|
bugmenot (статус: 3-ий класс), 19 марта 2011, 07:23 [#1]:
сравнение строк же!
b := 'фердыщенко' > 'фердыщенко'
чему будет равна b?
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
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;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|