Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADOTable + фильтр [D7, Access]


Страницы:   1 2 3

linox ©   (2008-12-01 13:35:00) 

Добрый день! У меня такой вопрос: есть ADOTable подключенный к базе Access через адоконнекш. У базе есть поле - Дата. Как сделать чтобы записи в таблице упорядовачились по дате автоматически.


clickmaker   (2008-12-01 16:41:00) [41]

> [16] linox   (01.12.08 16:31)

я бы вынес формирование фильтра в отдельный метод

function BuildFilter: string;
begin
 Result := '';
 if Trim(edit9.Text)<>''  then
   Result := 'Название='''+edit9.Text+'''';
 if Trim(edit10.Text) <> '' then
 begin
   if (Result <> '') then Result := Result + ' and ';
   Result := Result + 'Дата='''+edit10.Text+'''';
 end;
 ...
end;

procedure TForm1.Edit9Change(Sender: TObject); // этот же обработчик подцепить к 10
begin
 ADOTable1.Filter:=BuildFilter;
end;


Сергей М.   (2008-12-01 16:41:00) [42]


> не умею работать и никогда не работал


А придется.


linox   (2008-12-01 16:40:00) [43]

c sql не умею работать и никогда не работал ((


Сергей М.   (2008-12-01 16:34:00) [44]


> linox   (01.12.08 16:31) [16]


Выражение, указанное значением св-ва Filter, должно синтаксически  соответствовать WHERE-статье эквивалентного SQL-запроса к конкретной твоей СУБД.


linox   (2008-12-01 16:31:00) [45]

спасибо..... и если можно еще один вопрос, уже по фильтрации:
Фильтр идет по нескольким полям: (Дата, название, количество). Как сделать, чтобы я сначала вводил Дату, оставались поля с указаной датой, потом в другой едит вводил название и оставались поля с этой же датой и названием. У меня фильтрует ли одно либо другое. Код:
procedure TForm1.Edit9Change(Sender: TObject);
begin
if edit9.Text='' then
 ADOTable1.Filtered:=false
else
 begin
  ADOTable1.Filter:='Название='''+edit9.Text+'''';
  ADOTable1.Filtered:=true;
 end;
end;

procedure TForm1.Edit10Change(Sender: TObject);
begin
if edit10.Text='' then
 ADOTable1.Filtered:=false
else
 begin
  ADOTable1.Filter:='Дата='''+edit10.Text+'''';
  ADOTable1.Filtered:=true;
 end;
end;


Сергей М.   (2008-12-01 16:22:00) [46]


> в свойствах ADOTable в поле IndexName есть только primarykey


Чтобы там появился индекс по дате, этот индекс необходимо создать.

Открой свою таблицу в MSAccess в режиме конструктора, в свойствах поля ДАТА укажи , что поле индексированное (допускаются в поле совпадения или не допускаются - тебе лучше знать) и сохрани изменения.


> не могу найти где это есть


"Это" есть на той же закладке АДО-компонентов, где ты имел несчастье обнаружить компонент TADOTable/


linox   (2008-12-01 16:16:00) [47]

2 Сергей М. в свойствах ADOTable в поле IndexName есть только primarykey, ито если его выберать или вписывать туда "Дата" лезет ерор "Текущий проводник не поддердивает необходимый интерфейс для функции Index", а то что написал clickmaker ©   (01.12.08 13:37) [1]
ADOdataSet
order by в селекте
я не могу найти где это есть


Сергей М.   (2008-12-01 16:02:00) [48]

Ответы тебе даны - создавай индекс по полю "Дата" и задействуй его тем или иным образом (см. [1] или [9])


clickmaker   (2008-12-01 16:01:00) [49]

> А до Я (только дату

может, от Я до Д? -)


linox   (2008-12-01 15:59:00) [50]

2 Сергей М:
это я написал пример кода фильтрации а мне нужно сделать, сортировку от А до Я (только дату)


Anatoly Podgoretsky   (2008-12-01 15:47:00) [51]

> linox  (01.12.2008 15:14:06)  [6]

У Акцесс нет понятия позиция в таблице. Сделай такое поле и работай.


Сергей М.   (2008-12-01 15:46:00) [52]


> linox   (01.12.08 15:14) [6]
>
> дата разная


Какая же разная ?
Перевожу тебе на русский то что ты понаписал в строчках

>   ADOTable1.Filter:='Дата='''+edit10.Text+'''';
>   ADOTable1.Filtered:=true;


"Отобрать из таблицы только те записи, в поле "Дата" которых записана такая-то конкретная дата.


> ключевое поле по "Код"


В таблице д.б. индекс (по возрастанию или по убыванию - решать тебе) по полю 'Дата'.
Имя этого индекса ты cможешь назначить св-ву TADOTable.IndexName.
Решение годится для сравнительно небольших по объему данных таблиц.


Правильный$Вася   (2008-12-01 15:43:00) [53]


> нужно чтобы новая запись с новой датой добавлялась в конце таблици

талбицы или отображаемого набора данных?
это  разные вещи
место хранения определяется СУБД, место показа в выборке - тобой


linox   (2008-12-01 15:34:00) [54]

2 Сергей М.:
можно попордобней? ключевое поле по "Код"


linox   (2008-12-01 15:14:00) [55]

дата разная..... есть 300 записей.... от 12.10.2008 до 01.12.2008. Записи раскиданы... нужно чтобы новая запись с новой датой добавлялась в конце таблици


Palladin   (2008-12-01 14:40:00) [56]

как же'ш ты ее сделаешь, коли у тебя дата все время одинаковая...


Сергей М.   (2008-12-01 14:40:00) [57]

А индекс по полю даты у тебя вообще существует ?


linox   (2008-12-01 14:37:00) [58]

2 Сергей М:
я понимаю.... филтрацию я сделал -

begin
if edit10.Text='' then
 ADOTable1.Filtered:=false
else
 begin
  ADOTable1.Filter:='Дата='''+edit10.Text+'''';
  ADOTable1.Filtered:=true;
 end;

а сортировку не могу....


Сергей М.   (2008-12-01 13:49:00) [59]


> linox


Ты не понимаешь разницы между фильтрацией и сортировкой.

Включение  (неважно в каком порядке) в результирующий НД записей, соответствующих неким условиям отбора - это фильтрация.

Упорядочивание записей результирующего НД по каким-либо правилам - это сортировка.


clickmaker   (2008-12-01 13:37:00) [60]

ADOdataSet
order by в селекте


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо