![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Опять про воостановление индексов в Paradox [D6, Paradox]
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));
А можно функцию переиндексации прям в Дата Модуле написать. Если это от этого.