Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизЭкспорт данных Найти похожие ветки
← →
viola (2005-02-17 15:34) [0]У меня такой вопрос:
У меня есть две базы данных,аналонгичной структуры,размещенные на очень большом расстоянии друг от друга, но в некоторый момент появляется необходимость экспортировать данные из одной базы и импортировать в другую.
Как мне это все реализовать с помощью Delphi.
СУБД - MySQL.
← →
Suharew (2005-02-17 16:38) [1]Берешь Делфи, добавляешь на форму два компонента TTable , один указывает на одну базу, другой на другую, читаешь из первой БД записи и добавляешь их во вторую БД. Ты вообще с базами в делфи работала?? Хоть какие-то навыки есть??
← →
Reindeer Moss Eater © (2005-02-17 16:42) [2]размещенные на очень большом расстоянии друг от друга
Надо одну поднести на близкое расстояние к другой.
← →
Ольга (2005-02-17 16:42) [3]Важно не на каком расстоянии расположены базы, а связаны как-то или нет. Если связаны можно настроить репликации (есть и другие изящные способы), если нет - дело муторное...
← →
Suharew (2005-02-17 16:56) [4]правильно сказал Reindeer Moss Eater надо одну поднести к другой. и произвести процедуру(ы) слияния/пересечение/объединения в общем, то что надо. Можно-то с помошью DataBase Desktop, скопировать записи из одной базы в другую.
Ольга Причем здесь репликации, базы одинаковы, я так понял что просто надо скопировать часть базы в другую и все.
← →
viola (2005-02-17 17:08) [5]>Suharew Ты вообще с базами в делфи работала??
Я же написала, что использую СУБД MYSQL и BDE-ые штучки отдыхают - пользуюсь API сервера.
Reindeer Moss Eater
Базы данных расположены в организациях из разных териториальных областей.Так что расположить базы рядом не получиться.
Дело в том, что клиентом - является прога управляющая содержимым базы, и вот необходимо раз в неделю, скажем по инету, сбрасывать данные в центральную базу, которая вертиться 230 км от сателитов.
и вот собственно стоит вопрос как выгрузить данные, в текстовик, а потом загрузить в базу из того же текстовика, котрый передается по инету!
← →
Suharew (2005-02-17 17:33) [6]Ну тогда вчем дело? выгружай новые данные (т.е с момента последней выгрузки) из таблицы в другую таблицу, потом передаешь ее по инету, и закачиваешь в центральную базу.
← →
Reindeer Moss Eater © (2005-02-17 17:38) [7]и вот собственно стоит вопрос как выгрузить данные, в текстовик,
while not Query.Eof do
begin
WriteNextRecordToTextovik;
Query.Next;
end;
← →
Ольга (2005-02-18 07:51) [8]Не советую связываться с текстовыми файлами. Имея мощные средства SQL, не стоит переходить на "пещерный" уровень.
Полностью поддерживаю [6].
Схема такая:
1. Нужно создать буферную базу на удаленном сервере и хранимую процедуру, которая сбрасывает туда данные (возможно, понадобится конфигурационная таблица со списком экспортируемых таблиц).
2. Делается backup буферной базы и передается любыми доступными средствами (I-net, e-mail, на лошадях) на центральный сервер.
3. На центральном сервере делается restore буферной базы и запускается хранимая процедура импорта из буферной базы в основную.
Таким образом клиентское приложение должно содержать 2 функции "Экспорт" и "Импорт" для запуска соответствующих хранимых процедур.
В общем, как я уже говорила, дело муторное.
Хотелось бы услышать мнение опытных в этом деле программистов, для меня эта тема тоже актуальная.
Критикуйте (желательно конструктивно), мастера!
← →
Danilka © (2005-02-18 09:02) [9][8] Ольга (18.02.05 07:51)
> Не советую связываться с текстовыми файлами. Имея мощные
> средства SQL, не стоит переходить на "пещерный" уровень.
То-то и в Орокле и в МССкуле есть штатные средства загрузки/выгрузки данных в текстовые файлы. :)
← →
Danilka © (2005-02-18 09:06) [10]По большому счету, неважно в какие форматы файлов выгружать данные, это не самая большая проблема, проблемы возникнут при загрузке, например - дубликаты ключевых полей. Впрочем, все зависит от того, как спроектирована база и от того, какие именно сведения необходимо передавать. А вообще, при проектировании базы данных обычно учитывают, будет ли она работать в таком распределенном режиме или нет.
← →
Ольга (2005-02-18 09:16) [11][10]
Именно по этой причине загрузка из текстового файла и не подходит. Нужна процедура, отслеживающая корректность загружаемых данных, потому гораздо удобнее манипулировать данными, лежащими в таблице, а не в текстовом файле.
← →
Danilka © (2005-02-18 09:30) [12][11] Ольга (18.02.05 09:16)
> Именно по этой причине загрузка из текстового файла и не
> подходит.
Говорою-же, формат значения не имеет. Ну передавай, например, по 3 текстового файла на каждую таблицу: новые записи с момента последней загрузки, имененные записи, идентификаторы удаленных записей.
В базе триггер на добавление/изменение/удаление в этой таблице, который пишет в другую таблицу идентификатор записи, дату и код операции. А в выгрузке, выгружаешь отуда все идентификаторы удаленных записей с момента последней загрузки в файл с удаленными записями, выгружаешь все измененные и удаленные, с момента последней выгрузки, записи в соответствующие файлы.
Потом, всю эту кучу файлов арживируешь в один.
Ну и загрузка соответствующая.
Это так, что навскидку сейчас придумалось. Наверняка, можно найти косяки и можно придумать лучше варианты. :)
← →
Danilka © (2005-02-18 09:33) [13]При желании, можно все и в один файл текстовый запихнуть, просто сначала идет заголовок: такая-то таблица, столько-то новых записей, столько-то измененных, столько-то айдишников удаленных.
Затем в этом-же файле заголовок для следующей таблицы, и т.д.
← →
Reindeer Moss Eater © (2005-02-18 09:38) [14]Именно по этой причине загрузка из текстового файла и не подходит.
Зависит от развитости фантазии загружающего.
Кто-то выполняет сложные запросы прямо над экспортно/импортным файлом. Кто-то грузит этот файл в буферную таблицу и обрабатывает непосредственный импорт пользуясь всем богатством средств языка платформы назначения.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c