Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Экспорт данных   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.053 c
4-1107822158
romshtain
2005-02-08 03:22
2005.03.20
Знаю чужого хендл окна, как получить хендлы всех объектов


3-1108558796
DimonNew
2005-02-16 15:59
2005.03.20
DBGrid & ButtonStyle


1-1109797832
Knight
2005-03-03 00:10
2005.03.20
Качать всем! Читать, а только потом с вопросами в основную... :)


3-1108641488
LEONardo
2005-02-17 14:58
2005.03.20
Обработка двух групповых функций


14-1109591523
Александр Иванов
2005-02-28 14:52
2005.03.20
Стоимость MS SQL