adsl club

Справочник

Форум

Программы

Фильмы

Ресурсы

Файлообмен

Хостинг

Ростелеком
синхронизация БД на локальном ПК с БД на сервере
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ
Автор Сообщение
leoboec
Эксперт
СообщениеДобавлено: Ср 28-04-10 : 19-24    Заголовок сообщения: синхронизация БД на локальном ПК с БД на сервере Ответить с цитатой

в общем суть такая... пишу программу на си билдере с БД.. на данном этапе БД стандартно paradox.. но думаю что переделаю сразу под MySQL .. и скажем есть БД на сервере как мне синхронизировать записи??? подскажите?? или ссылки на какие нибудь конкретные статьи и методы синхронизации
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
noobas
Эксперт
СообщениеДобавлено: Ср 28-04-10 : 19-35    Заголовок сообщения: Ответить с цитатой

http://www.mysql.ru/docs/man/Replication.html
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
leoboec
Эксперт
СообщениеДобавлено: Ср 28-04-10 : 19-37    Заголовок сообщения: Ответить с цитатой

noobas писал(а):
http://www.mysql.ru/docs/man/Replication.html

большое спасибо! будем вникать Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
zmeeed
Эксперт
СообщениеДобавлено: Чт 29-04-10 : 00-02    Заголовок сообщения: Ответить с цитатой

http://www.webnext.ru/blog/2007/08/21/replication-mysql-master-slave.html все разжёвано и без особого вникания
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение Jabber ID Номер ICQ
leoboec
Эксперт
СообщениеДобавлено: Пн 17-05-10 : 12-18    Заголовок сообщения: Ответить с цитатой

ага сейчас вопрос зашел чуть глубже... а как связать бд mysql c сибилдером???!.. то есть суть вопроса вообще такова:
создаю программу на билдере в которой есть бд на mysql и далее есть бд на mysql на сервере.. с такими же таблицами. вот как это сделать? в общих чертах последовательность действий? заранее благодарен
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
AlexRock
Гуру
СообщениеДобавлено: Пн 17-05-10 : 14-43    Заголовок сообщения: Ответить с цитатой

Самый тупой простой способ - писать запросы на эскуэле к серверной БД и выбирать из неё данные, которые потом вставлять в клиентскую БД (там с типами данных, возможно, придётся разбираться). А если есть какие-то встроенные механизмы синхронизации, фреймворки (у того же Microsoft есть фреймворк, в котором даже для таких вот запросов надо объекты эскуэль запросов создавать, в которых сам запрос прописываешь, параметры нужные (типа строки соединения и пр.) и вызываешь функцию выполнения запроса), которые за вас всё настроят и все запросы напишут, а вам только указать несколько опций нужно будет, то это, как говорится, дополнительный плюс.

Ну, плюс логику синхронизации надо проработать. Типа, сначала запросить удаления, потом вставки, потом обновления. Или как-то по-другому, как вам надо. По каким параметрам сравнивать - например, по datetime, timestamp или что-то своё.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
leoboec
Эксперт
СообщениеДобавлено: Пн 17-05-10 : 21-20    Заголовок сообщения: Ответить с цитатой

ага спасибо.. а можно поконкретнее как связать билдер и эскуэль через ADO а как именно не совсем понимаю логику соединения... как раз я так понимаю что после такого соединения и можно будет создавать таблицы и прочее не прописывая тупо запросы на эскуэль! именно это и хочу попытаться сделать
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
AlexRock
Гуру
СообщениеДобавлено: Пн 17-05-10 : 22-41    Заголовок сообщения: Ответить с цитатой

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

Если у тебя не компактный фреймворк, то можно использовать LINQ to SQL - я его лучше знаю, чем SQL, да и удобнее мне с ним. Однако, там свои заморочки.

Как связать Билдер с АДО, я не знаю. Лучше использовать Вижуал Студио, по-моему. И лучше писать на C#, если ещё только определяешься в выборе языка для программирования под Виндоус. На СиШарпе просто проще, по-моему.

Не прописывая запросы эскуэль, ты сможешь создавать таблицы только в каком-нибудь редакторе для БД или через тот же LINQ, по-моему. Я просто создавал таблицу на сервере (под СУБД MS SQL Server) и либо с помощью WCF синхронизировал данные с клиентом (тогда локальная копия сервеной БД автоматом создаётся - там мастера пишут нужные запросы на копирование схемы сверерной БД и создания локальной БД по этой схеме), либо писал свои запросы с клиента на сервер для той же синхронизации, да хоть для чего.

Далее внизу примеры на СиШарп и дотНЕТ фреймворке.

Вот простое соединение с локальной БД в SQL Server Compact с использованием LINQ to SQL (вставка данных в таблицу):

Код:
System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
private string connectionString = System.IO.Path.GetDirectoryName(a.Location) + @"\db.sdf";

CornIllnesses db = new CornIllnesses(connectionString);

Herbicides record = new Herbicides
                    {
                        Name = "Name",                       
                        ActiveAgentId = (from rec in db.ActiveAgents
                                         where rec.Name == comboBox10.Text
                                         select rec.Id).FirstOrDefault<int>()
                    };

db.Herbicides.InsertOnSubmit(record);
db.SubmitChanges();


Вот простое соединение с БД в SQL Server на сервере в Интернете с использованием ADO.NET и компактного фреймворка (считываю данные на сервере и вставляю их в клиентскую БД в виде sdf-файла, ещё листбокс заполняю):

Код:
// Server connection data.
private string serverConnectionString = "";
private string serverDataSource = "192.168.0.1";
private string serverPort = "1433";
private string serverInitialCatalog = "db";
private string serverUserID = "sa";
private string serverPassword = "password";

// Client connection data.
private string clientConnectionString = "Data Source=" +
    System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) +
    @"\db.sdf" +
    ";Password=password;";

// Initialize server connection string.
            serverConnectionString =
                "Data Source=" + serverDataSource +
                "," + serverPort +
                ";Initial Catalog=" + serverInitialCatalog +
                ";User ID=" + serverUserID +
                ";Password=" + serverPassword + ";";

List<string> guids = new List<string>();
List<string> names = new List<string>();

string query = "SELECT id, name FROM Table1 ORDER BY name";     
            SqlCommand command = new SqlCommand(query, serverConnection);
SqlDataReader dr = command.ExecuteReader();
            serverConnection.Open();
            while (dr.Read())
            {
                guids.Add(dr["id"].ToString());
                names.Add(dr["name"].ToString());
            }

            dr.Close();
            serverConnection.Close();

SqlCeConnection clientConnection = new SqlCeConnection(clientConnectionString);
            clientConnection.Open();

            for(int i = 0; i < guids.Count; i++)
            {
                string query1 = "INSERT into Table1 (guid, name) values ('" +
                    guids[i] + "', '" +
                    names[i] + "')";

                SqlCeCommand command1 = new SqlCeCommand(query1, clientConnection);
                command1.ExecuteNonQuery();
            }

            // Reading data from local database and filing the clientDataListBox.

            clientDataListBox.Items.Clear();
            string query = "SELECT name FROM Table1";
            SqlCeCommand command = new SqlCeCommand(query, clientConnection);
            SqlCeDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {
                clientDataListBox.Items.Add(dr["name"].ToString());
            }

            dr.Close();
            clientConnection.Close();


Как-то так. Надёргал последовательно кода из разных обработчиков, поэтому конфликты имёт могут быть, например, между одноимёнными SqlCeCommand или SqlCeDataReader, но тут надо просто назвать их по-разному.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
leoboec
Эксперт
СообщениеДобавлено: Вт 18-05-10 : 11-51    Заголовок сообщения: Ответить с цитатой

с языком уже точно решено что это билдер.. просто я его хоть немного но знаю.. на сишарп к сожалению времени сейчас нет... за подсказки спасибо Smile)) будем смотреть может быть по аналогии Smile действовать... вопросы будут еще задам Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
AlexRock
Гуру
СообщениеДобавлено: Вт 18-05-10 : 14-53    Заголовок сообщения: Ответить с цитатой

leoboec писал(а):
с языком уже точно решено что это билдер.. просто я его хоть немного но знаю.. на сишарп к сожалению времени сейчас нет.

Язык - Билдер? Билдер - это от бывшей Борланд?

...Что-то вы намешали всё в кучу: ADO, Builder, MySQL, Paradox, C. По мне, так если используешь технологии какой-то одной фирмы, то лучше её до конца использовать, а не мешать СУБД от одних, технологию доступа к данным от других, среду программирования от третьих и язык от четвёртых - будет куча проблем и нестыковок, которых при использовании продуктов только одной стороны не будет. Например, для использования синхронизации БД с помощью WCF надо писать свои классы для СУБД не MS SQl Server.
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение  
leoboec
Эксперт
СообщениеДобавлено: Вт 18-05-10 : 15-14    Заголовок сообщения: Ответить с цитатой

Си Билдер это в данном случае язык программирования ADO это компоненты си билдера для связи с бд... paradox это как бы бд по умолчанию в билдере.. но сейчас от этого отошел решил что буду mysql использовать и в билдере и на сервере... к сожалению сейчас о глубоком изучении речи не идет.. так как надо сделать дипломку... если понравится буду развивать проект нет так нет... Smile воот.. сейчас стоит проблема по настройки драйвера odbc поэтому кто может подскажите Smile
 Наверх
Посмотреть профиль / Отправить личное сообщение Отправить личное сообщение   Номер ICQ
Показать сообщения:   
Ответить на тему    Форум АДСЛ КлубаЦИФРОВОЙ ФЛЕЙМ :)ПРОГРАММИРОВАНИЕ Часовой пояс: GMT + 7
Страница 1 из 1

 

 
Аватары: Вкл|Выкл   ЮзерИнфо: Вкл|Выкл   Подписи: Вкл|Выкл
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы