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

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

Опять про воостановление индексов в Paradox [D6, Paradox]


Страницы:   1 2

sad ©   (2002-03-21 14:19:00) 

Здравствуйте, сразу же извиняюсь за повтор темы, но вот такая штука происходит, пытаюсь воостанавливать индексы функцией DBiRegenIndexes , то есть как советовали мастера

Check(DbiRegenIndexes(Table.Handle));

Но выдает мне она exception следующего вида :
Must use baseorder for this operation.

Прим.Таблица открыта как Exclusive


vopros   (2002-03-27 10:01:00) [1]

Всем спасибо я разобрался.


deleon   (2002-03-27 08:53:00) [2]

Скачайте пакет DegisyDb там есть компонент упаковки и реиндексации всех таблиц базы данных (dBase & Paradox)!
http://www.dbwork.kuban.ru/download/degisydb.zip


VAleksey   (2002-03-27 07:16:00) [3]

Уважаемый вопрос не примудрствуй сделай по моему . все будет работать . Держи код. У меня это так работает:

var TbArr: Array [1..19] of string;
i:integer;
begin
While dm1.Database1.DataSetCount-1<>-1 do
begin
dm1.Database1.DataSets[dm1.Database1.DataSetCount-1].Close;
end;
ProgressBar1.Max:=18;
TbArr[1]:="Z_Staff.DB";//dm1.tbStaff;
// Ну набил список таблиц рукми ... лень было придумывать...
TbArr[19]:="Reports.db";
for i:=1 to 19 do
begin
Table1.TableName:=tbArr[i];
Table1.Exclusive:=true;
Table1.open;
Check(dbiRegenIndexes(Table1.Handle));
ProgressBar1.Position:=i;
Table1.close;
Table1.Exclusive:=false;
end;
lbMessage.Caption:="";
ProgressBar1.Position:=0;


sniknik   (2002-03-26 20:05:00) [4]

To vopros ©
почисть ящик. третий раз посылаю. вот ответ (архив 410кб). и пиши на почту когда готов будеш.

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to all of its recipients. The
following address(es) failed:

for_paolo@mail.ru:
Mailbox full:
for_paolo@mail.ru


vopros   (2002-03-26 13:14:00) [5]

Теперь пишет Object not locked...


vopros   (2002-03-26 12:44:00) [6]

sniknik © (26.03.02 12:36)
Он не мог повредиться при архивации?...потому что там пишет при открытии неверное окончание строки...Я в 6 тоже пробывал открыть..Если не трудно скинь exe и саморапаковывающийся архив.
А bde нормально работает , только тут что-то непонятное твориться.


sniknik   (2002-03-26 12:36:00) [7]

Для шестого. Пример рабочий на 100%. В принципе ничего там нет специфического и в 5 должен работать. Но если у тебя с BDE проблемы то ясно работать не будет. Ктати что говорит при компиляции? или в рантайме облом?
Могу выслать скомпилированный провериш.


vopros   (2002-03-26 12:25:00) [8]

Что-то я не допонимаю.
VAleksey (26.03.02 09:45) Все сделал также...пишет..Что не могу иницализировать Bde движок. Bde понятно стоит.
>sniknik@rambler.ru Пример для какого-делфи? Не работает. Смотрю код-делаю такж облом какой-то..Где-то проблема?


VAleksey   (2002-03-26 09:45:00) [9]

Была такая ошибка. Возьми абсолютно свободный компонент TTable, и назначь его свойствам DatabaseName и TableName соответственно имя (псевдоним) базы данных и имя таблицы для которой нужно перестроить индексы. Теперь запусти функцию.


sniknik   (2002-03-25 15:56:00) [10]

Послал пример рабочий. Разбирайся. Единственная просьба ответить при получении. Не получиш через час пиши еще раз вышлю.


vopros   (2002-03-25 14:28:00) [11]

Товарщи поясните по подробнее.
Делаю утилиту восстановления индексов. Есть form1.
На форме валяется таблица Table1. У нее Должно быть свойсвто Ative=true или false, Exclusive:=true или false.
У меня все в true но при
Check(DbiRegenIndexes(DatMod.Table1.Handle));
выдает invalid handle...Что делать поясните..как это сделать?


sad   (2002-03-21 17:26:00) [12]

Пардон DBTables


vopros   (2002-03-21 17:23:00) [13]

Что-то у меня Dbtable нету...


sad   (2002-03-21 17:10:00) [14]

Надо подключить DBTable для Check и BDE для DbiRegenIndexes
Да, если используете Abort для выхода из чего-либо то придется использовать SysUtil.Abort т.к в BDE свой Abort и компилятор будет ругаться


vopros   (2002-03-21 17:06:00) [15]

У меня не знает таких фунций что надо подключить чтобы заработало:Check(DbiRegenIndexes(DatMod.Table1.Handle))?


sniknik   (2002-03-21 16:44:00) [16]

Ну ты прям умными словами у человека охоту к программированию отобьеш :). Тоже думаю путаница у него гдето но неважно нашол рабочий вариант и ладно хватит (для начала).


deleon   (2002-03-21 16:18:00) [17]

Handle - TTable к VCL никакого отношения не имеет и уходит корнями в Bde API, а Bde API функциям все-равно на чем там Table находится, так как Handle формируется функциями BDE API, а не VCL Delphi!


sniknik   (2002-03-21 16:15:00) [18]

Заново индексы строить. Програма ваша все в ваших руках. Изначально вы их делали? А даже нет можно посмотреть по каким полям какие.
Только маленькая проблема, у меня было отказывалось создавать праймари индекс на заполненой таблице. Пришлось создавать новую с индексами и переливать данные.


sad   (2002-03-21 16:05:00) [19]

Попробывал с таблицей, которая принадлежит форме все получилось без всяких проблем.
Но параллельно возник другой вопрос:
допустим у меня случайно поломался Primary index либо какой другой (из-за сбоя диска или т.п) таким образом, что при открытии таблицы выдает exception : Corrupted table/index header
функция DbiRegenIndexes уже не помогает возможно ли восстановление в таком случае, или кроме восстановления с резервной копии нничего не поможет?


sniknik   (2002-03-21 15:55:00) [20]

В хелпе можно найти но сложно.
Вряд ли дата модуль виноват если указатель правильный.
должна передаватся ссылка примерно такая

Check(DbiRegenIndexes(DatMod.Table1.Handle));

А можно функцию переиндексации прям в Дата Модуле написать. Если это от этого.


Страницы:   1 2

Наверх

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