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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Anticler
Сообщения: 28
Зарегистрирован: 28 мар 2007, 22:04

26 апр 2007, 14:13

да это для диплома, дело в том что мне препод поставил задачу такую.
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

26 апр 2007, 15:57

создай пустой файл аналогичной структуры для шаблона. потом делай копирование файла и наполнение запросом, не?
Изображение
Аватара пользователя
Anticler
Сообщения: 28
Зарегистрирован: 28 мар 2007, 22:04

26 апр 2007, 16:52

как это все делается через Sql, чтоли ?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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 так не умеет :(
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

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"
Аватара пользователя
Anticler
Сообщения: 28
Зарегистрирован: 28 мар 2007, 22:04

01 май 2007, 00:44

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