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


Автор: X-Vlad 1.4.2003, 08:22
Привет всем.

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

насколько я знаю поиск по таблице производится по индексированым столпцам (тоесть столпец должен быть индексным)...

Вопрос как создать\удалить индекс?

Например у меня есть колонки (CPU, MOTHERBOARD, RAM, HDD ...) и я хочу чтобы при поиске можна было выбрать колонку.

помогите.

Спасибо.


Автор: SmaLL 1.4.2003, 15:53
Какая БД?

Автор: X-Vlad 1.4.2003, 16:25
DBASE

Автор: X-Vlad 1.4.2003, 16:28
Пробовал создать так:
Код

Var
i:integer;
begin
 i:=combobox1.ItemIndex;
with Query1 do
  begin
   databasename:=Table1.DatabaseName;
   sql.Clear;
   sql.Add('ALTER TABLE '+table1.TableName+' ADD index ('+combobox1.Items.Strings[i]+')');
   execsql;
   table1.Refresh;
  end;

невыходит. Ощибка: " незнает что такое "index"

помогите...

Автор: SmaLL 1.4.2003, 16:31
DBASE не поддерживает индексов.
Лучше использовать Paradox.

Автор: X-Vlad 2.4.2003, 05:21
тогда каким макаром осуществляется поиск в етой базеconfused.gif??
или вней такого как поиск - вообще нету?

Автор: December 2.4.2003, 05:43
SmaLL, с каких порconfused.gifconfused.gifconfused.gif
dBase с индексами, конечно, не лучшим образом, но работает.
X-Vlad, поиск можно Locate'ом, и ещё много какими способами.
Что касается индексов... Пример из живого проекта (удави там лишнее...)
Код
procedure IndexIt;
begin
with form1 do
   begin
   if fileexists(copy(edit1.Text,1,length(edit1.Text)-4)+'.MDX') then
                                   try
                                   RemoveIndex;
                                   finally
                                   end;
   table1.active:=false;
   Table1.AddIndex('ByName',NameFieldName,[]);
   table1.active:=true;
   table1.IndexName:='ByName';
   end;{with}
end;{IndexIt}


procedure RemoveIndex;
begin
if form1.table1.IndexName<>'' then form1.table1.IndexName:='';
try
form1.table1.DeleteIndex('ByName');
finally
end;{finally}
end;{RemoveIndex}



Автор: X-Vlad 2.4.2003, 18:11
Цитата
Пример из живого проекта (удави там лишнее...)
спасибо.

нашол:
Код

Добавление индекса:

procedure TForm1.Button2Click(Sender: TObject);
Var
i:integer;
begin
 i:=combobox1.ItemIndex;
 Table1.AddIndex('find', combobox1.Items.Strings[i], [ixExpression]); {ixExpression - только для баз DBASE}
 table1.Refresh;
 end;
end;

удаление индекса:

table1.DeleteIndex(listbox1.Items.Strings[0]);



ещё вопрос:
1. как создать\удалить индекс в Paradox?
2. сортировка полей происходит только когда стоит индекс?


Автор: X-Vlad 2.4.2003, 18:14
Пробовал делать:
Код

procedure TForm1.Button2Click(Sender: TObject);
Var
i:integer;
begin
i:=combobox1.ItemIndex;
Table1.AddIndex('find', combobox1.Items.Strings[i], [ixPrimary]);
table1.Refresh;
end;
end;

невыходит sad.gif выскакивает ошибка...

Автор: 78125 2.4.2003, 20:13
Какая ошибка?

Уверен что добавление ixPrimary возможно?

Автор: Vit 2.4.2003, 17:47
Я бы использовал квери:

Alter Table для изменения первичного ключа
Create/Drop Index для изменения вторичных индексов

Автор: Cashey 2.4.2003, 23:02
Цитата

1. как создать\удалить индекс в Paradox?

Если сама таблица уже описана то примерно так
Код

begin
with IndexDefs do
  begin
     with AddIndexDef do
            begin
            //название ключа для первичного индекса не требуется
            Name := ' ';
            Fields := 'ID';
            //признак первичного ключа
            Options := [ixPrimary];
            end;
   //второй индекс
     with AddIndexDef do
     begin
     Name := := ' NameInd';
     Fields := 'Name'
    end;
end
//после этого надо вызвать метод создания таблицы        

Автор: Vit 2.4.2003, 23:36
Модератор: Для дополнительных вопросов открывайте новую тему.

Автор: X-Vlad 3.4.2003, 21:05
Цитата
Модератор: Для дополнительных вопросов открывайте новую тему.


у меня дозвон мне в лом потом искать свои вопросы по всему форуму, если бы сидел на выделенке вопросов нет создавал бы отдельно!!!
тем более что мои вопросы касаются одной темы Базы.

Автор: Vit 3.4.2003, 22:00
Цитата(X @ 3.4.2003, 12:05)
у меня дозвон мне в лом потом искать свои вопросы по всему форуму, если бы сидел на выделенке вопросов нет создавал бы отдельно!!!
тем более что мои вопросы касаются одной темы Базы.

Модератор:
Ваши проблемы с дозвоном вряд ли могут являтся причиной нарушений правил форума. Созданная Вами тема звучит "Базы данных., Создание индекса в таблице...", и все вопросы не относящиеся к этой теме будут рассматриваться как офтопик. А по поводу такой темы как "Базы", так может нам создать один раздел и один вопрос "программирвоание" и будем там все спрашивать и отвечать обо всём. На всех форумах существует определённый порядок - в теме должен быть один конкретный вопрос, который и обсуждается отвечающими.

Дальнейшие споры по целесообразности таких правил и обсуждение действий модератора должно проводится в разделе "Обсуждение форума".


Администрация оставляет за собой право удалять ответы, которые не относятся к теме обсуждения, а так же топики состоящие из более чем одного вопроса. Я выделяю ваш вопрос в новый топик.

Автор: Lobsang 4.4.2003, 06:48
По поводу индексов.
Индексы в таблицах создаются для ускорения поиска, но это не значит, что нельзя искать данные в не проиндексированных столбцах. Просто такой поиск - по значению, значительно медленнее.
тем не менее это совсем не означает, что следует индексировать все столбцы, поскольку для хранения индексов требуется место. Индексируй то что действительно необходимо.

Автор: X-Vlad 5.4.2003, 08:45
Цитата
По поводу индексов.
Индексы в таблицах создаются для ускорения поиска, но это не значит, что нельзя искать данные в не проиндексированных столбцах. Просто такой поиск - по значению, значительно медленнее.
тем не менее это совсем не означает, что следует индексировать все столбцы, поскольку для хранения индексов требуется место. Индексируй то что действительно необходимо.


ето то что я хотел услышать...smile.gif Спасибо!

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