Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с фильтрацией в Dbgrid   Найти похожие ветки 

 
49 Cent   (2006-01-17 20:43) [0]

У меня есть аксесовский файл и в нем 12 таблиц по количеству месяцев. Там же есть Dbgrid, который связан с DataSource, а DataSource c Adotable.

На форме расположен tabset с закладками. Имя каждой закладки соответсвует именам таблиц. Идея в том, чтобы кликая на закладку загружать в Adotable определенную таблицу.

Делаю это так на событие TabSet1Change:
ADOTable1.Active:=false;
ADOTable1.TableName:=s;
ADOTable1.Active:=true;
, где s имя выделенной закладки в tabset.

Проблема в фильтрации. Сама фильтрация проводится таким кодом:
s:=dbgrid1.SelectedField.FieldName;
s1:=dbgrid1.SelectedField.AsString;

with ADOTable1 do begin
Filtered := False;
Filter := s+"=" + QuotedStr(s1);
Filtered := True;
end;

Идея такой фильтрации в том, чтобы после фильтрации оставлять только те записи, которые были выделены в ячейке dbgrid. Проблема в том, что после смены таблицы, фильтрация проводится криво. И криво потому что данные отображаются без одной строки.

К примеру, если в таблице 2 записи одного клиента, то после фильтрации отображается только 1 запись, хотя следующий код говорит, что в таблице осталось после фильтрации 2 записи:
statusbar1.Panels[1].Text:="Записей:"+inttostr(ADOTable1.RecordCount);

Если покрутить колесиком мышки вверх, а потом вниз, то только в этом случае неожидано появляется запись. Немного помог код: adotable1.Refresh; Однако, он не помогает если в таблице только 1 запись. Я думаю, что проблема в коде
ADOTable1.Active:=false;
ADOTable1.TableName:=s;
ADOTable1.Active:=true;

потому как, первоначально, когда я вручную загрузил таблицу через Object Inspector, фильтр работает как часы. Стоит только с помощью кода:
ADOTable1.Active:=false;
ADOTable1.TableName:=s;
ADOTable1.Active:=true;
загрузить новую таблицу, так сразу начинаются проблемы с фильтрацией. Как это исправить?


 
Johnmen ©   (2006-01-17 22:06) [1]

Сбрасывать фильтрацию после закрытия набора данных (ADOTable1.Active:=false;)


 
49 Cent   (2006-01-17 22:18) [2]

Я -начинающий, поэтому сильно извеняюсь за ламерский вопрос. А набор данных имеется ввиду компонент DataSource? Мне получается код (ADOTable1.Active:=false;) надо на событие AfterClose компонента DataSource добавить?


 
49 Cent   (2006-01-17 22:24) [3]

Маленькое уточнение. Т.е набор данных - это как я понял ADOTable1. Сбрасывать фильтрацию надо после закрытия данных. У ADOTable1 есть событие ADOTable1AfterClose. Таким образом, на событие ADOTable1AfterClose я добавил код adotable1.Filtered:=false; , но ничего не происходит. Также косячит.


 
49 Cent   (2006-01-18 00:36) [4]

Если не возражаете еще один вопрос! От чего зависит последовательно отображения данных в DBgrid? В аксесовской таблице, с которой я фактически работаю, установлена сортировка по полю ID и соответсвенно все данные отображаются ориентируясь на это поле. Т.е теперь в самом начале таблицы значения ID которых больше всего, а в самом низу самые малые значения. А как бы мне отсортировать Dbgrid также... потому как сейчас в нем все перемешено.


 
sniknik ©   (2006-01-18 00:49) [5]

ORDER BY поле
в запросе.

Sort:= "поле"
в датасете

IndexName:= "поле"
в ... ан нет, всеодно в датасете, таблицу выкини к чертовой бабушке и забудь о ее существовании (на время пользования ADO... вот вернешся на BDE...)


 
sniknik ©   (2006-01-18 00:52) [6]

да, обратная сортировка (от большего к меньшему) - DESC везде в конце добавить


 
49 Cent   (2006-01-18 03:07) [7]

2 sniknik
Спасибо. С сортировкой разобрался. Как бы еще и фильтр наладить?


 
sniknik ©   (2006-01-18 08:34) [8]

зачем сбрасывать фильтрацию в событии -> [3]? почему не в коде, ты же там явно закрываеш таблицу перед сменой имени, ну и выставляй Filtered := False;
Filter := ""; сразу после этого.

но почемуто кажется проблема не изза этого, чтото другое. "исчезает" первая запись? (та что должна быть первой) у меня был такой "косяк" при определенных настройках открытия рекордсета асинхронно (не используеш?)... "исчезал" первый пакет (CacheSize), по умолчани. 1-а запись. похоже. но к сожалению повторить не удается. (возможно и не удастся. апдейты системы с тех пор делал, а то был пожоже какойто глюк реализации определенного режема...)
в общем проверь (результат не гарантирую, ну а вдруг)
первое попробуй грубо RecNo:= 1; сразу после открытия
второе если в ExecuteOptions чтонибудь выбирал, убери.
и третье лучше вообше замени компонент "свежим" - TADODataSet, сними с палитры и не меняй никаких настроек по умолчанию... ну кроме CommandText, и Connection это обязательные, попробуй на нем.


 
evvcom ©   (2006-01-18 08:58) [9]


> файл и в нем 12 таблиц по количеству месяцев

Интересное решение, довольно древнее правда. А еще есть года. Или история совсем на фиг?


 
msguns ©   (2006-01-18 09:47) [10]

>evvcom ©   (18.01.06 08:58) [9]
>Интересное решение..
 
Угу.. Интересно чрезвычайно еще и тем, что надо бамбук курить при "листании" месяцев, ибо при активации каждой страницы идет переоткрытие таблицы.
Да и вообще решения типа "каждый месяц в отдельной таблице" просто смердят дремучим дилетантством.


 
49 Cent   (2006-01-19 01:10) [11]

2 sniknik
Большое спасибо за помощь! Проблема решена.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.012 c
2-1137522143
Vavan
2006-01-17 21:22
2006.02.05
Запись в риестр


15-1137143641
SergP.
2006-01-13 12:14
2006.02.05
Не могу правильно отсортировать массив. Помогите.


2-1137706453
Vlad1
2006-01-20 00:34
2006.02.05
как в мое прог _часы сделать изменение сис времени


15-1137271695
Гарри Поттер
2006-01-14 23:48
2006.02.05
Админский софт для комп. клуба инет-кафе


8-1125124794
Пантелеев Иван
2005-08-27 10:39
2006.02.05
Контроль сигнала микрофона





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский