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

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

Не могу создать резервную копию базы. (BDE) [D4, dBase, FoxPro]


Jen N ©   (2002-11-25 17:51:00) 

{Имею " шаблонную" базу (_shablon.dbf)
(Она проиндексирована, все это в Object Inspector отражено.}

Table_rezerv.TableName := "_shablon.dbf";
Open;
Close;

{Делаю так, чтобы вручную не указывать все Fields, Index для новой базы}
{Теперь присваиваю TableName новое значение (имя резервнойбазы), и создаю с такими же полями и индексом, но с новым именем}

Table_rezerv.TableName := newName;
Table_rezerv.CreateTable; {безусловно}
Table_rezerv.BatchMove(Table1, batCopy);

{вот тут выскакивает ошибка. Дело в том, что если просто Editы и Appendы делаю - нормально. А после BatchMove - матерится, говорит Index does not exist. И действительно физически файла с расширением mdx не появляется (это же и есть индекс?}

В каком месте я дурак?

Спасибо.


Jen N   (2002-11-27 14:35:00) [1]

2 Anatoly Podgoretsky:

dbiCopyTable - это ibase? Я в хелпе Делфи не нашел (даже поиском).


Anatoly Podgoretsky   (2002-11-26 23:02:00) [2]

dbiCopyTAble


Jen N   (2002-11-26 20:00:00) [3]

2 Pat, 2 All:

Спасибо, Pat, за процедуру.
Только у меня уже начали опускаться руки. Дело в том, что индекс у меня Expression - вычисляется по некоторой формуле из нескольких полей.
Видимо поэтому не хочет выполняться команда CreateTable. Говорит "Invalid index Descriptor. Table (с новым именем) does not exist".

Я долго-долго мучался сидел. И вставил такой кусок:

IndexName := Source.IndexName;
IndexDefs[0].Expression := Source.IndexDefs[0].Expression;
IndexDefs[0].Name := Source.IndexDefs[0].Name;
IndexDefs[0].Source := Source.IndexDefs[0].Source;

Теперь таблица создается (CreateTable).
Но зато ни BatchMove, ни твой, Pat, sql-ловский копировальщик не работают. BatchMove матерится опять же на индексы (???), а sql-ке не нравится русское имя файла (база имеет имя "01 ноября 2002.dbf", например). Я конечно, могу исправить енто имя на англицкое, но не уверен, что и это поможет.
Наверное, стоит опустить руки и работать без бекапа :((

А кто подскажет, может просто тупо 3 файла БД копировать командами ОС, у меня работает на базе только один человек, и во время работы можно копировать эти файлы, я пробовал.

Отчаявшийся, Jen N


Jen N   (2002-11-26 15:22:00) [4]

2 Pat:
Спасибо, большое, разберусь!


Pat   (2002-11-25 23:31:00) [5]

>...говорит Index does not exist
Все дело в волшебных пузырьках ©
У тебя индексы не существуют
IndexDefs.Assign(Source.IndexDefs)


Pat   (2002-11-25 23:22:00) [6]

>Не могу создать резервную копию базы
Влом разбераться, что у тебя за проблема. Вот, только вчера написал процедуру резервирования таблицы:

procedure BackUpTable(Source:TTable);
const SqlString="insert into %s select * from %s";
begin
with TTable.Create(application) do
try
Source.IndexDefs.Update;
IndexDefs.Assign(Source.IndexDefs);
FieldDefs.Assign(Source.FieldDefs);
DatabaseName:=Source.DatabaseName;
TableName:="bk"+Source.TableName;
CreateTable;
finally
free
end;

with TQuery.Create(application) do
try
SQL.Clear;
DatabaseName:=Source.DatabaseName;
SQL.Add(format(SqlString,["bk"+Source.TableName,Source.TableName]));
ExecSQL;
finally
free
end;
end;

Авось, поможет :-))


Jen N   (2002-11-25 18:06:00) [7]

Еще к тому же и наврал.
Append не ругается, но и ничего не делает. А вот Post после него ругается. Говорит "Table not in Insert or Edit Mode".


Наверх

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