![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как программно добавить вторичный индекс? [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]Без праймари не получится.