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


Автор: dser 20.2.2003, 06:49
Во время работы приложения выпадает сообщение о нарушении индекса. Таблица Paradox 7.0 имеет семь индексов (включительно с первичным). В этом случае нужна ли реиндексация или требуется удалить все индексы, а затем их заново создать. И еще: как создать первичный ключ описание есть, а как удалить первичный ключ описания нет - подскажите кто-нибудь.
Vit посоветовал удалить все файлы с диска кроме *.DB. Как все это сделать програмно, я не имею ввиду совет Vit`a.

Автор: Medved 20.2.2003, 20:32
Это пример из моей программы, сокращать не стал, если будут вопросы, спрашивай.

Код

 with fLogo do begin
   if bool
     then begin
       lfirst.caption := 'Осуществляется первый запуск приложения';
       lfirst.visible := true;
       try
         Application.ProcessMessages;
         lload.Caption := 'Соединение с базой данных..';
         Application.ProcessMessages;
         fdm.DPhone.Connected := True;


         fDM.tTel.Exclusive := true;
         lload.Caption := 'Откртие таблицы физических лиц..';
         Application.ProcessMessages;

         fDM.tTel.Open;

         lload.Caption := 'Создание индексного файла для таблицы физических лиц...';
         Application.ProcessMessages;
         fDm.tTel. AddIndex('Phone','Phone', [ixCaseInsensitive]);
         fDm.tTel.AddIndex('Name','Name', [ixCaseInsensitive]);
         fDm.tTel.AddIndex('Street','Street;Home;Kvr', [ixCaseInsensitive]);
         fDm.tTel.Close;
         fDM.tTel.Exclusive := false;
       except
         fDm.tTel.Close;
         fDM.tTel.Exclusive := false;
         MessageBox(0,PChar('Не могу создать индексные файлы для таблицы телефонных номеров физических лиц!'+#13+'Приложение вынуждено завершить свою работу.'),'Критическая ошибка', MB_OK+MB_ICONERROR);
         exit;
       end;

         fDM.tOrg.Exclusive := true;
         Application.ProcessMessages;
         lload.Caption := 'Откртие таблицы юридических лиц...';
         Application.ProcessMessages;
         fDM.tOrg.Open;

       try
         lload.Caption := 'Создание индексного файла для таблицы юридических лиц...';
         Application.ProcessMessages;
         fDm.tOrg.AddIndex('Phone','Phone', [ixCaseInsensitive]);
         fDm.tOrg.AddIndex('OrgName','OrgName', [ixCaseInsensitive]);
         fDm.tOrg.AddIndex('Street','Street;Home', [ixCaseInsensitive]);
         fDm.tOrg.Close;
         fDM.tOrg.Exclusive := false;
       except
         fDm.tOrg.Close;
         fDM.tOrg.Exclusive := false;
         MessageBox(0,PChar('Не могу создать индексные файлы для таблицы телефонных номеров юридических лиц!'+#13+'Приложение вынуждено завершить свою работу.'),'Критическая ошибка', MB_OK+MB_ICONERROR);
         exit;
       end;

       try
         lload.Caption := 'Откртие таблицы телефонных номеров физических лиц...';
         Application.ProcessMessages;
         fDM.tTel.Open;
       except
         MessageBox(0,PChar('Не могу открыть таблицу телефонных номеров физических лиц!'+#13+'Приложение вынуждено завершить свою работу.'),'Критическая ошибка', MB_OK+MB_ICONERROR);
         Application.Terminate;
       end;
       Reg.WriteString('First', 'false');
       Reg.CloseKey;
       Reg.Free;
       lfirst.visible := false;
     end
     else begin
       try
         lload.Caption := 'Откртие таблицы телефонных номеров юридических лиц...';
         Application.ProcessMessages;
         fDM.tTel.Open;
       except
         MessageBox(0,PChar('Не могу открыть таблицу телефонных номеров юридических лиц!'+#13+'Приложение вынуждено завершить свою работу.'),'Критическая ошибка', MB_OK+MB_ICONERROR);
         exit;
       end;
     end;
 end;  //with


Два важных момента.

1) таблица должны бать открыта в эксклюзивном режиме (fDM.tTel.Exclusive := false);
2) 2) в моем примере, я создаю вторичные индексы. но если все создавать с нуля (т.е. предварительно будут удалены индексные файлы Paradox (*.PX, и т.д.), то в первую очередь необходимо создать уникальный первичный индекс.

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

Автор: dser 24.2.2003, 07:24
Выпадает сообщение о повреждении первичного индекса. Как мне "отремонтировать" его. Я полагаю, что нужно индеск сначала удалить, а затем создать заново. Создать могу, а как удалить? Вот в чем вопрос.
В ответе Pegas`а я не нашел ответа на свой вопрос. Извинете!

Автор: Vit 25.2.2003, 00:37
Именно так как я и предлагал.

1) Закрываем все таблицы
2) sesion.active:=false;
3) програмно удаляем все файлы кроме DB
4) sesion.active:=true;
5) Создаём повторно ключи и индексы


Автор: Medved 25.2.2003, 19:41
А чем это не ответ:
Цитата
2) в моем примере, я создаю вторичные индексы. но если все создавать с нуля (т.е. предварительно будут удалены индексные файлы Paradox (*.PX, и т.д.), то в первую очередь необходимо создать уникальный первичный индекс.


А как "но если все создавать с нуля (т.е. предварительно будут удалены индексные файлы Paradox (*.PX, и т.д.)" Vit уже объяснил...

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