как сделать резервную копию определеных данных?

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: как сделать резервную копию определеных данных?

Re: как сделать резервную копию определеных данных?

Anticler » 01 май 2007, 00:44

спасибо! буду пробовать :)

Re: как сделать резервную копию определеных данных?

SergeyS » 27 апр 2007, 04:58

Создай TDatabase и настрой его на каталог, где у тебя хранятся твои парадоксовые таблички. Подключи к твоему TDatabase - TQuery.
Вставь в TQuery такой код:
CREATE TABLE "employee.db"
(
LAST_NAME CHAR(20),
FIRST_NAME CHAR(15),
SALARY NUMERIC(10,2),
DEPT_NO SMALLINT,
PRIMARY KEY(LAST_NAME, FIRST_NAME)
)
// данный код я вытащил из справки к Database Desktop

после того как ты вызовешь TQuery.ExecSQL ты получишь новую табличку "employee.db" в каталоге, на который настроен твой TDatabase
после этого ты можешь спокойно пихать в эту таблицу любые данные или извлекать из неё.

Что ещё нужно? Ты можешь создать любую таблицу (аналогичным образом ты можешь и прибить её), заносить в неё данные а потом извлекать.
Но в таком случае (в случае восстановления данных из частичных файлов), тебе придётся отказаться от автоинкриментных полей и увеличивать id записи вручную

При запросах к файлам в TQuery вроде можно использовать относительные пути: CREATE TABLE "backup\employee.db"

Re: как сделать резервную копию определеных данных?

Naeel Maqsudov » 27 апр 2007, 00:24

&quot писал(а):как это все делается через Sql, чтоли ?
Увы... Не будь это Paradox, можно было бы разервную копию создавать командой

CREATE TABLE tabl_backup AS SELECT * from tabl;

А восстановление - всего три команды

DELETE FROM tabl WHERE F1 IN (SELECT F1 FROM tbl_backup);
INSERT INTO tabl SELECT * FROM tbl_backup;
DROP TABLE tbl_backup;


Но Paradox так не умеет :(

Re: как сделать резервную копию определеных данных?

Naeel Maqsudov » 27 апр 2007, 00:16

Сделайте так, как реализована процедура экспорта/импорта в нормальных СУБД.

Т.е. произведите выборку так, чтобы получится SQL-скрипт, при выполнении которого получистя импорт.

Пусть есть таблица T(F1,F2,F3) F1=первичный ключ, F2-числовое поле, F3-текстовое.

С помощью TQuery сделайте выборку

select 'delete from T where f1=' || cast(F1 as char) || chr(13) || chr(10) ||
'insert into t values(' || cast(F1 as char) || ',' || cast(F2 as char) || ',''' || f3 || ''')'
from t where <условие отбора>

Получится набор готовых пар команд delete-insert. Нужно пробежаться по выборке и сохранить все это в обычный текстовый файл.

Теперь, чтобы вернуть эти данные на место надо просто загрузить этот текстовый файл в TStrings. Пробежаться по всем строкам и выполнить их по очереди. Напрмиер, с помощью TDatabase.Execute.

Re: как сделать резервную копию определеных данных?

Anticler » 26 апр 2007, 16:52

как это все делается через Sql, чтоли ?

Re: как сделать резервную копию определеных данных?

Игорь Акопян » 26 апр 2007, 15:57

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

Re: как сделать резервную копию определеных данных?

Anticler » 26 апр 2007, 14:13

да это для диплома, дело в том что мне препод поставил задачу такую.

Re: как сделать резервную копию определеных данных?

SergeyS » 26 апр 2007, 04:44

&quot писал(а):Но если "вставить их из временной таблички", тогда индексы не сохранятся
Сохранятся и ещё как. Или ты собираешься "ручками" их вставлять (в смысле не через BDE с таблицей работать а как с обычным бинарным файлом)?
Индексы обновляются каждый раз, когда ты модифицируешь таблицу и неважно как.
В принципе ты можешь реализовать свою идею, но зачем?
Насколько большой может быть твоя база?
До меня только сейчас дошло, ты хочешь делать последовательные бэкапы своей базы: за такое-то число, за такое и т.д., а если база свалится то восстанавливать её последовательно их списка этих файлов.
Слишком сложно.
Сколько ты планируешь будет жить твоя программа? Ты уверен что она станет очень большой? А если она станет очень большой сможет ли твоя программа шустро работать с paradox'овой табличкой.
У меня была программа на парадоксе, так там было около миллиона записей только в одной таблице - программа еле ползала, пришлось переходить на SQL

Если это коммерческий проект, то лучше сразу откажись от парадокса в пользу бесплатных SQL Server'ов (MySQL, FireBird...) тем более что система логов в них уже реализована. Если это для вуза - то забей на это, программы в институтах живут очень недолго (всегда находится новый талантливый программист, который говорит что сможет написать лучше :) ), если это курсовая или дипломная - тем паче.

Re: как сделать резервную копию определеных данных?

Anticler » 26 апр 2007, 00:45

SergeyS писал(а):Если потребуется восстановить данные, то можно будет в основной таблице удалить старые записи и вставить их из временной таблички.
Но если "вставить их из временной таблички", тогда индексы не сохранятся

Re: как сделать резервную копию определеных данных?

Anticler » 26 апр 2007, 00:42

это я мог бы сделать давно, но мне необходимо, чтоб резервная база хранилась по частям.
дело в том, что база может достигать больших размеров и процесс архивирования может занять много времени, и при том - сколько ж будут потом весить все эти копии вместе... .

Вернуться к началу