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

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

Как программно добавить вторичный индекс? [D3, D4, D5, Paradox]


Mike N. Radoman ©   (2002-08-08 18:30:00) 

Нужно программно добавить вторичный индекс в таблицу Paradox(не создавая первичный). Дельфя либо ругается - что Table is not indexed, либо просто не создает этот индекс. Посоветуйте, плиз, как решить проблему?


Mike N. Radoman   (2002-08-12 15:01:00) [1]

2 Leran2002 ©:Спасибо, ща буду пробовать.


Leran2002   (2002-08-09 16:07:00) [2]

procedure AddIndex(const Name, Fields: String; Options: TIndexOptions, const DescFields: String="");

TIndexOption = (ixPrimary, ixUnique, ixDescending, ixCaseInsensitive, ixExpression, ixNonMaintained);
TIndexOptions = set of TIndexOption;

В общем почитай в Хелпе о этом, я проверял когда используешь только [] то вылетает ошибка...

Вот пример из Хелпа:

Table1.AddIndex("NewIndex", "CustNo;CustName", [ixUnique, ixCaseInsensitive]);


Leran2002   (2002-08-09 16:02:00) [3]

// - значит можно и там и там и там...

with Table1 do
begin
DatabaseName:= ExtractFilePath(Application.ExeName);
TableName:= "Test";
FieldDefs.Clear;
FieldDefs.Add("ID", ftAutoInc, 0, True);
FieldDefs.Add("FirstField", ftString, 50, True);
FieldDefs.Add("SecondField", ftString, 50, True);
IndexDefs.Clear;
IndexDefs.Add("", "ID", [ixPrimary]);
// AddIndex("Second", "SecondField", [ixCaseInsensitive]);
CreateTable;
// AddIndex("Second", "SecondField", [ixCaseInsensitive]);
Exclusive:= True;
Open;
// AddIndex("Second", "SecondField", [ixCaseInsensitive]);
end;


Mike N. Radoman   (2002-08-09 15:44:00) [4]

Я и так знаю, что в коде.
А что код - что там скрывать-то... Вот он:
DatabaseName:= ExtractFilePath(Application.ExeName);
TableName:= "Test";
FieldDefs.Clear;
FieldDefs.Add("ID", ftAutoInc, 0, True);
FieldDefs.Add("FirstField", ftString, 50, True);
FieldDefs.Add("SecondField", ftString, 50, True);
IndexDefs.Clear;
IndexDefs.Add("", "ID", [ixPrimary]);
CreateTable;
Exclusive:= True;
Open;
AddIndex("Second", "SecondField", []);

И вот на месте создания вторичного индекса ругается.


Leran2002   (2002-08-09 14:36:00) [5]


> Anatoly Podgoretsky © (09.08.02 11:25)

Да не спроста наверное его назвали PARADOX, ой не спроста... ;-))


Anatoly Podgoretsky   (2002-08-09 11:25:00) [6]

В твоем коде, который ты скрываешь


Mike N. Radoman   (2002-08-09 11:19:00) [7]

Блин, я уже совсем запутался - первичный индекс создается, а вот вторичный - как до CreateTable, так и после - нет. Либо просто не добавляется, либо пишет экспешн - Index does not exist. Так в чем проблема все-таки?Будь моя воля - не использовал Paradox ни в жисть - но надо :(


Anatoly Podgoretsky   (2002-08-09 10:42:00) [8]

Leran2002 © (09.08.02 10:20)
Удобно, вот только без первичного ключа не работает, и на первичный ключ странные ограничения.


Leran2002   (2002-08-09 10:20:00) [9]


> Anatoly Podgoretsky © (09.08.02 10:10)

Но почему же эти индексы удобно использовать, т.к. каждая запись будет уникальна, а это уже дает многое если хорошо подумать...


Mike Kouzmine   (2002-08-09 10:13:00) [10]

Кричат инвалиды, кто работает и у кого работает - молчат.


Anatoly Podgoretsky   (2002-08-09 10:10:00) [11]

Leran2002 © (09.08.02 07:01)
Ты думаешь, а крики постоянно по этому поводу, надо использовать не парадоксальые форматы, там все в порядке.
Вариант с необслуживаемыми индексами как правило подходит только для СД


Mike N. Radoman   (2002-08-09 10:01:00) [12]

То есть нужно создать первичный индекс на автоинкремент, потом IndexDefs.Add(...) - вторичный, и потом .CreateTable?


Leran2002   (2002-08-09 07:01:00) [13]


> Anatoly Podgoretsky © (08.08.02 19:03)

Зато пахать все будет!!!


Anatoly Podgoretsky   (2002-08-08 19:03:00) [14]

Получится, но будет необслуживаемы, Парадокс однако


Leran2002   (2002-08-08 18:36:00) [15]

Да без первичного ничего не получится...
Я обычно ввожу лишнее автоинкрементное поле и обозначаю первичным ключом.


sniknik   (2002-08-08 18:33:00) [16]

Без праймари не получится.


Наверх

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