Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > индексы


Автор: Гость_grib 24.2.2005, 20:45
надо сортировать Grid по клику на столбце.
использую таблицу, поэтому Query.SQL:=Order By не подходит.
начал разбираться с индексами, запутался. Их можно создать до выполнения проги?? Почему не работает
Код

table1.active:=false;
table1.exlusive:=true;
table1.AddIndex('indexName','MyField',[]);

Пишет Table busy. ПАМАГИТЕ!

Автор: Kesh 24.2.2005, 21:10
Цитата
Их можно создать до выполнения проги??

Конечно можно, а инода даже намного удобнее...
Ты бы вот еще базу указал... smile

Автор: Гость_grib 25.2.2005, 04:53
База Paradox, BDE. создавать индексы надо в DBD или Delphi?? и как?? В Table, в свойстве IndexDefs, то что я добавляю, почему-то не сохраняется. а в IndexFields неактивна кнопка Add.
И все-таки почему код приведеный выше не работает?

Автор: Bes 25.2.2005, 07:44
А почему ордер бай не подходит? Если не секрет.

Автор: bursa 25.2.2005, 16:34
Table1.IndexFieldNames:='MyField';


Автор: Guest 25.2.2005, 21:50
Цитата
А почему ордер бай не подходит? Если не секрет.

Потому что я добавляю и удаляю записи из набора данных, в Query этого делать нельзя (насколько я знаю)
кто-нибуть скажет мне наконец КАК создать индекс в базе??
bursa, сначала надо сделать индекс, а потом пользовать.

Автор: Vit 27.2.2005, 07:03
Цитата(Guest @ 25.2.2005, 12:50)
Потому что я добавляю и удаляю записи из набора данных, в Query этого делать нельзя (насколько я знаю)



МожноЮ причём точно так же как и из табицы, если запрос live


Цитата(Guest @ 25.2.2005, 12:50)
кто-нибуть скажет мне наконец КАК создать индекс в базе??



Не советую, Парадокс очень плохо работает с индексами, они у него легко портятся. При необходимости я создаю SQL запросом.

Автор: Bes 28.2.2005, 09:03
Цитата
Потому что я добавляю и удаляю записи из набора данных, в Query этого делать нельзя (насколько я знаю)

Дак ты закрой набор, добавь запись и открой набор. При необходимости сделай зарубку БукМарк и потом вернись к ней.

Автор: bursa 28.2.2005, 16:45
CREATE INDEX Name_idex ON nametable
(namefield)

Автор: TYRARGO 1.7.2006, 04:49
А ведь автор темы прав, вы не один не ответили, как создать индекс в таблице БЕЗ использования SQL... Меня, кстати, тоже интересует этот вопрос....

Добавлено @ 04:53 
2 Bursa:
А вы, уважаемый, вообще чушь пишите...

На такую запись:
Table1.IndexFieldNames:='MyField';

Вы получите следующее:
No index for fields 'MyField'... 

Не засоряли бы лучше топик...
 

Автор: Palladin 1.7.2006, 11:39
2TYRARGO

Не силён в SQL, но помойму чуш пишите ВЫ, 'MYFIELDS' это название поля, а ошибку что вы указали это потому что у вас нет такого поля smile  

Допустим в БД есть поле 'Автор'
тогда сортировка будет такой

Код

adotable1.indexfieldnames:='Автор';


И ещё если имя поля состоит более чем из одного слова, допустим 'Данные переработки' , то запрос нужно писать в квадратных скобках

помойму так

Код

adotable1.indexdieldnames:='[Данные переработки]';


P.S. Поправьте меня если я не прав smile  

Автор: superVad 3.7.2006, 14:15
мне кажеться что для сортировки грида необязательно создавать индекс - может можно это сделать средствами датасета

например в фибовском датасете есть метод DoSort
и еще надо активировать кнопку в заголовке столбца в гриде (ehgrid) - например DBGridEh1.Columns.Items[0].Title.TitleButton:=True; 

Автор: Fazil6 4.7.2006, 09:36
Код

{Автор: OAmiry (Borland) }

{Ниже приведен код обработчика кнопки OnClick, с помощью которого строится индекс: }

procedure TForm1.Button1Click(Sender: TObject); 
var 
  bActive, bExclusive: Boolean; 
begin 
  bActive := Table1.Active; 
  bExclusive := Table1.Exclusive; 
  Table1.IndexDefs.Update; 
  with Table1 do 
  begin 
    Close; 
    {таблица dBASE должна быть открыта в монопольном (exclusive) режиме} 
    Exclusive := TRUE; 
    Open; 
    if Table1.IndexDefs.IndexOf('FNAME') <> 0 then 
      Table1.AddIndex('FNAME', 'FNAME', []); 
    Close; 
    Exclusive := bExclusive; 
    Active := bActive; 
  end; 
end; 

{Если вы собираетесь запускать проект из Delphi, пожалуйста убедитесь в том, что свойство таблицы Active в режиме проектирования установлено в False. }



Добавлено @ 09:38 
RooR
Цитата

Не силён в SQL, но помойму чуш пишите ВЫ, 'MYFIELDS' это название поля, а ошибку что вы указали это потому что у вас нет такого поля

P.S. Поправьте меня если я не прав

ты не прав
 

Автор: Palladin 4.7.2006, 13:53
Не прав по данной теме или по коду, просто если по коду, то такой код работает,у меня было задание сделать БД и т.д. дак там у меня сортировка именно так была сделана smile  

Автор: DimW 6.7.2006, 17:47
Уважаемые о чем вы спорите!!! речь не о том как правельно создать индекс, а как сделать сортировку!!! Истенное предназначение индексов - обеспечивать быстрый боступ к данным таблице! Если создание индекса это один из способов сортировки данных то лично я против таких методов, решив одну проблему вы создаете другую, а именно - модификация данных будет осуществляться медленнее т.к. нужно не только добавить или изменить запись, а еще и переписать индекс! Используйте sql это хорошая привычка, а если у вас не получается модифицировать данные полученные из Query, то следует попыхтеть и научиться (хотя пыхтеть особо не над чем). Я старонник того что не нужно привыкать к возможнастям визуальной среды разработки, язык sql на столько развит что при помощи него можно получить данные практически в любом виде который вам нужен (хотя к БД парадокс это мало относится). 

Автор: Palladin 6.7.2006, 19:45
2DimW вот и я про тоже

Код

adotable1.indexfieldnames:='Имя сотрируемого поля';


Делает сортировку, и нечего тут придумывать всякие навороты smile  

Автор: superVad 10.7.2006, 15:48
таки мне правильно казалось  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)