powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Копирование таблицы
6 сообщений из 6, страница 1 из 1
Копирование таблицы
    #34484150
Bingo_Bongo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброе время суток!
Работаю с SQLite 3.3.15 через Lazarus. Хотелось узнать, как можно скопировать таблицу из одной базы данных в другую. Есть какие-либо утилиты?
...
Рейтинг: 0 / 0
Копирование таблицы
    #34484965
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В SQLite есть оператор ATTACH DATABASE , который подключает другую базу данных к подключенной базе данных SQLite в текущем соединении. В случае если имя подключаемой базы данных содержит символы пунктуации, то оно должно быть включено в кавычки. Имена 'main' и 'temp' отсылают к главной базе и к базе, использующейся для временных таблиц. Они не могут быть отключены. Подключенные базы данных могут быть отключены с помощью оператора DETACH DATABASE .

Синтаксис поключения базы данных:
ATTACH [DATABASE] database-filename AS database-name

Пример:
ATTACH DATABASE basedb AS basedb;
или так:
ATTACH DATABASE 'base.db' AS basedb;

Вы можете читать из подключенной базы данных, писать в нее и модифицировать ее схему в версии SQLite 3.0. и выше.

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

К таблицам в подключенной базе данных можно обращаться с использованием синтаксиса имя-базы.имя-таблицы. Если имя подключенной таблицы не имеет дубликата в главной базе, к нему можно не присоединять имя базы как префикс. При подключении базы данных, все ее таблицы, не имеющие дублирующего имени, становятся таблицами по умолчанию для своего имени. Все таблицы с этим именем, которые подключаются позже, нуждаются в префиксе. Если умолчальная таблица для данного имени отключается, то следующей умолчальной таблицей для данного имени становится последняя, подключенная с этим именем.

Если главная база данных не является :memory:, то транзакции между несколькими подключенными базами атомарны. В противном случае, если главная база является :memory:, то транзакции остаются атомарными внутри каждого отдельного файла базы. Последнее означает, что если в середине COMMIT -а при изменении двух или более файлов баз наступает крах системы, то какие-то из этих файлов могут оказаться измененными, а другие нет. Атомарный COMMIT подключенных баз данных является новой фичей SQLite версии 3.0. В SQLite версии 2.8, все COMMIT-ы подключенных баз ведут себя так, как если бы главная база данных являлась :memory:.

Максимальное число подключаемых баз данных - 10.

Для копирование таблицы нужно к уже подключенной базе данных SQLite поключить еще одну базу данных, а затем с помощью INSERT INTO и SELECT вставить данные из одной таблицы базы данных в другую таблицу базы данных, например так:

INSERT INTO spisok (id, fam, ima, otch ) SELECT stspisok.id, stspisok.fam, stspisok.ima, stspisok.otch FROM stspisok
...
Рейтинг: 0 / 0
Копирование таблицы
    #34485240
Bingo_Bongo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чего-то для меня это слишком трудно для понимания, извиняюсь! А можно выгрузить таблицу из базы в текстовый файл, а затем загрузить в другую базу данных?
...
Рейтинг: 0 / 0
Копирование таблицы
    #34488260
Alexbootch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выгрузить таблицу из одной базы данных в другую можно так (описываю подробно):

Что бы было понятнее, предположим что:
base.db - это база из которой нужно выгрузить таблицу
newbase.db - база, в которую нужно загрузить таблицу из файла
fam - таблица из базы base.db, которую нужно выгрузить
newfam - таблица из базы newbase.db, в которую нужно загрузить таблицу fam из базу base.db
temp - рабочая папка

ПЕРВЫЙ ВАРИАНТ:

1. ШАГ ПЕРВЫЙ:
Скачай программу sqlite3.exe по этой ссылке: скачать
и библиотеку sqlite3.dll по этой ссылке: скачать
и извлеки указанные файлы из архива в папку temp.
Далее скинь в эту же папку base.db и newbase.db

2. ШАГ ВТОРОЙ:
Создай в папке temp файл 1.txt со следующим содержанием:
ATTACH DATABASE 'base.db' AS basedb;
ATTACH DATABASE 'newbase.db' AS newbasedb;
INSERT INTO newfam (id, fam, ima, otch ) SELECT fam.id, fam.fam, fam.ima, fam.otch FROM fam


3. ШАГ ТРЕТИЙ:
запусти программу sqlite3.exe и введи следующее
.read 1.txt
далее нажми Enter и жди до появления в программе sqlite3.exe следующего приглашения ввести данные - sqlite>
Далее - закрой программу sqlite3.exe
Вот и все. Данные из таблицы fam базы данных base.db перенесены в таблицу
newfam базы данных newbase.db

ВТОРОЙ ВАРИАНТ:

1. ШАГ ПЕРВЫЙ:
Скачай программу sqlite3.exe по этой ссылке: скачать
и библиотеку sqlite3.dll по этой ссылке: скачать
и извлеки указанные файлы из архива в папку temp.
Далее скинь в эту же папку base.db и newbase.db

2. ШАГ ВТОРОЙ:
Создай в папке temp файл 1.txt со следующим содержанием:
ATTACH DATABASE 'base.db' AS basedb;
.mode insert fam
.output temper.txt
SELECT * FROM fam;


3. ШАГ ТРЕТИЙ:
запусти программу sqlite3.exe и введи следующее
.read 1.txt
далее нажми Enter и закрой указанную программу.
Если все правильно сделал, то в папке temp должен появиться файл temper.txt

4. ШАГ ЧЕТВЕРТЫЙ:
Открой файл temper.txt в блокноте выбери из меню Правка --> Заменить
и замени fam на newfam и сохрани изменения.

5. ШАГ ПЯТЫЙ:
Открой программу sqlite3.exe и введи следующее:
ATTACH DATABASE 'newbase.db' AS newbasedb;
Нажми Enter
Далее введи .read temper.txt
Нажми Enter
Далее жди до появления в программе sqlite3.exe следующего приглашения ввести данные - sqlite>
Далее - закрой программу sqlite3.exe
Вот и все. Данные из таблицы fam базы данных base.db перенесены в таблицу
newfam базы данных newbase.db

ТРЕТИЙ ВАРИАНТ:
Скачай программу SQLite Administrator (freeware, есть русский интерфейс)
скачать
Открой с помощью SQLite Administrator базу base.db
Далее через меню Данные -->Экспорт выгрузи таблицу fam из базы base.db в файл.
Закрой базу base.db и открой базу newbase.db
Далее через меню Данные -->Импорт данных загрузи и данные из файла в базу данных newbase.db
Вот и все. Данные из таблицы fam базы данных base.db перенесены в таблицу
newfam базы данных newbase.db
...
Рейтинг: 0 / 0
Копирование таблицы
    #34493576
Bingo_Bongo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо все получилось!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Копирование таблицы
    #37045875
Alexbootch,

Спасибо за этот краткий и нужный мануал !
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Копирование таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]