как сделать резервную копию определеных данных?
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
да это для диплома, дело в том что мне препод поставил задачу такую.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
создай пустой файл аналогичной структуры для шаблона. потом делай копирование файла и наполнение запросом, не?

как это все делается через Sql, чтоли ?
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Сделайте так, как реализована процедура экспорта/импорта в нормальных СУБД.
Т.е. произведите выборку так, чтобы получится 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.
Т.е. произведите выборку так, чтобы получится 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
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Увы... Не будь это Paradox, можно было бы разервную копию создавать командой" писал(а):как это все делается через Sql, чтоли ?
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
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Создай 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"
Вставь в 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"
спасибо! буду пробовать 
