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