TimoN |
Отправлено: 10.07.2003, 15:41 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Подскажите кто знает как ндексировать и преиндексировать БД Table'ом?
И еще вопрос как склеить одинаковые БД. |
|
Nick |
Отправлено: 10.07.2003, 16:47 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
Какая БД Paradox, Dbase, FoxBase, Access, Inter Base ... |
|
Admin |
Отправлено: 10.07.2003, 19:27 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
В Paradox-е можно так:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Table1->DatabaseName = "c:\\ddd";
Table1->TableType = ttParadox;
Table1->TableName = "myTable";
// определяем поля таблицы
Table1->FieldDefs->Clear();
TFieldDef *pNewDef = Table1->FieldDefs->AddFieldDef();
pNewDef->Name = "ID";
pNewDef->DataType = ftInteger;
pNewDef->Required = true;
pNewDef = Table1->FieldDefs->AddFieldDef();
pNewDef->Name = "Name";
pNewDef->DataType = ftString;
pNewDef->Size = 50;
// создаем таблицу
Table1->CreateTable();
Table1->Active = true;
// добавляем в таблицу 3 записи
Table1->Append();
Table1->FieldByName("ID")->Value = 1;
Table1->FieldByName("Name")->Value = "Mary";
Table1->Post();
Table1->Append();
Table1->FieldByName("ID")->Value = 2;
Table1->FieldByName("Name")->Value = "Gregor";
Table1->Post();
Table1->Append();
Table1->FieldByName("ID")->Value = 3;
Table1->FieldByName("Name")->Value = "Artur";
Table1->Post();
// индексируем таблицу по полю ID
Table1->Active = false;
Table1->Exclusive = true;
Table1->Active = true;
Table1->AddIndex("IDidx", "ID" ,TIndexOptions()<<ixPrimary<<ixUnique);
}
//---------------------------------------------------------------------------
|
В InterBase через backup/restore.
--------------
По поводу склеивания одинаковых БД — наверное лучше
через компонент BatchMove потаблично.
Пример из Help-a:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Query1->Active)
{
if (SaveDialog1->Execute())
{
Table1->TableName = SaveDialog1->FileName;
BatchMove1->Source = Query1;
BatchMove1->Destination = Table1;
BatchMove1->Mode = batCopy;
BatchMove1->Execute();
ShowMessage(IntToStr(BatchMove1->MovedCount) + " records copied");
}
}
}
|
А определить количество таблиц и их имена можете в
Database1->GetTableNames(ListBox1->Items, false);
Далее в цикле по всем таблицам пройтись BatchMove.
Отредактировано Admin — 10/07/2003, 20:37
|
|
TimoN |
Отправлено: 11.07.2003, 08:12 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE (Admin @ 10/07/2003, 20:29) | В Paradox-е можно так:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
........................................
// индексируем таблицу по полю ID
Table1->Active = false;
Table1->Exclusive = true;
Table1->Active = true;
Table1->AddIndex("IDidx", "ID" ,TIndexOptions()<<ixPrimary<<ixUnique);
}
//---------------------------------------------------------------------------
|
|
Table1->AddIndex я создам индекс, а после редактирования как переиндексировать?
|
|
TimoN |
Отправлено: 11.07.2003, 08:14 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE (Nick @ 10/07/2003, 17:49) | Какая БД Paradox, Dbase, FoxBase, Access, Inter Base ... |
Paradox, Dbase. |
|
Admin |
Отправлено: 11.07.2003, 09:35 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
QUOTE |
, а после редактирования как переиндексировать?
|
Что значит после редактирования ???
При добавлении записи
Table1->Append();
....
Table1->Post();
или при удалении
Table1->Delete();
индекс будет автоматически перестроен.
Если произошло нарушение индексов и требуется заново
создать индексы по таблице, удалите файлы индексов
(можете программно) (*.px *.py и т.д.) и создайте индексы заново:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
........................................
// индексируем таблицу по полю ID
Table1->Active = false;
Table1->Exclusive = true;
Table1->Active = true;
Table1->AddIndex("IDidx", "ID" ,TIndexOptions()<<ixPrimary<<ixUnique);
}
|
Таблица будет заново полностью переиндексирована.
Отредактировано Admin — 11/07/2003, 11:00
|
|
TimoN |
Отправлено: 14.07.2003, 08:57 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE (Admin @ 11/07/2003, 10:37) | QUOTE |
, а после редактирования как переиндексировать?
|
Что значит после редактирования ???
При добавлении записи
Table1->Append();
....
Table1->Post();
или при удалении
Table1->Delete();
индекс будет автоматически перестроен.
Если произошло нарушение индексов и требуется заново
создать индексы по таблице, удалите файлы индексов
(можете программно) (*.px *.py и т.д.) и создайте индексы заново:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
........................................
// индексируем таблицу по полю ID
Table1->Active = false;
Table1->Exclusive = true;
Table1->Active = true;
Table1->AddIndex("IDidx", "ID" ,TIndexOptions()<<ixPrimary<<ixUnique);
}
|
Таблица будет заново полностью переиндексирована. |
хорошо это в парадоксе, а dbf? |
|
Admin |
Отправлено: 15.07.2003, 19:09 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
А с .dbf лучше писать на FoxPro
с индексами через Builder там все очень криво через BDE
Или надо через ADO или через компоненты прямого доступа
типа TDBF но и они полностью нормально
не работают.
Отредактировано Admin — 15/07/2003, 20:11
|
|